• Jetsonnano B01 笔记2:GPIO库-Pycharm远程调试-点灯


    今日继续我的Jetsonnano 学习之路,今日主要学习使用Pycharm远程调试Jetsonnano以及驱动使用Jetsonnano的GPIO库,最终尝试使用jetson点亮第一个LED。

    本文搬运成分较多,因为Jetsonnano资料比较少,做这些笔记方便自己以及大家查阅。

    目录

    一、GPIO库:

    Jetsonnano环境配置与安装库:

    Python远程调试与库的导入:

    一、ssh配置:

    1. 确认ssh状态:

    2. 获得设备IP

     二、使用pycharm连接SSH:

    三、Pycharm配置:

    下载Jetson.GPIO库:

    Python代码:

    设置GPIO的引脚定义:

    消除警告:

    设置引脚的模式:

    读取引脚的值:

    设置引脚的值:

    清除所有引脚的设置:

    设置中断:

    事件检测:

    事件回调函数:

    Jetsonnano点灯测试代码:

    在Jetson上的运行:

     运行Python文件:

    停止python代码的运行:

     测试效果图:

    参考文章:


    一、GPIO库:

    Jetson Nano 上设有 40PIN GPIO 接口。 Jetson Nano GPIO 电压为 3.3V ,因此在不使用
    电压电平转换的情况下,不应将高于 3.3V 的电压电平连接 Nano GPIO 引脚。

    Jetson TX1, TX2, AGX Xavier和Nano开发板包含一个40引脚GPIO头,类似于树莓派中的40引脚头。可以使用Jetson GPIO library包中提供的Python库来控制这些GPIO的数字输入和输出。该库具有与RPi相同的API。为树莓派的GPIO库,以便提供一种简单的方法来移动在树莓派上运行的应用程序到Jetson板。

    本文档介绍了The Jetson GPIO库包中包含的内容,如何配置系统并运行提供的样例应用程序,以及库API。

    Jetsonnano环境配置与安装库:

    一般情况下 Jetson Nano 系统已经内置了 Jetson.GPIO 库不需要进行下面的安装和配置。
    1) 首先需要安装 PIP 工具,打开终端后依次输入下方指令:
    sudo apt-get update
    sudo apt-get install python-pip
    sudo apt-get install python3-pip

     2) 接着下载安装Jetson.GPIO库,依次输入下方指令:

    sudo pip install Jetson.GPIO
    sudo pip3 install Jetson.GPIO

     3) 然后设置用户权限,依次输入下方指令:

    sudo groupadd -f -r gpio
    sudo usermod -a -G gpio your_user_name

    4) 99-gpio.rules文件复制到rules.d目录,输入以下命令:

    sudo cp /opt/nvidia/jetson-gpio/lib/python/Jetson/GPIO/99-gpio.rules /etc/udev/rules.d/

     注意:这里要确认python包里rules文件所在的位置是否如上命令

    5) 为了使新规则生效,我们需要运行以下命令来重新引导或重新加载 udev 规则。
    sudo udevadm control –reload-rules && sudo udevadm trigger

    Python远程调试与库的导入:

            有时我们不在jetson上使用pycharm 编程Python,可以选择在电脑上编程后将文件传输给jetson运行,嵌入式设备资源有限,在上面安装一个IDE有点浪费,所以,我们可以在常用开发设备上安装Pycharm,远程连接JetsonNano进行调试。 但电脑上没有jetson的GPIO库,因此这里学习一下怎么使用python远程调试以及导库:

    一、ssh配置:

    1. 确认ssh状态:

     可以通过下面的命令可以查看ssh的状态:

    ps -ef | grep ssh
    

     如果只有ssh-agent 证明只开启了ssh client,没有ssh service,可以手动启动。

    1. # 启动ssh服务
    2. sudo /etc/init.d/ssh start
    3. # 启动ssh服务
    4. sudo service ssh start
    5. # 重启ssh服务
    6. sudo service ssh restart

    2. 获得设备IP

    ssh开启后,通过ifconfig 命令获得JetsonNano的 ip 地址,这里需要注意:

    • (1)无线连接路由器上网方式,查找 wlan 后的ip
    • (2)与路由器LAN口连接上网方式,查找 eth0 后的ip

     二、使用pycharm连接SSH:

     这样就成功连接上了:

    三、Pycharm配置

    下载Jetson.GPIO库:

    根据以下步骤找到并下载库:

    Python代码:

    设置GPIO的引脚定义:

    1. #使用物理引脚编号模式,以板上引脚的物理位置为准。
    2. GPIO.setmode(GPIO.BOARD)
    3. #使用 Broadcom SoC 的引脚编号模式,以引脚在芯片上的编号为准。
    4. GPIO.setmode(GPIO.BCM)
    5. #使用 NVIDIA Tegra 芯片的引脚编号模式,以引脚在芯片上的编号为准。
    6. GPIO.setmode(GPIO.CVM)
    7. #同样使用 NVIDIA Tegra 芯片的引脚编号模式。
    8. GPIO.setmode(GPIO.TEGRA_SOC)

    消除警告:

    GPIO.setwarnings(False)
    

    设置引脚的模式:

    1. GPIO.setup(channel, GPIO.IN) # 引脚设置为输入
    2. GPIO.setup(channel, GPIO.OUT) # 引脚设置为输出
    3. GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH) # 带初始化的引脚定义
    4. # 同时设定多个引脚的定义
    5. channels = [18, 12, 13]
    6. GPIO.setup(channels, GPIO.OUT)

    读取引脚的值:

    GPIO.input(channel)         #返回值为GPIO.LOW or GPIO.HIGH
    

    设置引脚的值:

    GPIO.output(channel, state) #state可以是GPIO.LOW or GPIO.HIGH
    

    清除所有引脚的设置:

    1. GPIO.cleanup() #清除所有引脚的值
    2. GPIO.cleanup([chan1, chan2]) #清除部分引脚的值

    设置中断:

    1. #第二个参数指定要检测的边缘,可以是GPIO.RISING、GPIO.FALLING或GPIO.BOTH。
    2. #如果您只想将等待时间限制为指定的时间,可以选择设置超时:
    3. GPIO.wait_for_edge(channel, GPIO.RISING)
    4. GPIO.wait_for_edge(channel, GPIO.RISING, timeout=500)

    事件检测:

    1. GPIO.add_event_detect(channel, GPIO.RISING)
    2. run_other_code()
    3. if GPIO.event_detected(channel):
    4. do_something()

    事件回调函数:

    1. def callback_one(channel):
    2. print("First Callback")
    3. def callback_two(channel):
    4. print("Second Callback")
    5. GPIO.add_event_detect(channel, GPIO.RISING)
    6. GPIO.add_event_callback(channel, callback_one)
    7. GPIO.add_event_callback(channel, callback_two)

    Jetsonnano点灯测试代码:

    1. #入Jetson.GPIO库并导入time库。
    2. import Jetson.GPIO as GPIO
    3. import time
    4. #定义led_pin变量为GPIO引脚的数字编号,这里是7。
    5. led_pin = 7
    6. #设置GPIO模式为BOARD模式,表示使用物理引脚编号来确定GPIO引脚。
    7. GPIO.setmode(GPIO.BOARD)
    8. #设置led_pin引脚为输出模式。
    9. GPIO.setup(led_pin, GPIO.OUT)
    10. try:
    11. while 1:
    12. # 打印"on"并将led_pin引脚输出设置为高电平,点亮LED灯。
    13. print("on")
    14. GPIO.output(led_pin, GPIO.HIGH)
    15. #使用time.sleep(2)函数延迟2秒
    16. time.sleep(2)
    17. #打印"off"并将led_pin引脚输出设置为低电平,熄灭LED灯。
    18. print("off")
    19. GPIO.output(led_pin, GPIO.LOW)
    20. #使用time.sleep(2)函数延迟2秒
    21. time.sleep(2)
    22. # 如果在循环过程中按下了键盘的Ctrl+C,将会触发KeyboardInterrupt异常。
    23. #在异常处理代码中,将led_pin引脚设置为低电平并执行GPIO.cleanup()函数,清理GPIO资源。
    24. except KeyboardInterrupt:
    25. GPIO.output(led_pin, GPIO.LOW)
    26. GPIO.cleanup()
    27. #打印"done"表示程序运行结束。
    28. print("done")

    在Jetson上的运行:

     运行Python文件:

    编写完代码后保存为.py文件,再将此文件SSH远程传输给Jetsonnano,此处我是直接使用NoMachine远程连接了它的桌面,直接将其拖入文件资源管理器了:

    然后就是打开Jetsonnano的终端,运行这段Python代码(没装Python的需要装):

    1. #此处filename是你自己的文件名
    2. python3 filename.py

    这里注意此处filename是你自己的文件名,我的文件名是1,因此替换为

    python3 1.py

    然后回车就可以运行了。

    停止python代码的运行:

     列出所有正在运行的Python进程:

    ps aux | grep python

    终止进程(其中`pid`是要终止的Python进程的进程ID):

    kill pid

     测试效果图:

    参考文章:

    JetsonNano教程:Pycharm远程调试运行及本地与远端文件同步_jetsonnano运行pycharm-CSDN博客

     jetson nano GPIO控制说明_jetson nano 引脚_AoDeLuo的博客-CSDN博客

  • 相关阅读:
    质量小议14 -- DevOps
    [Vue]缓存路由组件 & activated()与deactivated()
    一篇文章教你自动化测试如何解析excel文件?
    千亿播放量!年轻人又迷上了这些解压方式!!!
    智能导诊系统:基于机器学习和自然语言处理技术,可快速推荐合适的科室和医生
    java计算机毕业设计扶贫信息管理系统源码+系统+lw文档+mysql数据库+部署
    ENSP实验-实现不同VLAN间互访的两种方式
    Kotlin 协程调度切换线程是时候解开真相了
    R语言—数据结构
    Vue mixin混入
  • 原文地址:https://blog.csdn.net/qq_64257614/article/details/132735984