ここでは、赤外線人感センサを試してみます。感知情報をメールや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("テストメッセージ")