使用 python 信号模块设置 GPIO 状态更改的处理程序
Set handler for GPIO state change using python signal module
我想检测 raspberry pi 的 gpio
输入的变化,并使用 python 的信号模块设置处理程序。我是信号模块的新手,我不明白如何使用它。我现在正在使用此代码:
import RPi.GPIO as GPIO
import time
from datetime import datetime
import picamera
i=0
j=0
camera= picamera.PiCamera()
camera.resolution = (640, 480)
# handle the button event
def buttonEventHandler (pin):
global j
j+=1
#camera.close()
print "handling button event"
print("pressed",str(datetime.now()))
time.sleep(4)
camera.capture( 'clicked%02d.jpg' %j )
#camera.close()
def main():
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(2,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(2,GPIO.FALLING)
GPIO.add_event_callback(2,buttonEventHandler)
# RPIO.add_interrupt_callback(2,buttonEventHandler,falling,RPIO.PUD_UP,False,None)
while True:
global i
print "Hello world! {0}".format(i)
i=i+1
time.sleep(5)
# if(GPIO.input(2)==GPIO.LOW):
# GPIO.cleanup()
if __name__=="__main__":
main()
我只是以不同的方式更改了代码,您可以使用 SIGNAL 自由地实现相同的代码 module.You 可以启动新线程并轮询或注册回调事件,方法是使用以下代码并编写您的功能逻辑在它的 运行() 方法中。
import threading
import RPi.GPIO as GPIO
import time
import time
from datetime import datetime
import picamera
i=0
j=0
camera= picamera.PiCamera()
camera.resolution = (640, 480)
PIN = 2
class GPIOThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
while True:
if GPIO.input(PIN) == False: # adjust this statement as per your pin status i.e HIGH/LOW
global j
j+=1
#camera.close()
print "handling button event"
print("pressed",str(datetime.now()))
time.sleep(4)
camera.capture( 'clicked%02d.jpg' %j )
def main():
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(PIN,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(PIN,GPIO.FALLING)
gpio_thread = GPIOThread()
gpio_thread.start()
while True:
global i
print "Hello world! {0}".format(i)
i=i+1
time.sleep(5)
if __name__=="__main__":
main()
上面的代码将迭代直到 PIN 输入变高,所以一旦 PIN 变高,运行 方法内 while 循环的条件就会中断并捕获图片。
因此,为了调用上面的线程,请执行此操作。
gpio_thread = GPIOThread()
gpio_thread.start()
这将调用线程构造函数 init 并初始化构造函数中的变量(如果有),然后执行 运行 方法。
您也可以调用 join() 方法,等待线程完成执行。
gpio_thread.join()
这对我来说总是有效的,干杯!!
我想检测 raspberry pi 的 gpio
输入的变化,并使用 python 的信号模块设置处理程序。我是信号模块的新手,我不明白如何使用它。我现在正在使用此代码:
import RPi.GPIO as GPIO
import time
from datetime import datetime
import picamera
i=0
j=0
camera= picamera.PiCamera()
camera.resolution = (640, 480)
# handle the button event
def buttonEventHandler (pin):
global j
j+=1
#camera.close()
print "handling button event"
print("pressed",str(datetime.now()))
time.sleep(4)
camera.capture( 'clicked%02d.jpg' %j )
#camera.close()
def main():
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(2,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(2,GPIO.FALLING)
GPIO.add_event_callback(2,buttonEventHandler)
# RPIO.add_interrupt_callback(2,buttonEventHandler,falling,RPIO.PUD_UP,False,None)
while True:
global i
print "Hello world! {0}".format(i)
i=i+1
time.sleep(5)
# if(GPIO.input(2)==GPIO.LOW):
# GPIO.cleanup()
if __name__=="__main__":
main()
我只是以不同的方式更改了代码,您可以使用 SIGNAL 自由地实现相同的代码 module.You 可以启动新线程并轮询或注册回调事件,方法是使用以下代码并编写您的功能逻辑在它的 运行() 方法中。
import threading
import RPi.GPIO as GPIO
import time
import time
from datetime import datetime
import picamera
i=0
j=0
camera= picamera.PiCamera()
camera.resolution = (640, 480)
PIN = 2
class GPIOThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
while True:
if GPIO.input(PIN) == False: # adjust this statement as per your pin status i.e HIGH/LOW
global j
j+=1
#camera.close()
print "handling button event"
print("pressed",str(datetime.now()))
time.sleep(4)
camera.capture( 'clicked%02d.jpg' %j )
def main():
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(PIN,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(PIN,GPIO.FALLING)
gpio_thread = GPIOThread()
gpio_thread.start()
while True:
global i
print "Hello world! {0}".format(i)
i=i+1
time.sleep(5)
if __name__=="__main__":
main()
上面的代码将迭代直到 PIN 输入变高,所以一旦 PIN 变高,运行 方法内 while 循环的条件就会中断并捕获图片。
因此,为了调用上面的线程,请执行此操作。
gpio_thread = GPIOThread()
gpio_thread.start()
这将调用线程构造函数 init 并初始化构造函数中的变量(如果有),然后执行 运行 方法。
您也可以调用 join() 方法,等待线程完成执行。
gpio_thread.join()
这对我来说总是有效的,干杯!!