Raspberry Pi3 - Python3:GPIO.add_event_detect需要一个“while true”循环吗?

时间:2016-07-20 06:34:48

标签: python-3.x gpio interrupt-handling raspberry-pi3

我在网上阅读了一些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中不起作用,对吧?

1 个答案:

答案 0 :(得分:0)

我试了一下,结果是使用while True命令在脚本中有一个GPIO.add_event_detect()循环是绝对必要的。否则脚本刚刚结束,并且没有事件监听器在后台运行(正如我所料)。显然,在这个循环中对系统资源的需求非常低 这个脚本将成为我在GPIO接口上发生的每个中断的监听器,因此我假设我必须在启动Raspberry Pi时启动它并让它一直运行。
如果有人建议如何“发射并忘记”并用Python(3)捕捉听众,那将不胜感激。