Raspberry Pi SW-420振动传感器和Python

时间:2018-02-18 19:54:22

标签: python raspberry-pi gpio vibration

我正在尝试创建一个可以感知洗衣机开启的应用程序。然后,当它完成后,我希望它检测到并闪现我的Hue灯泡。我正在为这个项目使用SW-420振动传感器和Python。我已经成功地认识到振动,但不幸的是,这不是我需要的。以下是我目前的代码。

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import subprocess

#GPIO SETUP
channel = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(channel, GPIO.IN)

def start(channel):
    if GPIO.input(channel):
        print "Dryer has started!"
        time.sleep(1)
    else:
        print "Dryer has stopped" 
        time.sleep(1)
        #f = open("status", "w") #Used to create light status file
        #subprocess.call(["perl", "/home/pi/huepi/huepi", "lights"], stdout=f); # creates status file
        #subprocess.call(["perl", "/home/pi/huepi/huepi", "for", "1 3 4 5 6 10 11 12", "do", "blinkonce"]); # blinks hue bulbs 

GPIO.add_event_detect(channel, GPIO.BOTH, bouncetime=300)  # let us know when the pin goes HIGH or LOW
GPIO.add_event_callback(channel, start)  # assign function to GPIO PIN, Run function on change

# infinite loop
while True:
    time.sleep(1)

我遇到的问题是即使机器运行传感器寄存器已停止。我尝试过使用

GPIO.add_event_detect(channel, GPIO.RISING, bouncetime=300)

GPIO.add_event_detect(channel, GPIO.FALLING, bouncetime=300)

两者都有相同的结果。我只是需要它来注册机器已启动然后停止闪烁Hue灯泡并等待下次机器开始备份。

我正在使用一个名为Huepl的Perl库来连接但是灯泡代码的这一部分工作正常。如果您需要更多信息,我将很乐意提供。先感谢您!

1 个答案:

答案 0 :(得分:0)

在第一次检测到振动时通过回调设置started。每当检测到振动时,都会通过回调设置lastShakeTime

在主循环中检查是否在60秒内未检测到任何内容:

import datetime

# infinite loop
while True:
    time.sleep(1)
    now = datetime.datetime.now()
    if started and (now - lastShakeTime).total_seconds() > 60:
        # do something with your oleds

轮询与基于事件的关系:     https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/