在GPIO输入的上升沿上通过端子关闭

时间:2018-11-05 19:36:31

标签: python terminal raspberry-pi gpio

我试图在GPIO#4的上升沿触发Raspberry Pi关闭。我最终希望在启动时自动运行此脚本。

我的python代码在文件test1.py @ / home / pi

#!/usr/bin/python
print("Starting")
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.add_event_detect(4, GPIO.RISING)
def my_callback(x):
    print("Event Triggered")
    command = "/usr/bin/sudo /sbin/shutdown -r now"
    import subprocess
    process = subprocess.Popen(command.split(), stdout=subprocess.PIPE)
    output = process.communicate()[0]
    print(output)
    x=1

GPIO.add_event_callback(4,my_callback)
print("End")

我的终端代码是

sudo python test1.py

我的输出是

Starting
End

当我将上面的python代码输入到Python shell中时,我得到了上面的输出,并在触发GPIO4时将其关闭。

当我从终端调用它时,我得到了上面的输出,但是在触发GPIO4时没有任何反应。

我缺少什么,这样可以在终端屏幕上正常工作吗?

1 个答案:

答案 0 :(得分:1)

您的脚本似乎直接退出而无需等待事件。您可能要使用一个阻止脚本直到事件发生的函数。

if GPIO.wait_for_edge(4,GPIO.RISING):
    my_callback()
程序末尾的

将阻塞线程,直到检测到边缘为止。您似乎在函数中不需要x,所以我省略了它。这项更改也不需要GPIO.add_event_detect(4, GPIO.RISING)GPIO.add_event_callback(4,my_callback)