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的限制:
在這裏插入圖片描述

微信公衆號

歡迎掃描關注我的微信公衆號, 及時獲取最新文章:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章