Jetson GPIO库提供了RPi.GPIO库提供的所有公共API。下面讨论每种API的用法:
要导入Jetson.GPIO模块,请使用:
import Jetson.GPIO as GPIO
通过这种方式,您可以在应用程序的其余部分中将该模块称为GPIO。模块也可以使用RPi的名称导入。GPIO代替了Jetson。GPIO用于使用RPi库的现有代码。
Jetson GPIO库提供了四种给IO引脚编号的方法。前两个对应于RPi.GPIO库提供的模式,即BOARD和BCM,分别引用40引脚GPIO接头连接器的引脚号和Broadcom SoC GPIO编号。其余两种模式CVM和TEGRA_SOC使用字符串代替数字,而数字分别对应于CVM CVB连接器和Tegra SoC上的信号名称。
要指定您正在使用哪种模式(强制性),请使用以下函数调用:
GPIO.setmode(GPIO.BOARD)# or
GPIO.setmode(GPIO.BCM)# or
GPIO.setmode(GPIO.CVM)# or
GPIO.setmode(GPIO.TEGRA_SOC)
要检查已设置的模式,可以调用:
mode = GPIO.getmode()
该模式必须为GPIO.BOARD,GPIO.BCM,GPIO.CVM,GPIO.TEGRA_SOC或无。
您尝试使用的GPIO可能已在当前应用程序外部使用。在这种情况下,如果使用的GPIO配置为除默认方向(输入)以外的任何值,Jetson GPIO库将向您发出警告。如果在设置模式和通道之前尝试清理,它也会警告您。要禁用警告,请使用:
GPIO.setwarnings(False)
在用作输入或输出之前,必须先设置GPIO通道。要将通道配置为输入,请调用:
GPIO.setup(channel, GPIO.IN)
要将通道设置为输出,请调用:
GPIO.setup(channel, GPIO.OUT)
也可以为输出通道指定一个初始值:
GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)
将一个通道设置为输出时,也可以一次设置多个通道:
channels = [18, 12, 13]
GPIO.setup(channels, GPIO.OUT)
要读取通道的值,请使用:
GPIO.input(channel)
这将返回GPIO.LOW或GPIO.HIGH。
要设置配置为输出的引脚的值,请使用:
GPIO.output(channel, state)
状态可以是GPIO.LOW或GPIO.HIGH。
您还可以输出到频道列表或元组:
channels = [18, 12, 13] # or use tuples
GPIO.output(channels, GPIO.HIGH) # or GPIO.LOW
GPIO.output(channel, (GPIO.LOW, GPIO.HIGH, GPIO.HIGH))
在程序结束时,最好清理通道,以便将所有引脚设置为默认状态。要清理所有使用的通道,请使用:
GPIO.cleanup()
如果您不想清除所有通道,也可以清除单个通道或通道列表或元组:
GPIO.cleanup(chan1) # cleanup only chan1
GPIO.cleanup([chan1, chan2]) # cleanup only chan1 and chan2
GPIO.cleanup((chan1, chan2)) # does the same operation as previous statement
要获取有关Jetson模块的信息,请使用/阅读:
GPIO.JETSON_INFO
这为Python字典提供了以下键:P1_REVISION,RAM,REVISION,TYPE,MANUFACTURER和PROCESSOR。字典中的所有值都是字符串,但P1_REVISION是整数。
要获取有关库版本的信息,请使用/阅读:
GPIO.VERSION
这提供了XYZ版本格式的字符串。
除了繁忙的轮询外,该库还提供了三种监视输入事件的方法:
该函数阻塞调用线程,直到检测到提供的边缘为止。该函数可以如下调用:
GPIO.wait_for_edge(channel, GPIO.RISING)
第二个参数指定要检测的边缘,可以是GPIO.RISING,GPIO.FALLING或GPIO.BOTH。如果只想将等待时间限制为指定的时间,则可以选择设置超时:
GPIO.wait_for_edge(channel, GPIO.RISING, timeout=500)
该函数返回检测到边缘的通道;如果发生超时,则返回无。
此功能可用于定期检查自上次通话以来是否发生了事件。该函数可以如下设置和调用:
GPIO.add_event_detect(channel, GPIO.RISING)
run_other_code()
if GPIO.event_detected(channel):
do_something()
和以前一样,您可以检测GPIO.RISING,GPIO.FALLING或GPIO.BOTH的事件。
此功能可用于为回调函数运行第二个线程。因此,响应边缘,回调函数可以与主程序并发运行。可以按以下方式使用此功能:
def callback_fn(channel):
print("Callback called from channel %s" % channel)
GPIO.add_event_detect(channel, GPIO.RISING, callback=callback_fn)
如果需要,还可以添加多个回调:
def callback_one(channel):
print("First Callback")
def callback_two(channel):
print("Second Callback")
GPIO.add_event_detect(channel, GPIO.RISING)
GPIO.add_event_callback(channel, callback_one)
GPIO.add_event_callback(channel, callback_two)
在这种情况下,这两个回调是顺序运行的,而不是同时运行,因为只有线程运行所有回调函数。
为了通过将多个事件折叠为一个事件来防止多次调用回调函数,可以选择设置反跳时间:
GPIO.add_event_detect(channel, GPIO.RISING, callback=callback_fn,bouncetime=200)
如果不再需要边缘检测,可以按以下步骤将其删除:
GPIO.remove_event_detect(channel)
此功能使您可以检查提供的GPIO通道的功能:
GPIO.gpio_function(channel)
该函数返回GPIO.IN或GPIO.OUT。
请参阅samples/simple_pwm.py有关如何使用PWM通道的详细信息。
Jetson.GPIO库仅在附带硬件PWM控制器的引脚上支持PWM。与RPi.GPIO库不同,Jetson.GPIO库不实现软件仿真的PWM。Jetson Nano支持2个PWM通道,而Jetson AGX Xavier支持3个PWM通道。Jetson TX1和TX2不支持任何PWM通道。
系统引脚复用器必须配置为将硬件PWM控制器连接到相关引脚。如果未配置pinmux,则PWM信号将不会到达引脚!Jetson.GPIO库不会动态修改pinmux配置来实现此目的。阅读L4T文档以获取有关如何配置pinmux的详细信息
完整英文版说明见: https://github.com/NVIDIA/jetson-gpio