因此,我目前正在从事Raspberry Pi项目。 我的Raspi已连接到我的信箱,因此每次有人打开它时,都会按下一个按钮。按下按钮后,脚本应该检测到该情况并向我发送电子邮件,然后将当前时间和日期写入.txt文件中。
我自己编写的脚本在互联网的帮助下可以运行,但是每10-20分钟随机检测一次GPIO输入(连接到按钮的电线很长, Raspi连接在充满电缆的房间中,这可能是问题所在)。但是,我尝试使用我刚刚在互联网上找到的脚本来执行此操作。只需复制它(至少是GPIO部分)。因此该脚本有效,但是我的脚本检测到随机输入。
我用旧脚本遇到的另一个问题(您会在脚本中看到它)是,我使用了while循环,它占用了我97%的CPU。因此,我做了另一个工作方式不同的脚本。它不使用我的CPU的97%,但是它检测到随机输入。在我从Internet复制的脚本中,还使用了while循环,但是它并不需要那么多的CPU。但为什么?我也不明白。
这是我的脚本,可以检测随机输入:
import RPi.GPIO as GPIO
import smtplib
import pytz
from pytz import timezone
import datetime
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(7,GPIO.IN,)
def writeanemail():
smtpUser = ''
smtpPass = ''
toAdd = ''
fromAdd = smtpUser
subject = 'Du hast etwas in deinem Postfach'
header = 'To: ' + toAdd + '\n' + 'From: ' + fromAdd + '\n' + 'Subject: ' + subject
print ("\n" + header)
s = smtplib.SMTP('smtp.gmail.com',587)
s.ehlo()
s.starttls()
s.ehlo()
s.login(smtpUser, smtpPass)
s.sendmail(fromAdd, toAdd, header)
s.quit()
def timelog():
now = datetime.datetime.now(timezone('Europe/Berlin'))
file = open("/home/pi/ps/gpio.log","a")
file.write("\n" + now.strftime("%Y-%m-%d--%a %H:%M:%S"))
file.close()
print ("\n" + now.strftime("%Y-%m-%d--%a %H:%M") + "\n" + "\n" + "Log wurde geschrieben")
def main():
GPIO.wait_for_edge(7, GPIO.FALLING, bouncetime = 150)
print ("Knopf wurde gedrueckt, E-Mail wird geschickt.")
sleep(1)
writeanemail()
timelog()
sleep(10)
main()
main()
这是复制的,效果很好:
import RPi.GPIO as GPIO
from pytz import timezone
import datetime
# SET GPIO Button-Pin
gpio = 7
def writeanemail():
smtpUser = ''
smtpPass = ''
toAdd = ''
fromAdd = smtpUser
subject = 'Du hast etwas in deinem Postfach'
header = 'To: ' + toAdd + '\n' + 'From: ' + fromAdd + '\n' + 'Subject: ' + subject
print ("\n" + header)
s = smtplib.SMTP('smtp.gmail.com',587)
s.ehlo()
s.starttls()
s.ehlo()
s.login(smtpUser, smtpPass)
s.sendmail(fromAdd, toAdd, header)
s.quit()
# Main Function
def main():
value = 0
while True:
if not GPIO.input(gpio):
value += 0.01
if value > 0:
if GPIO.input(gpio):
print "gedrueckt"
now = datetime.datetime.now(timezone('Europe/Berlin'))
file = open("/home/pi/ps/gpio.log","a")
file.write("\n" + now.strftime("%Y-%m-%d--%a %H:%M:%S"))
file.close()
writeanemail()
main()
time.sleep(0.03)
return 0
if __name__ == '__main__':
GPIO.setmode(GPIO.BCM)
GPIO.setup(gpio, GPIO.IN)
main()
在这里,我仅复制了main函数,Email部分是相同的。 感谢您的帮助和建议。