Raspberry pi:按下PULLED UP开关时发送电子邮件

时间:2016-03-29 09:24:21

标签: python windows raspberry-pi putty

我创建了python脚本mail.py,其中包括按下gpio 4时发送邮件的代码..我的gpio 4是PULLED UP开关,但问题是当我直接运行脚本时它运行意味着它发送邮件但是当我按下那个开关,它在按下开关之前没有运行它走出循环并且脚本没有运行,电子邮件也没有发送..我也放了延迟...我认为问题是当我按下开关一次它必须存储开关的状态所以10秒后它读取状态,但我不能存储开关的状态..如果任何建议请告诉我..提前谢谢。

2 个答案:

答案 0 :(得分:1)

我不确定我明白你要做什么,但在我看来你希望这个脚本能够运行,直到按下按钮然后发送一次邮件?

GPIO.wait_for_edge(4, GPIO.FALLING)中的某些内容最适合您的代码,例如:

try:  
    GPIO.wait_for_edge(4, GPIO.FALLING)
    # Create email
    ...
except KeyboardInterrupt:  
    GPIO.cleanup()
GPIO.cleanup()

但是,每按一次按钮,您可能想要发送邮件?如果是这样,使用GPIO.add_event_detect使用回调函数会更好。在这种情况下,这更合适:

# Create and send mail
def send_mail():
    ...

# add rising edge detection on a channel, ignoring further edges 
# for 200ms for switch bounce handling
GPIO.add_event_detect(channel, GPIO.FALLING, callback = send_mail, bouncetime = 200)

有关RPi.GPIO输入的更多详细信息,请参阅:https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/

答案 1 :(得分:0)

您可以在循环内编写侦听器,也可以将邮件功能编写为函数

GPIO.setup(23,GPIO.IN,pull_up_down = GPIO.PUD_DOWN)

GPIO.setup(24,GPIO.IN,pull_up_down = GPIO.PUD_UP)

而True:

if(GPIO.input(23)== 1):

按下

#按钮然后调用mail()函数

#after excutting the function如果需要你可以再次将精确定位回0

if(GPIO.input(24)== 0):

打印(“按下2按钮”)

GPIO.cleanup()

试试这个例子