Raspberry Pi 筆記(73):HC-SR501偵測到移動物體後拍照發出電子郵件

上一篇實做偵測到物體移動時拍照存檔,本篇要接續使用HC-SR501的功能,當偵測到移動物體時,先拍照存檔,再透過郵件方式,將照片寄到Gmail信箱。以下就來看一下程式如何撰寫。

[材料及接線方式]

 請參考這篇文章:Raspberry Pi 筆記(71):HC-SR501偵測到移動物體拍照存檔

[程式一]

import RPi.GPIO as GPIO
import time
import smtplib
import email.encoders
import os
import email

from datetime import datetime
from picamera import PiCamera

# Importing modules for sending mail
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders

pir = 18
led_green = 23
camera = PiCamera()

GPIO.setmode(GPIO.BCM)
GPIO.setup(pir, GPIO.IN)

def send_an_email(fname):
    toaddr   = 'your_gmail@gmail.com'      # To id
    fromaddr = 'your_gmail@gmail.com'      # your id
    subject  = "Capture the picture"       # Subject

    msg = MIMEMultipart()
    msg['Subject'] = subject
    msg['From'] = fromaddr
    msg['To'] = toaddr
    msg.preamble = "test "
    #msg.attach(MIMEText(text))
    text = MIMEText("WARNING! Motion Detected!")
    msg.attach(text)

    part = MIMEBase("application", "octet-stream")
    part.set_payload(open(fname, "rb").read())

    email.encoders.encode_base64(part)
    part.add_header("Content-Disposition", "attachment; filename= %s" % os.path.basename(fname))
    msg.attach(part)
    server = smtplib.SMTP("smtp.gmail.com:587")
    server.starttls()
    server.login(fromaddr, "your_password")
    server.sendmail(fromaddr, toaddr, msg.as_string())
    print "Email sent!"
    server.quit()

while True:
    input_state = GPIO.input(pir)
    if input_state == True:
        print('Motion Detected')
        GPIO.setup(led_green, GPIO.OUT)
        now = datetime.now()
        ptime = now.strftime("%Y_%m_%d_%H%M%S")
       
        camera.capture('/home/pi/image_%s.jpg' % ptime)
        print('A photo has been taken')
        footage = "/home/pi/image_" + ptime + ".jpg"
        send_an_email(footage)
        time.sleep(10)
    else:
        GPIO.setup(led_green, GPIO.IN)
        camera.stop_preview()


[程式及執行說明]

上述程式中toaddr和fromaddr要改成執行者的Gmail帳號,server.login(fromaddr, "your_password")這一行your_password要改成登入者的密碼。執行程式時,出現以下 SMTPAuthenticationError 錯誤畫面。

Google 一下造成錯誤的原因,是因為 Google 的帳戶設定較高的安全性應用程式存取權,需要使用較低的安全性設定,才可以使用程式的語法連接寄信。修改的方式是到 這裡 開啟以下網頁,設定為低安全性,就可以順利寄出照片。

[結果]

只要一偵測到物體,會拍照,等待10秒鐘存檔後,就會寄出郵件。以下是收到郵件的內容。

[參考資料]



Post a Comment

較新的 較舊