前言
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的限制:
微信公衆號
歡迎掃描關注我的微信公衆號, 及時獲取最新文章: