はじめに
以下のものを用意してください
赤外線センサー
ラズベリーパイとその関連品
コードできれば安いのを自分で探してください
接続
sensor | raspbery pi |
---|---|
VCC | 5V |
OUT | GPIO25:22 |
GND | GND:25 |
コマンド
pi@raspberrypi:~$ sudo su
root@raspberrypi:/home/pi#
GPIOで25ピンを使うので、GPIO25をユーザー空間にエクスポートする。
これをしないとGPIOにアクセスすることができない。
root@raspberrypi:/home/pi# echo 25 > /sys/class/gpio/export
echoコマンドで/sys/class/gpioディレクトリにあるexportファイルへ書き込むと/sys/class/gpio/gpio25という新しいディレクトリが作成され、GPIOをコントロールするために必要な仮想ファイルが用意される。
今回はセンサーからの入力を判定するので、directionファイルにinを設定する。
root@raspberrypi:/home/pi# cd /sys/class/gpio/gpio25
root@raspberrypi:/sys/class/gpio/gpio25# echo in > direction
これで、センサーに反応があるとvalueファイルに1、反応がなくなると0が書き込まれる。
センサーを反応させて下記コマンドを実施すると、valueに1が書き込まれ動作確認ができる。
root@raspberrypi:/sys/class/gpio/gpio25# cat value
1
スクリプト作成
今回作るものは
・赤外線センサが反応したらメールを送る
sudo nano sensor_push.py
sensor_push.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import time
import RPi.GPIO as GPIO
import os.path
import datetime
import smtplib
from email import Encoders
from email.Utils import formatdate
from email.MIMEBase import MIMEBase
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
INTAVAL = 3
SLEEPTIME = 5
SENSOR_PIN = 25
#Gmailアカウント
ADDRESS = "Gmailのアドレス"
PASSWARD = "Gmailのパスワード"
GPIO.cleanup()
GPIO.setmode(GPIO.BCM)
GPIO.setup(SENSOR_PIN, GPIO.IN)
st = time.time()-INTAVAL
while True:
print GPIO.input(SENSOR_PIN)
if(GPIO.input(SENSOR_PIN) == GPIO.HIGH) and (st + INTAVAL < time.time()):
st = time.time()
print("人を感知しました")
def create_message(from_addr, to_addr, subject, body, mime=None, attach_file=None):
msg = MIMEMultipart()
msg["From"] = from_addr
msg["To"] = to_addr
msg["Date"] = formatdate()
msg["Subject"] = subject
body = MIMEText(body)
msg.attach(body)
# 添付ファイル
if mime != None and attach_file != None:
attachment = MIMEBase(mime['type'],mime['subtype'])
file = open(attach_file['path'])
attachment.set_payload(file.read())
file.close()
Encoders.encode_base64(attachment)
msg.attach(attachment)
attachment.add_header("Content-Disposition","attachment", filename=attach_file['name'])
return msg
def send(from_addr, to_addrs, msg):
smtpobj = smtplib.SMTP(SMTP, PORT)
smtpobj.ehlo()
smtpobj.starttls()
smtpobj.ehlo()
smtpobj.login(ADDRESS, PASSWARD)
smtpobj.sendmail(from_addr, to_addrs, msg.as_string())
smtpobj.close()
if __name__ == '__main__':
#宛先アドレス
to_addr = "宛先アドレス"
#件名と本文
subject = "Thieves!Fire!Murder!"
body = "本文"
#添付ファイル設定(text.txtファイルを添付)
mime={'type':'text', 'subtype':'comma-separated-values'}
attach_file={'name':'test.txt', 'path':'./text.txt'}
#メッセージの作成(添付ファイルあり)
#msg = create_message(ADDRESS, to_addr, subject, body, mime, attach_file)
#メッセージ作成(添付ファイルなし)
msg = create_message(ADDRESS, to_addr, subject, body)
#送信
send(ADDRESS, [to_addr], msg)
time.sleep(SLEEPTIME)
後は
sudo python sensor_push.py
でメールが送られてきます(赤外線センサーが反応すれば)
~ちなみに~
件名は"Thieves!Fire!Murder!"です
追記
動作確認ができたので、もし自動実行できるようにしたいのなら
pi@raspberrypi:~$ crontab -e
#
#
@reboot python sensor_push.py
!!注意!!
"@reboot python sensor_push.py"の前に#
をつけない(="#@reboot python sensor_push.py"と書くな!)