我在网上阅读了一些GPIO中断文档,例如this,还有一个问题留给我:需要在python脚本中使用GPIO.add_event_detect(<PIN>, <GPIO.EDGE>, callback=<some callback function>, bouncetime=<int>)
来同时拥有while true
循环脚本运行此脚本“无尽”以处理回调例程?
让我们说清楚一点。我的脚本应该如下所示:
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(6, GPIO.OUT)
def my_interrupt_routine(channel):
#do something here
GPIO.add_event_detect(6, GPIO.FALLING, callback=my_interrupt_routine, bouncetime=200)
try:
while True:
pass
except KeyboardInterrupt:
#do something here
finally:
GPIO.cleanup()
所以使用这个脚本 - 是否需要让while true:
循环让中断处理程序等待Pin6上的edg下降,或者我可以只激活处理程序并结束程序?
我问这个是因为我读过很多关于使用中断处理程序与轮询GPIO-Pin的优点的文章。这个while true:
循环对我来说就像在Pins上轮询一样
我以前用Java开发。在那里,您可以定义中断处理程序/侦听器,然后在世界的另一端,您可以处理该事件。我认为这在Python中不起作用,对吧?
答案 0 :(得分:0)
我试了一下,结果是使用while True
命令在脚本中有一个GPIO.add_event_detect()
循环是绝对必要的。否则脚本刚刚结束,并且没有事件监听器在后台运行(正如我所料)。显然,在这个循环中对系统资源的需求非常低
这个脚本将成为我在GPIO接口上发生的每个中断的监听器,因此我假设我必须在启动Raspberry Pi时启动它并让它一直运行。
如果有人建议如何“发射并忘记”并用Python(3)捕捉听众,那将不胜感激。