上一篇實做偵測到物體移動時拍照存檔,本篇要接續使用HC-SR501的功能,當偵測到移動物體時,先拍照存檔,再透過郵件方式,將照片寄到Gmail信箱。以下就來看一下程式如何撰寫。
Google 一下造成錯誤的原因,是因為 Google 的帳戶設定較高的安全性應用程式存取權,需要使用較低的安全性設定,才可以使用程式的語法連接寄信。修改的方式是到 這裡 開啟以下網頁,設定為低安全性,就可以順利寄出照片。
[材料及接線方式]
請參考這篇文章: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秒鐘存檔後,就會寄出郵件。以下是收到郵件的內容。[參考資料]
- raspberrypi.org:Security System - PIR Motion, PiCamera, GMail
張貼留言