Jetson Nano GPIO

前言

jetson-gpio 是一个可以使用Jetson 系列 GPIOs的Python库, Github地址为: https://github.com/NVIDIA/jetson-gpio

Jetson TX1, TX2, AGX Xavier, 和 Nano开发板上都有一个40 Pin的接口, 类似于树莓派, 可以方便使用树莓派众多的扩展板卡. 这些GPIO的控制如读, 写, 中断, PWM等都可以通过jetson-gpio库来进行, 之前已经介绍了:

RPi.GPIO 官方使用文档翻译
NVIDIA Xavier GPIO 输入输出 中断 PWM

本篇以Jetson Nano为例, 先贴下引脚分布, 中间的两列Pin在板子上有丝印号:
在这里插入图片描述

启用Jetson-GPIO

Jetson系统目录/opt/nvidia/jetson-gpio已经默认下好了这个库, 直接配置一下:

cd /opt/nvidia/jetson-gpio
sudo python3 setup.py install

就可以使用了, 当然这个版本可能有些老, 新的可以直接从github下载:

git clone https://github.com/NVIDIA/jetson-gpio.git
cd jetson-gpio/ 
sudo python3 setup.py install

试一下:

# 涉及硬件操作很多需要权限, 直接sudo
sudo python3
>>> import Jetson.GPIO as GPIO
>>> GPIO.VERSION
'2.0.4'
>>> GPIO.RPI_INFO
{'P1_REVISION': 1, 'RAM': '4096M', 'REVISION': 'Unknown', 'TYPE': 'Jetson Nano', 'MANUFACTURER': 'NVIDIA', 'PROCESSOR': 'ARM A57'}

上面查看了库的版本为2.0.4, 还有板子的信息.

GPIO测试

新建 blink.py, 填入:

import Jetson.GPIO as GPIO
import sys
import time 

led_pin = 40

def main():
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(led_pin, GPIO.OUT)
    try:
        while True:
            GPIO.output(led_pin, GPIO.HIGH)
            time.sleep(2000)
            GPIO.output(led_pin, GPIO.LOW)
            time.sleep(2000)
    except KeyboardInterrupt:
        GPIO.cleanup(led_pin)

if __name__ == '__main__':
    main()        

注意GPIO.setmode(GPIO.BOARD)设置了IO映射和板子上的丝印一致, 建议大家用这种IO定义, 所见即所得, 万用表/串2KΩ电阻的LED/示波器之类的连接39(GND)和40引脚, 运行程序:

sudo python3 blink.py

可以看到40引脚每2s翻转一次.

要注意GPIO驱动能力较弱, 最好不要超过1mA, 同时并不是板子上40Pin接口所有标数字的IO都能当GPIO用, 可以自己动手试试.

Example

jetson-gpio/samples给出了几个示例文件, 查看这几个文件可以快速掌握使用方法:
在这里插入图片描述
如中断的例子, 打开button_interrupt.py:

import RPi.GPIO as GPIO
import time

# Pin Definitions:
led_pin_1 = 12
led_pin_2 = 13
but_pin = 18

# blink LED 2 quickly 5 times when button pressed
def blink(channel):
    print("Blink LED 2")
    for i in range(5):
        GPIO.output(led_pin_2, GPIO.HIGH)
        time.sleep(0.5)
        GPIO.output(led_pin_2, GPIO.LOW)
        time.sleep(0.5)

def main():
    # Pin Setup:
    GPIO.setmode(GPIO.BOARD)  # BOARD pin-numbering scheme
    GPIO.setup([led_pin_1, led_pin_2], GPIO.OUT)  # LED pins set as output
    GPIO.setup(but_pin, GPIO.IN)  # button pin set as input

    # Initial state for LEDs:
    GPIO.output(led_pin_1, GPIO.LOW)
    GPIO.output(led_pin_2, GPIO.LOW)

    GPIO.add_event_detect(but_pin, GPIO.FALLING, callback=blink, bouncetime=10)
    print("Starting demo now! Press CTRL+C to exit")
    try:
        while True:
            # blink LED 1 slowly
            GPIO.output(led_pin_1, GPIO.HIGH)
            time.sleep(2)
            GPIO.output(led_pin_1, GPIO.LOW)
            time.sleep(2)
    finally:
        GPIO.cleanup()  # cleanup all GPIOs

if __name__ == '__main__':
    main()

如果不想参考示例代码改, 可以查看之前写的RPi.GPIO 官方使用文档翻译 的博客.

注意示例代码中Jetson PWM的限制:
在这里插入图片描述

微信公众号

欢迎扫描关注我的微信公众号, 及时获取最新文章:
在这里插入图片描述

发布了203 篇原创文章 · 获赞 105 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/weifengdq/article/details/103606257