【问题标题】:Raspberry Pi3 - Python3: does GPIO.add_event_detect needs a "while true" loop?Raspberry Pi3 - Python3:GPIO.add_event_detect 是否需要“while true”循环?
【发布时间】:2016-07-20 06:34:47
【问题描述】:

我在网上阅读了一些 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 上的下降沿,或者我可以激活处理程序并结束程序吗? 我之所以问这个问题是因为我阅读了许多关于使用中断处理程序与轮询 GPIO 引脚的优势的文章。而这个while true: 循环在我看来几乎是一样的,就像在 Pins 上轮询一样。
我以前用Java开发。在那里您定义中断处理程序/侦听器,然后您可以在世界另一端的某个地方处理事件。我认为这在 Python 中不起作用,对吧?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 2019-09-18
      • 2013-05-24
      • 2017-01-19
      • 2017-07-14
      • 1970-01-01
      相关资源
      最近更新 更多