上一篇實做偵測到物體移動時拍照存檔,本篇要接續使用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



張貼留言