前言
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的限制:
微信公众号
欢迎扫描关注我的微信公众号, 及时获取最新文章: