緊急時の連絡手段は多くの場合、
携帯電話を使うかと思います。
しかし年齢や身体的障害などによって、
携帯を利用していない方はいます。
もし緊急連絡手段を持たない人が外出する際、
誰かが同行すると思いますので
緊急事態に対応可能です。
一方で家にそういった方が一人しかいない状況で、
万が一のことがあったらどうでしょうか。
ということで今回は、
緊急時の連絡手段として、
緊急ボタンを作りました。
仕様は簡単で、
ボタンを押したらGmailに
通知が来るというものです。
ソースも単純なので簡単に作れます。
まず作成に使った道具はこちらです。

- Raspberry Pi 3 ModelB
- ゲームスイッチ(モーメンタリ型の1回路2接点)
- 抵抗(1kΩ)×2
- ジャンパー(オス-メス)×3
Raspberry Pi 3を使いましたが、
Raspberry Pi Zeroの方が、
消費電力が低く、モバイルバッテリーで
動かしても長持ちするので、
Zeroがある方は、そちらの方が良いかと思います。
私は持ち合わせておりませんでしたので、
ラズパイ3で代用しました。
緊急ボタンということで、
出来るだけ大きいボタンを選びました。
秋月電子で買える一番大きいのを選んだら、
画像のようなスイッチになりました。
お値段は150円ほどでした。
それからこのスイッチの定格電流が3Aなので、
壊れるのを防ぐために電流抑制抵抗を挟みます。
1kΩ使いましたが、もっと低い抵抗値でも大丈夫です。
秋月電子・ゲームスイッチ
http://akizukidenshi.com/catalog/g/gP-07248/
Rapberry Piとスイッチの接続は、
3.3Vピン, GND, GPIO18の3ピンを使いました。
ピンの確認方法はRapberry Piのターミナル上で
pinout もしくは gpio readallと叩いてください。


回路はこのように組んでいます。
スイッチ&抵抗とスイッチ&ジャンパー線の接続は、
ハンダ付けが望ましいですが、
実験程度であれば、絶縁テープで
ぐるぐる巻きにしても良いかと思います。
秋月で買ったゲームスイッチの場合だと、
下にでっぱている端子(COM)を3.3Vにつなげます。
モーメンタリ型1回路2接点スイッチなので、
ボタンを押したときだけ、
GPIO18ピンと繋がります。
ボタンを押してないときは、
3.3VとGND間がつながっています。

ソースは以下になっています。
言語はpythonを使っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
import RPi.GPIO as GPIO import time import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from_mail = '12345678@gmail.com' my_password = '********' to_mail = '876543210@gmail.com' body = "Hello World!" def create_mail(): msg = MIMEMultipart() msg['From'] = from_mail msg['To'] = to_mail msg['Subject'] = 'Home Alert' msg.attach(MIMEText(body, 'plain')) return msg def send_mail(msg): try: server = smtplib.SMTP('smtp.gmail.com', 587) server .ehlo() server.starttls() server.ehlo() server.login(from_mail, my_password) server.sendmail(from_mail, to_mail, msg.as_string()) server.quit() except SMTPException as error: print("[-]Error send_mail") msg = create_mail() print("[+]Mail Created") GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.IN) try: while True: time.sleep(0.5) if GPIO.input(18) == GPIO.HIGH: print("[+]Button Pushed...") send_mail(msg) print("[+]Mail Sent") except KeyboardInterrupt: GPIO.cleanup() |
実行の流れとしては、
最初にメールを組み立ててます。
それからwhileで無限ループしている間に、
緊急ボタンが押されたときだけ、
あらかじめ作っておいたメールを送信します。
一応、MIMEも使っているので、
画像の添付なども可能です。
webカメラ等で押されたときの状況を、
キャプチャしてメール本体に添付する
といったこともありかと思います。
変更しやすいように、コード初めに
アドレスやメール内容を指定します。
create_mail関数でメールを組み立てます。
出来上がったメールを
戻り値としてmsgを返します。
send_mail関数で、
googleのSMTPサーバにログインして、
実際に送信します。
メールの仕組みを勉強すると分かるのですが、
25番ポートを使用するとOP25Bによって、
所属ドメインを抜けることが出来ません。
つまり送信できないということです。
そこで、SMTPのサブミッションポートである587番ポートを使います。
実際にGmailを送信してみる
それでは届いたメールを
実際に見てみましょう。
こんな感じで通知が届きます。

チャタリング制御をしていので、
一度だけ押したつもりでも、
たまに2,3通届くことがあります。
ちなみに今回のように、
自作プログラムでgmailを送信する場合は、
デフォルト設定ではログインできません。
セキュリティ規制を緩める必要があります。
送信側のアカウントに入って、
Gmailの設定を一か所だけ変更します。
https://myaccount.google.com/security?pli=1

アカウント設定からセキュリティ設定に移動し、
「安全性の低いアプリのアクセス」を
"オン" に変更します。
デフォルトでは、"オフ" になっています。
これで上手く送信できると思います!
最後まで読んでいただきありがとうございました。