Internet of Aquarium : ESP-WROOM-02 と ThingSpeak を利用して
目次
目的
アクアリウムを始めたので、表題の方法で適正水温監視を行う。
監視方法
- Arduino で水温(温度)測定
- ThingSpeak*1 に水温データを送信しアーカイブ・グラフ化
- 水温監視を ThingSpeak のアプリ "React"*2 で実行
- 適正温度を外れた場合は Twitter へツイート
- ThingSpeak からのツイートを IFTTT*3 で監視し警告メールを送信
作成
Arduino で水温(温度)測定
まず母体として、"ESP-WROOM-02" を "無線付Arduino" として使いました。回路図・ソースコードはまとめて後述しています。
また、本エントリで作成したものについては "Aquarino" と名付けましたので、以後そのように記載します。
温度センサ
手元に MCP9700*4 がありましたので、下記を参考に利用しました。
Arduinoで遊ぼう -温度センサIC、MCP9700を使って温度を測る - なんでも作っちゃう、かも。
注意としては、5V電源とGNDを繋ぎ間違えると一発で壊れてしますので、ご用心を。(壊れてからは、TOUT の許可されている電圧上限 1V の値を受け取っていたので、TOUT に負荷がかかっていたかもしれません^^; 自分は2つダメにしてしまいました…)
温度・通信状態表示のため LCD
こちらも手元に "LCDキャラクタディスプレイモジュール(16×2行バックライト無)"*5 がありましたので、下記を参考に利用しました。
【Arduino】SC1602B(16桁LCDディスプレイ)を使ってみる。 : Blazing Azuki's Blog
また、LCD のために GPIO2 をデジタル出力として利用しました。( GPIO0,2,15 をデジタル出力として使う場合は、実行モードを妨げないようにしないといけません。*6 )
省電力のための "Deep-Sleepモード" 利用
下記がとても参考になりました。
ESP8266の真骨頂Deep-Sleepモードの使い方 - Qiita
今回の場合ですと ESP-WROOM-02 が待機状態でも LCD は通電したままですので、LCD の最後に表示した状態が持続します。
ThingSpeak への接続に HTTPS を利用
"WiFiClientSecure class" を利用して対応し、証明書(フィンガープリント)確認なども行うようにしました。
GETリクエストは https://api.thingspeak.com/update?api_key=XXXXXXXXXX&field2=20
という感じです。
デバッグ用のシリアルモニタへの出力
リリースバージョンではコメントアウトしてますが、参考に載せておきます。
Connecting to XXXXmask-networkXXXX ....... WiFi connected IP address : 192.168.1.123 Connecting HOST : api.thingspeak.com TOUT from MCP9700 : 796 mV (count 0) TOUT from MCP9700 : 778 mV (count 1) TOUT from MCP9700 : 779 mV (count 2) TOUT from MCP9700 : 779 mV (count 3) TOUT from MCP9700 : 780 mV (count 4) TOUT Average : 782.40 mV ( 24.84 degress C) Requesting URL : /update?api_key=XXXXXXXXXXXXXXX&field1=24.84 closing connection.
ソースコード
下記で公開しております。
ハードウェア作成のための準備
EAGLE*7 で回路図を作成し、パーツ郡は下記を利用しました。
始めての EAGLE 利用なので間違った使い方などあるかと思いますが、下記が本エントリで作成した ESP-WROOM-02 を含む回路図です。
Pic.1 回路図
ユニバーサル基板でのパーツ配置を自動でできないかと思い、途中まで検討してみました。
Pic.2 パターン図の検討
しかしながら回路も小規模でユニバーサル基板利用なので、結局自分で考えた方が早そうということで配置を検討したメモが下記です。
Pic.3 ユニバーサル基板実装案
ハードウェア作成
Pic.3 のメモを参考に実際に実装した基板が下記です。(裏側は試行錯誤があったためクオリティが酷いですが…)
Pic.4 ユニバーサル基板実装(表)
Pic.5 ユニバーサル基板実装(裏)
動作確認
Movie.1 "Aquarino" の動作(字幕に動作説明あり)
ThingSpeak に水温データを送信しアーカイブ・グラフ化
グラフ設定として、Y軸の最小・最大値を設定しました。
Graph.1 水槽の温度監視
水温監視を ThingSpeak のアプリ "React" で実行 & 適正温度を外れた場合は Twitter へツイート
適正水温の監視は、Arduino 側で行うのではなく、ThingSpeak のアプリ "react" が目的に合っていそうだったのでこちらを利用しました。
別解として "ThingTweet"*13 を利用する方法も考えたのですが、適性水温の変更やツイート内容を変更するためには "Arduino" のコードを編集した後に再書き込みが必要であり、これが面倒だと考えて採用を見送りました。
ThingSpeak からのツイートを IFTTT で監視し警告メールを送信
IFTTT で監視を行い、自分の Twitter アカウントでハッシュタグ "#thingspeak" が付加されてツイートされたら、指定アドレスへ警告メールを送信する設定を行いました。
TODO
水温低下時は別途ヒーターの設備があるのですが、水温上昇時に対処する設備がありません。
"Aquarino" ではシリアル通信のための RX・DX が空いているので、それで "水槽用冷却ファン" を制御しようと考えています。
付録
秋月さんで販売している "ESP-WROOM-02"*14 の "EAGLEライブラリ"
"ikesato" さんの "ESP-WROOM-02" の "EAGLEライブラリ"*15 を基に、見出しのパーツを作成しました。
下記にパーツイメージ画像と共に公開してますので、ご確認のうえご利用いただけましたらと。
制作費用
table.1 "Aquarino" 制作費用(はんだ等の消耗品は除く)
製品 | 単価 | 数 | 値段 |
---|---|---|---|
ESP-WROOM-02(DIP、秋月電子通商) | 650 | 1 | 650 |
LCDキャラクタディスプレイモジュール(16×2行バックライト無) | 500 | 1 | 500 |
温度センサーIC MCP9700 | 38 | 1 | 38 |
片面ユニバーサル基板(D) | 30 | 1 | 30 |
低損失三端子レギュレータ TA48M033F(SQ) | 100 | 1 | 100 |
カーボン抵抗1/4W 10kΩ | 1 | 3 | 3 |
カーボン抵抗1/4W 20kΩ | 1 | 1 | 1 |
半固定ボリューム(20kΩ) | 40 | 1 | 40 |
DCジャック(DIP) | 100 | 1 | 100 |
ブレッドボード・ジャンパーコード(オス-メス)(10本入) | 220 | 1 | 220 |
電線50cm | 20 | 2 | 40 |
ACアダプター5V2A GF12-US0520 | 650 | 1 | 650 |
ABS樹脂ケース(蝶番式・中) 112-TS | 120 | 1 | 120 |
絶縁ラジアルリード型積層セラミックコンデンサ 0.1μ | 10 | 1 | 10 |
丸ピンICソケット | 3 | 11 | 33 |
丸ピンIC連結ソケット | 5 | 3 | 15 |
合計 | - | - | 2550 |
ケースを入れ替えました(2017/1/17追記)
エステーさんの冷蔵庫の脱臭炭のケースがちょうど良いサイズだったので、ケースを工作のうえケーブルも収まるように新たに細工しました。旧ケースよりもスリムで良いですね。
所感
タイトルからすると竜頭蛇尾な内容かもですが、自分としてはボリュームのあるプロジェクトで、初めの構想から1ヶ月半が経とうとしています。
EAGLE も勉強することができましたし、ESP-WROOM-02 の扱いにも慣れてきました。また YouTube で動画に字幕をいれられることが分かったり、ThingSpeak 利用も IFTTT のレシピ公開なども初めてでした。
センサのハードウェア・ソフトウェアの構想・実装、加えてWEBサービスのマッシュアップまで、"IoT" の要素技術を一通り学ぶことができた実り多いプロジェクトでした。
しかしながらこれで終わりではなく、これからは運用・改修・機能追加など持続して取り組んでいきたいと思います。
以上
*2:https://thingspeak.com/apps
*4:http://akizukidenshi.com/catalog/g/gI-03286/
*5:http://akizukidenshi.com/catalog/g/gP-00040/
*6:http://deviceplus.jp/hobby/entry0032/
*8:http://lowreal.net/2013/11/02/2
*9:http://d.hatena.ne.jp/seinzumtode/20130531/1369988380
*10:http://threesons-technicalmemo.blogspot.jp/2014/03/eagle.html
*11:https://code.google.com/archive/p/phi-prompt-user-interface-library/downloads#makechanges
*12:https://github.com/maijou2501/EAGLE/tree/master/esp-wroom-02
*13:http://qiita.com/minori24/items/38c06d206ceae1330e0c