NVIDIA Jetson TX1,TX2,TX2 NX,AGX Xavier 和 Nano开发板GPIO口配置及应用

简介: NVIDIA Jetson TX1,TX2,TX2 NX,AGX Xavier 和 Nano开发板GPIO口配置及应用

NVIDIA Jetson TX1,TX2,TX2 NX,AGX Xavier 和 Nano开发板GPIO口配置及应用


简介


Jetson TX1、TX2、TX2 NX、AGX Xavier和Nano开发板都配备了一个包含40个引脚的GPIO接头,这些引脚可以用于数字输入输出。如下图


类似于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


GPIO 和 BCM 对照表




环境配置


1、下载 jetson-gpio:

执行命令 git clone https://github.com/NVIDIA/jetson-gpio

git clone https://github.com/NVIDIA/jetson-gpio
• 1


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引脚,如下图:


image.png



然后运行程序: 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引脚输出高低电平来控制外部设备的状态。具体功能如下:


  1.    引入RPi.GPIO和time模块。
  2.    定义了4个GPIO引脚的BCM编号、BOARD编号以及对应的引脚状态,在setup_gpio()函数中进行引脚初始化。
  3.    定义了一个名为control_status()的函数,用于根据传入的参数(0~4)控制不同的GPIO引脚输出状态,实现控制外部设备的目的。
  4.    在主程序中通过循环持续接收用户输入num,并调用control_status()函数来控制外部设备。



总结


通过Jetson TX2 NX的GPIO接口控制继电器非常简单。只需要连接继电器模块到正确的GPIO引脚上,安装Jetson GPIO库,编写Python脚本并运行即可。这个技巧可以帮助实现各种下位机控制应用。



详细的GPIO 和 BCM 对照表

相关文章
|
11月前
|
计算机视觉 Python
Jetson 学习笔记(六):cv2调用CSI摄像头(jetson nx/nano)、打开海康摄像头、打开电脑摄像头
这篇文章介绍了在不同平台上接入并显示摄像头视频流的方法,包括海康摄像头的RTSP连接、电脑内置摄像头的直接读取、Jetson NX/Nano通过CSI接口和USB接口的操作,以及Jetson Nano通过Gstreamer管道和jetcam库的使用,并提供了相应的代码示例。
850 1
|
存储 数据采集 传感器
一文多图搞懂KITTI数据集下载及解析
一文多图搞懂KITTI数据集下载及解析
14786 3
一文多图搞懂KITTI数据集下载及解析
|
7月前
|
数据可视化 关系型数据库 MySQL
嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议数据可视化
通过本文的介绍,我们详细讲解了如何结合嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议,实现数据的采集、传输、存储和可视化。这种架构在物联网项目中非常常见,可以有效地处理和展示实时数据。希望本文能帮助您更好地理解和应用这些技术,构建高效、可靠的数据处理和可视化系统。
391 82
|
传感器 机器人 开发者
NVIDIA Jetson TX1,TX2,TX2 NX,AGX Xavier 和 Nano开发板GPIO口配置及应用
NVIDIA Jetson TX1,TX2,TX2 NX,AGX Xavier 和 Nano开发板GPIO口配置及应用
|
算法 编译器 开发者
如何提高Python代码的性能:优化技巧与实践
本文探讨了如何提高Python代码的性能,重点介绍了一些优化技巧与实践方法。通过使用适当的数据结构、算法和编程范式,以及利用Python内置的性能优化工具,可以有效地提升Python程序的执行效率,从而提升整体应用性能。本文将针对不同场景和需求,分享一些实用的优化技巧,并通过示例代码和性能测试结果加以说明。
|
11月前
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
18427 59
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
自然语言处理 IDE 开发工具
通义灵码编程智能体上线,支持Qwen3模型
通义灵码最全使用指南,一键收藏。
128252 31
通义灵码编程智能体上线,支持Qwen3模型
|
11月前
|
PyTorch TensorFlow 算法框架/工具
Jetson环境安装(一):Ubuntu18.04安装pytorch、opencv、onnx、tensorflow、setuptools、pycuda....
本文提供了在Ubuntu 18.04操作系统的NVIDIA Jetson平台上安装深度学习和计算机视觉相关库的详细步骤,包括PyTorch、OpenCV、ONNX、TensorFlow等。
974 1
Jetson环境安装(一):Ubuntu18.04安装pytorch、opencv、onnx、tensorflow、setuptools、pycuda....
|
存储 机器学习/深度学习 人工智能
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
|
Linux Windows
Nomachine 最简安装与使用指南
这是一篇2022年Nomachine软件的极简安装与使用指南,包括Windows和Linux系统下的安装步骤,以及如何在Windows系统上通过Nomachine远程控制Linux系统的方法。
Nomachine 最简安装与使用指南