【发布时间】:2015-02-12 12:31:02
【问题描述】:
第一次来。我不是程序员,我正在尝试用我的 RPi 创建一个简单的监控系统,但遇到了一些问题。希望有人可以帮助我吗?
我几乎有这里显示的确切设置(除了按钮是杠杆/开关):http://razzpisampler.oreilly.com/ch07.html#SEC11.1 并在此处遵循有关 GPIO 清理的一些建议: https://www.youtube.com/watch?v=Bqk6M_XdIC0
我需要的是,当不断按下并按下控制杆时,我想发送一封电子邮件。然后释放控制杆时,我希望程序“重新启动”,以便在将来某个时间再次按住控制杆时,会发送另一封邮件。
我已经让单独的导入邮件脚本工作,硬件设置似乎工作正常。
会发生什么:
- 用
sudo python pellets.py启动程序 - 按住控制杆,1 封邮件发送成功,但程序每 3 秒打印一次“SENT 1 MAIL”,直到我松开控制杆 (?)。
- 第二次按住控制杆时,不会发送邮件 (?), 但程序会一直打印“SENT 1 MAIL”,直到我发布 杠杆。
为了让程序再次发送邮件,我需要CTRL+C并中断程序并手动重新启动程序。
我错过了什么?
- 为什么当我松开,重新按住时程序不发送第二封邮件 杠杆?
- 为什么当我保留 杠杆按下?当我设置 send_mail=1 时,循环现在不应该结束吗?
我试图清除 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)
【问题讨论】:
-
你能在
pellets_sendmail中显示代码吗?
标签: python email while-loop raspberry-pi gpio