python - 如何实现事件检测?
问题描述
我想实现一个不会中止程序但等到我按下通道 11 上的按钮的功能。然后再次启动程序。
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
import os
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(11,GPIO.IN) #GPIO17
while GPIO.input(11) == GPIO.LOW:
GPIO.input(11) == GPIO.LOW
os.system("python /home/pi/gpio.py")
if not (GPIO.input(11) == GPIO.HIGH):
break
![在此处输入图像描述] ( https://i.stack.imgur.com/UOzdW.jpg )
解决方案
我非常喜欢使用gpiozero
库进行事件处理。我在下面发布了这个库的示例:
from gpiozero import Button
from signal import pause
import os
buttonPin = 4
def ButtonPressedCallback():
#do what you need when button is pressed
os.system("python /home/pi/gpio.py")
button = Button(buttonPin)
button.when_pressed = ButtonPressedCallback
pause()
或与RPi.GPIO
图书馆:
import RPi.GPIO as GPIO
import time
import os
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(11,GPIO.IN) #GPIO17
def my_callback():
#do something
print("button pressed")
GPIO.add_event_detect(11, GPIO.RISING, callback=my_callback, bouncetime=200)
#You can use GPIO.RISING, GPIO.FALLING, GPIO.BOTH
while True:
time.sleep(0.01)
#Or you can use pause() from signal package