赞
踩
Jetson TX1、TX2、TX2 NX、AGX Xavier和Nano开发板都配备了一个包含40个引脚的GPIO接头,这些引脚可以用于数字输入输出。如下图
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gIr1ItyM-1687860142526)(89dcbf0ee89a41318a67f1a0bf5d1bf4.png)]](https://img-blog.csdnimg.cn/2704ce11f6e34faeace18f66fb60721d.png)
类似于Raspberry Pi上的40引脚接头,这些GPIO接口可用于连接各种外部设备,如传感器、执行器等。 为了方便控制这些GPIO接口,NVIDIA提供了Jetson GPIO Library包,其中包含了Python库,可以使用该库来控制数字输入输出。此库与Raspberry Pi上的RPi.GPIO库具有相同的API,因此用户可以将之前在Raspberry Pi上运行的应用程序轻松地移植到Jetson开发板上。 通过使用这个库,用户可以轻松地编写Python代码来读取和控制GPIO接口,并且可以根据需要进行自定义配置。这使得Jetson开发板成为一个强大的工具,可以用于各种嵌入式应用程序,例如机器人、智能家居系统、自动化控制系统等。对这些进行内容添加,使其变得充实。
本文档将介绍 Jetson GPIO 库包中包含的内容,如何配置系统以及运行提供的示例应用程序和库 API。
这里我们简单介绍一下如何使用这个库关于 Jetson.GPIO, 这里有是官方的详细说明:
https://pypi.org/project/Jetson.GPIO/ 或者 https://github.com/NVIDIA/jetson-gpio
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YFAsMlsb-1687860142532)(image-20230627162919341.png)]](https://img-blog.csdnimg.cn/1c965dff712e4001bb7c02d3e63ae012.png)
1、下载 jetson-gpio:
执行命令 git clone https://github.com/NVIDIA/jetson-gpio
git clone https://github.com/NVIDIA/jetson-gpio
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3msmsdev-1687860142534)(image-20230627163122434.png)]](https://img-blog.csdnimg.cn/45592c7f6b6747faa97e4e272dbf64d9.png)
2、将下载的文件移动到目录: /opt/nvidia 中 假如你的这个目录存在这个库,我们需要备份原目录如下命令:
cd /opt/nvidia
sudo mv ~/jetson-gpio jetson-gpio_bak
3、进入 jetson-gpio 库文件夹,并安装库。
cd /opt/nvidia/jetson-gpio
sudo python3 setup.py install
4、创建一个 gpio 组,把你的当前的登录用户加到这个组,并赋予使用权限
sudo groupadd -f -r gpio
sudo usermod -a -G gpio user_name
sudo cp /opt/nvidia/jetson-gpio/lib/python/Jetson/GPIO/99-gpio.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger
注意: user_name 是你使用的用户名,比如说 nano
5.配置所有用户使用python中GPIO库的权限
sudo chmod a+rw /dev/gpiochip0
sudo chmod a+rw /dev/gpiochip1
sudo chmod a+rw /dev/gpiochip2
这样的话,软件环境就配置好了
环境配置好了之后就可以测试一下例程了。在 jetson-gpio 上提供了几个简单的例程我 们可以简单测试一下,先进入示例程序目录 cd ~/opt/nvidia/jetson-gpio/samples/
1、simple_out.py
代码
#!/usr/bin/env python # Copyright (c) 2019-2022, NVIDIA CORPORATION. All rights reserved. # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), # to deal in the Software without restriction, including without limitation # the rights to use, copy, modify, merge, publish, distribute, sublicense, # and/or sell copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. import RPi.GPIO as GPIO import time # Pin Definitions output_pin = 18 # BCM pin 18, BOARD pin 12 def main(): # Pin Setup: GPIO.setmode(GPIO.BCM) # BCM pin-numbering scheme from Raspberry Pi # set pin as an output pin with optional initial state of HIGH GPIO.setup(output_pin, GPIO.OUT, initial=GPIO.HIGH) print("Starting demo now! Press CTRL+C to exit") curr_value = GPIO.HIGH try: while True: time.sleep(1) # Toggle the output every second print("Outputting {} to pin {}".format(curr_value, output_pin)) GPIO.output(output_pin, curr_value) curr_value ^= GPIO.HIGH finally: GPIO.cleanup() if __name__ == '__main__': main()
这个是一个简单的输入程序,使用的是 BCM 的引脚编码模式,可以读取 PIN12 的值并 打印到终端。
接线:分别将电源正极线、信号线、负极线接到1、12、14引脚,如下图:

然后运行程序: python3 simple_out.py
python3 simple_out.py
预期效果: 运行程序后,可以看到终端打印信息, 程序会输出高电平和低电平(每 2 秒交替更新) 到物理引脚 PIN12

【注意】这里的 18 是指的 BCM 编码, 上面的 PIN12 是指物理编码,也就是板子上印的丝印的编码。
Jetson TX2 NX 的引脚的工作电平是 3.3V,所以使用的时候不要接 5V 电平。
如果需要连接引脚时请注意保护电路,避免短路烧坏元件
2.通过控制继电器控制下位机,实现4个GPIO口的宫殿控制
control.py代码:
#!/usr/bin/env python import RPi.GPIO as GPIO import time # Pin Definitions output_pin1 = 18 # BCM pin 18, BOARD pin 12 output_pin2 = 23 # BCM pin 18, BOARD pin 16 output_pin3 = 24 # BCM pin 18, BOARD pin 18 output_pin4 = 25 # BCM pin 18, BOARD pin 20 def setup_gpio(): GPIO.setmode(GPIO.BCM) # BCM pin-numbering scheme from Raspberry Pi # set pins as output pins with optional initial state of LOW GPIO.setup(output_pin1, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(output_pin2, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(output_pin3, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(output_pin4, GPIO.OUT, initial=GPIO.LOW) def control_status(flag=0): if flag == 0: print('0') elif flag == 1: GPIO.output(output_pin1, GPIO.HIGH) time.sleep(2) setup_gpio() print('1') elif flag == 2: GPIO.output(output_pin1, GPIO.HIGH) GPIO.output(output_pin2, GPIO.HIGH) time.sleep(2) setup_gpio() print('2') elif flag == 3: GPIO.output(output_pin1, GPIO.HIGH) GPIO.output(output_pin2, GPIO.HIGH) GPIO.output(output_pin3, GPIO.HIGH) time.sleep(1) print('3') elif flag == 4: setup_gpio() GPIO.output(output_pin1, GPIO.HIGH) GPIO.output(output_pin2, GPIO.HIGH) GPIO.output(output_pin3, GPIO.HIGH) GPIO.output(output_pin4, GPIO.HIGH) time.sleep(1) print('4') while True: setup_gpio() num = input("input your num") control_status(int(num))
这段代码用于控制Raspberry Pi上的GPIO引脚输出高低电平来控制外部设备的状态。具体功能如下:
通过Jetson TX2 NX的GPIO接口控制继电器非常简单。只需要连接继电器模块到正确的GPIO引脚上,安装Jetson GPIO库,编写Python脚本并运行即可。这个技巧可以帮助实现各种下位机控制应用。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BCUpsiH6-1687860142538)(image-20230627180051567.png)]](https://img-blog.csdnimg.cn/65d0821aa1ce42ed82050fe4ec73e803.png)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。