TUT / ESP8266 Advent Calendar 2015 19日目の記事です。
自己紹介はこちらから。
すべては
「郵便受けに何かが入ったらスマフォにプッシュ通知してくれるシステムがほしい」
というツイートから始まりました。(諸事情によりアカウント非公開)
ESP-WROOM-02が手に入ったことで、普段ネットに繋がっていないものを繋げられる機会を得ました。また、ここから新たな可能性が見えてきました。
ある日、自分の郵便受けに封筒が入っているのを見て、上記のツイートのようなことを思いつきました。
郵便受けに郵便物などが入ると投入口のふたが動くので、その動きを距離センサなどで検出すれば、MCU(マイコン)は投函されたことを知ることができます。投函されるたびに、無線LAN経由でWebサービスに接続しリクエストを送れば、スマートフォンにプッシュ通知を送ることができるはずです。
そこで、「自分の郵便受けに何かが入ったら知らせるシステム」を作ってみました。
動作イメージはこんな感じです。
このシステムには、以下の電子部品を使います。投入口の動きの検出には測距モジュールを使うことにしました。
- WiFiモジュール ESP-WROOM-02
- 測距モジュール GP2Y0E03
- マイクロコントローラ ATmega328P
- リチウムイオンバッテリー
- 電源IC(LDOレギュレータ) LT1963AES8-3.3
- その他
Webサービス探し
HTTPでリクエストを送信するとAndroid端末にプッシュ通知を送るWebサービスを探してみます。
Playストアで適当に検索したところ、以下のサービス(アプリ)が見つかりました。
かんたんプッシュ通知 -NotifyDroid-
https://xdroid.net/help/nd/
NotifyDroidは GCM(Google Cloud Messaging)を利用したシンプルな通知アプリです
web APIを利用して簡単に通知することが可能です.もちろん端末からの通知も可能です
ユーザ(googleアカウント)に紐づけた端末に同時に通知することが可能です
と書かれているので、簡単にプッシュ通知ができそうです。さっそくアプリをインストールし、登録してみました。
試しに手持ちのRaspberry PiでAPIサンプルにあるコマンドを実行してみます。(curlが使えるため)
手持ちのスマフォにプッシュ通知が来ました。
今度はHTTPで実行してみます。
HTTPSの方に飛ばされてしまうようで、スマフォにもプッシュ通知は来ませんでした。HTTPSが必須なようです。Webブラウザで上記URLにアクセスしても自動的にhttpsに置き換えられていました。
ESP-WROOM-02ではSSL通信もできるようなので、下記サイトを参考に試してみました。
ESP-WROOM-02で、IFTTTをhttps(SSL/TLS)で呼び出す例 – Qiita
http://qiita.com/ban4jp/items/a4da9f91d381642480c5
プログラムをNotifyDroidに合うように書き換え、実行してみましたが、
Serial.println(espconn_secure_connect(&esp));
の直後でどういうわけかダンプを出力してリセットしてしまいます。その上にある
espconn_secure_set_size(ESPCONN_CLIENT, 5120);
でバッファサイズを変更してみましたが、プログラムは一向に進まず。
というわけでSSLを使うのは諦め、通常のHTTPで通信できるWebサービスがないか探しました。
IFTTTのMaker Channelというサービスが使えそうです。
IFTTTにMaker Channelができました | スイッチサイエンス マガジン
http://mag.switch-science.com/2015/06/25/ifttt-maker-channel/
ESP-WROOM-02を直接プログラムしてIFTTTにイベントをポストする: Todotaniのはやり物Log
http://todotani.cocolog-nifty.com/blog/2015/09/esp-wroom-02ift.html
プログラムを見るとHTTPでも問題なく使えることがわかります。これからはこれを参考に作っていきます。
レシピを作成します。
Trigger ChannelはMakerとします。Triggerは1つ(Receive a web request)しかないのでこれを選択します。
Action ChanneはIF Notificationとします。Actionも選択肢は1つしかありません。
通知の内容を設定します。その後、Create Recipeをクリックして完成です。
Raspberry Piで試したところ、HTTPS、HTTPの両方で利用できることがわかります。
上記で紹介したサイトのプログラムを参考にESP-WROOM-02で動作させたところ、正常にプッシュ通知を行えました。
ハードウェアについて
ソフト的な部分はもう半分程度できた感じがします。
システムの性質上、回路を郵便受けの中に入れて動作させる必要があります。そのため回路はバッテリー駆動のほうが良さそうです。
ケースには主にマイコン、測距モジュール、リチウムイオンバッテリー、WiFiモジュール、回路基板が入ることになります。
バッテリー駆動のため消費電力は出来る限り抑えないといけません。そこで、ESP-WROOM-02ではIFTTTにリクエストを送るとき以外はディープスリープモードにしておき、消費電力が低いマイコンに測距モジュールの処理を行わせます。また、マイコンも動作周波数を低く設定し、スリープとタイマー割り込みを使い連続ではなく間欠的に動作させることで、さらに消費電力を削減することを目指します。
マイコンは一定時間ごとに測距モジュールのアナログ出力をA/D変換し、値の変化(投入口のふたの動き)を監視します。動きを検出した場合はESP-WROOM-02をリセットします。(あるI/OピンをESP-WROOM-02のリセット入力につないでおく。)
ESP-WROOM-02はリセットがかかると無線LANに接続しIFTTTにリクエストを送り、切断した後にディープスリープモードに入るようにプログラムします。
これで自分の郵便受けに何かが入ったらスマフォに通知が来るはずです。
多忙のため実機の組み立てができていないので、とりあえず試作段階まで公開します。
実機の画像とプログラムは後日掲載します。
明日はemaxserさんの「133.15.0.0/16 192.50.40.0/24 192.50.41.0/24 2001:02f8:003c::/48」です。
http://www.adventar.org/calendars/785
ESP8266 Advent Calendar 2015ではtd2skさんの「ESP8266で痩せる話」です。
http://qiita.com/advent-calendar/2015/esp8266