刚刚买了一个覆盆子pi b +并决定解决一些"简单"项目。目前,我正在尝试将我的Gmail帐户同步到LED通知程序。
如果我有电子邮件,绿色LED会亮起。如果我没有收到电子邮件,那么红色的电子邮件会亮起来。问题是这个......因为它目前起作用,当我没有电子邮件时,绿色LED亮起,但是,当我至少有一封电子邮件时,两个LED都不亮。我知道硬件方面的一切都在工作,因为我已经测试了不同的组合。
我已经粘贴了下面tutorial的代码,而且我可以告诉它这是一个非常简单的条件,有一些额外的东西,所以它可以和我的覆盆子pi交谈。
奇怪的是if-statement
总是返回true。
import RPi.GPIO as GPIO, feedparser, time
DEBUG = 1
USERNAME = "my-username"
PASSWORD = "my-password"
NEWMAIL_OFFSET = 0 # empty inbox
MAIL_CHECK_FREQ = 60 # check mail every 60 seconds
GPIO.setmode(GPIO.BCM)
GREEN_LED = 18
RED_LED = 23
GPIO.setup(GREEN_LED, GPIO.OUT)
GPIO.setup(RED_LED, GPIO.OUT)
while True:
newmails = int(feedparser.parse("https://" + USERNAME + ":" + PASSWORD +"@mail.google.com/gmail/feed/atom")["feed"]["fullcount"])
if DEBUG:
print "You have", newmails, "new emails!"
if newmails > NEWMAIL_OFFSET:
GPIO.output(GREEN_LED, True)
GPIO.output(RED_LED, False)
else:
GPIO.output(GREEN_LED, False)
GPIO.output(RED_LED, True)
time.sleep(MAIL_CHECK_FREQ)
!
这是我的设置......
答案 0 :(得分:0)
从您的硬件图片看,可能是您的电阻可能会触及那里。此外,进入绿色LED的引线不会在空行上下降。目前,当高电流耗尽时,它将与引脚16和您的电压进行交互......本文可能有所帮助
https://learn.adafruit.com/raspberry-pi-e-mail-notifier-using-leds/wire-leds
答案 1 :(得分:0)
首先只是为了清楚说明:只要收件箱中至少有一封未读邮件,代码就不会通知您有关新邮件的信息。
光的问题确实与硬件有关,因为我在家里做了相同的设置并且工作正常。我对代码做了一些小改动:
import RPi.GPIO as GPIO, feedparser, time, sys
USERNAME = "my-username"
PASSWORD = "my-password"
NEWMAIL_OFFSET = 0 # empty inbox
MAIL_CHECK_FREQ = 60 # check mail every 60 seconds
GPIO.setmode(GPIO.BCM)
GREEN_LED = 18
RED_LED = 23
GPIO.setup(GREEN_LED, GPIO.OUT)
GPIO.setup(RED_LED, GPIO.OUT)
while True:
try:
newmails = int(feedparser.parse("https://" + USERNAME + ":" + PASSWORD +"@mail.google.com/gmail/feed/atom")["feed"]["fullcount"])
print "You have ", newmails, " unread emails!"
if newmails > NEWMAIL_OFFSET:
GPIO.output(GREEN_LED, True)
GPIO.output(RED_LED, False)
else:
GPIO.output(GREEN_LED, False)
GPIO.output(RED_LED, True)
time.sleep(MAIL_CHECK_FREQ)
except KeyboardInterrupt:
#Ctrl + C
#Ensure you are cleaning up the GPIO setup or it might not work correctly after the first run
GPIO.cleanup()
break
except:
#Here you can capture possible unknown issues with the code
print("There following error happened: " + str(sys.exc_info()[1]))
finally:
pass