Raspberry Pi电子邮件通知程序中出现意外结果

时间:2014-09-22 03:40:41

标签: python linux raspberry-pi

刚刚买了一个覆盆子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)
!

这是我的设置......

enter image description here

enter image description here

2 个答案:

答案 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