第一次来到这里。我不是程序员,我试图用我的RPi创建一个简单的监控系统,但遇到了一些问题。希望有人可以帮助我吗?
我几乎有这里显示的确切设置(除了按钮是杠杆/开关):http://razzpisampler.oreilly.com/ch07.html#SEC11.1 并遵循GPIO清理方面的一些建议: https://www.youtube.com/watch?v=Bqk6M_XdIC0
我需要的是,当按下杠杆并且按下按下时,我想发送一封电子邮件。当杠杆释放后,我希望程序能够重新启动"因此,当将来再次按住杠杆时,会发送另一封邮件。
我已经让单独的导入邮件脚本工作,硬件设置似乎正在运行。
会发生什么:
sudo python pellets.py
对于程序再次发送邮件,我需要按CTRL + C并中断程序并手动重启程序。
我错过了什么?
我试图清理if-loop中的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)
答案 0 :(得分:2)
你的问题实际上是两个问题。
首先,它打印" SENT 1 MAIL"连续因为else子句将重置你的mail_sent
杠杆是否已启动或 mail_sent
不是0.您可能需要指定杠杆应该在{{}}之前{1}}可以重置:
mail_sent
其次,你只能导入一次另一个python模块。我假设 if input_state == 0 and mail_sent == 0:
...
elif input_state == 1: # Whatever your "up" state is
mail_sent = 0
发送了您的邮件消息。第一次导入它时,文件正常运行,但之后它不会再次执行该文件。我建议在pellets_sendmail.py
内部发送一个发送消息的函数,而不是让你的脚本直接发送消息
pellets_sendmail.py
Here's a tutorial on writing functions如果您不确定如何操作。只需移动你现在使用的任何代码将邮件发送到它自己的离散函数(我在我的例子中称之为import pellets_sendmail # put this at the top of your script
...
if input_state == 0 and mail_sent == 0:
pellets_sendmail.sendmail()
...
,但你可以随意调用它。)