第一次来这里。我不是一个程序员,我试图用我的RPi创建一个简单的监控系统,但是遇到了一些问题。希望有人能在我的路上帮我?
我几乎完全按照这里所示的设置(除了按钮是一个杠杆/开关):http://razzpisampler.oreilly.com/ch07.html#SEC11.1,并在这里遵循了一些关于GPIO清理的建议:XdIC0
我需要的是,当杠杆被不断地按下,我想发一封电子邮件。当杠杆释放,我希望程序“重新启动”,以便当杠杆再次按住在未来的某个时候,另一封邮件被发送。
我已经使单独导入的邮件脚本工作,硬件设置似乎正在工作。
所发生的是:
sudo python pellets.py启动程序对于程序再次发送邮件,我需要CTRL+C和中断程序和重新启动程序手动。
我遗漏了什么?
我试图清除if-循环中的GPIO通道,但这不像我想的那样有效。然后,文本继续打印,即使在我释放杠杆。然而,没有更多的邮件被发送。
这是我的代码:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(GPIO.IN, pull_up_down=GPIO.PUD_UP)
mail_sent = 0
try:
while True:
input_state = GPIO.input(12)
if input_state == 0 and mail_sent == 0:
import pellets_sendmail
print ('SENT 1 MAIL')
mail_sent = 1
time.sleep(3)
else:
mail_sent = 0
except KeyboardInterrupt:
GPIO.cleanup(12)发布于 2015-02-12 12:42:21
你的问题其实是两个问题。
首先,它将连续打印“发送1封邮件”,因为whether子句将重置您的mail_sent,不管杠杆是打开还是mail_sent不是0。您可能需要指定,在mail_sent可以重置之前,杠杆应该是向上的:
if input_state == 0 and mail_sent == 0:
...
elif input_state == 1: # Whatever your "up" state is
mail_sent = 0其次,您只能导入另一个python模块一次。我想pellets_sendmail.py会发送您的邮件信息。第一次导入该文件时,该文件将正常运行,但之后不会再次执行该文件。我建议在pellets_sendmail.py中创建一个发送消息的函数,而不是让脚本直接发送消息。
import pellets_sendmail # put this at the top of your script
...
if input_state == 0 and mail_sent == 0:
pellets_sendmail.sendmail()
...下面是关于编写函数的教程,如果你不知道该怎么做的话。只需将用于发送邮件的任何代码移动到它自己的离散函数中(我在我的示例中称它为sendmail(),但您可以任意命名它)。
https://stackoverflow.com/questions/28477542
复制相似问题