ここでは、赤外線人感センサを試してみます。感知情報をメールやLINEで通知する方法も紹介いたします。
次のプログラム(sr510.py)で動作確認します。この時に遅延時間の設定や感度の設定も調整します。
from datetime import datetime import time import RPi.GPIO as GPIO GPIO_PIN = 12 GPIO.setmode(GPIO.BCM) GPIO.setup(GPIO_PIN, GPIO.IN) if __name__ == '__main__': try: print ("処理キャンセル:CTRL+C") cnt = 1 while True: # センサー感知 if(GPIO.input(GPIO_PIN) == GPIO.HIGH): print(datetime.now().strftime('%Y/%m/%d %H:%M:%S') + str(" 感知、回数({:d})").format(cnt)) cnt = cnt + 1 else: print(datetime.now().strftime('%Y/%m/%d %H:%M:%S') + " なし") time.sleep(3) except KeyboardInterrupt: print("終了処理中...") finally: GPIO.cleanup() print("GPIO clean完了")
import smtplib from email.utils import formatdate from email.mime.text import MIMEText def sendmail(msgtext): # Gmailアカウント設定 send = smtplib.SMTP("smtp.abcd.jp", 587) # 送信メールサーバーアドレスとポート番号を指定する send.ehlo() send.starttls() send.ehlo() send.login("raspberry@pi.com","pasxxxx") # ログインメールアドレスとパスワードを指定する # 送信メール情報 # メールメッセージを作成 body = msgtext # 本文 msg = MIMEText(body, "plain", "utf-8") msg["From"] = "raspberry@pi.com" # 送信元メールアドレス msg["To"] = "efgh@docomo.ne.jp" # 送信先メールアドレス msg["Date"] = formatdate() # 日付の設定 msg["Subject"] = "Raspberyy Pi メッセージ" # 件名 # メール送信 send.send_message(msg) # メールを送信 send.close() print("メール送信完了") # 完了メッセージ表示 if __name__ == "__main__": sendmail("テストメッセージ")
下記の仕様で作成しました。利用状況に応じて変更して、お試しください。
感知通知プログラム(sensor510.py)は下記の通りです。
from datetime import datetime import time import sendmailm import RPi.GPIO as GPIO GPIO_PIN = 12 GPIO.setmode(GPIO.BCM) GPIO.setup(GPIO_PIN, GPIO.IN) if __name__ == '__main__': interval = 60 offtime = 300 status = "standby" print(datetime.now().strftime('%Y/%m/%d %H:%M:%S') + " 監視開始") try: print ("処理キャンセル:CTRL+C") cnt = 1 while True: # センサー感知 if(GPIO.input(GPIO_PIN) == GPIO.HIGH): if ( status == "standby" ) : tmp = (datetime.now().strftime('%Y/%m/%d %H:%M:%S') + str(" 感知中、回数({:d})").format(cnt)) print(tmp) sendmailm.sendmail(tmp) status = "active" cnt = cnt + 1 onSS = time.time() time.sleep(interval) else: if ( (onSS + offtime ) < time.time() and status == "active" ) : # 休止? tmp = (datetime.now().strftime('%Y/%m/%d %H:%M:%S') + " 待機") print(tmp) sendmailm.sendmail(tmp) status = "standby" offSS = time.time() time.sleep(interval) except KeyboardInterrupt: print("終了処理中...") finally: GPIO.cleanup() print("GPIO clean完了")
line2
「Webサービスからの通知をLINEで受信」のWebサイト(https://notify-bot.line.me/ja/)より、LINE Notifyのトークンを取得します。
サンプルプログラムは下記の通りです。requestsライブラリ(PythonのHTTP通信ライブラリ)なしの場合は
「pip install requests」コマンドでrequestsをpipからインストールします。
通知プログラム(linem.py)は下記の通りです。linemをimportしてお使いください。
#!/usr/bin/env python # -*- coding: utf-8 -*- import requests def sendline(msgtext): url = "https://notify-api.line.me/api/notify" token = "-------発行されたトークン-------" headers = {"Authorization" : "Bearer "+ token} message = msgtext payload = {"message" : message} r = requests.post(url, headers = headers, params=payload) print("LINE 送信完了") # 完了メッセージ表示 if __name__ == "__main__": sendline("テストメッセージ")