heyheytower

日々のメモです。誰かのお役に立てれば幸いです。

Internet of Aquarium : ESP-WROOM-02 と ThingSpeak を利用して

Aquarino(旧ケース)
Pic.0 Aquarino外観 (新しいケースのバージョンもあります。写真はこちらから)

目次

目的

アクアリウムを始めたので、表題の方法で適正水温監視を行う。

2016_aquarium_01

監視方法

  1. Arduino で水温(温度)測定
  2. ThingSpeak*1 に水温データを送信しアーカイブ・グラフ化
  3. 水温監視を ThingSpeak のアプリ "React"*2 で実行
  4. 適正温度を外れた場合は Twitter へツイート
  5. 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 を含む回路図です。

Aquarino 回路図
Pic.1 回路図

ユニバーサル基板でのパーツ配置を自動でできないかと思い、途中まで検討してみました。

Aquarino パターン図の検討
Pic.2 パターン図の検討

しかしながら回路も小規模でユニバーサル基板利用なので、結局自分で考えた方が早そうということで配置を検討したメモが下記です。

Aquarino ユニバーサル基板実装案
Pic.3 ユニバーサル基板実装案

ハードウェア作成

Pic.3 のメモを参考に実際に実装した基板が下記です。(裏側は試行錯誤があったためクオリティが酷いですが…)

Aquarino ユニバーサル基板実装(表)
Pic.4 ユニバーサル基板実装(表)

Aquarino ユニバーサル基板実装(裏)
Pic.5 ユニバーサル基板実装(裏)

動作確認

Movie.1 "Aquarino" の動作(字幕に動作説明あり)

ThingSpeak に水温データを送信しアーカイブ・グラフ化

グラフ設定として、Y軸の最小・最大値を設定しました。

Graph.1 水槽の温度監視

水温監視を ThingSpeak のアプリ "React" で実行 & 適正温度を外れた場合は Twitter へツイート

適正水温の監視は、Arduino 側で行うのではなく、ThingSpeak のアプリ "react" が目的に合っていそうだったのでこちらを利用しました。

別解として "ThingTweet"*13 を利用する方法も考えたのですが、適性水温の変更やツイート内容を変更するためには "Arduino" のコードを編集した後に再書き込みが必要であり、これが面倒だと考えて採用を見送りました。

ThingSpeak からのツイートを IFTTT で監視し警告メールを送信

IFTTT で監視を行い、自分の Twitter アカウントでハッシュタグ "#thingspeak" が付加されてツイートされたら、指定アドレスへ警告メールを送信する設定を行いました。

IFTTT Recipe: If new tweet by target user with hashtag #thingspeak, then send an email from my gmail address connects twitter to gmail

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追記)

ケースを上から見た写真
Pic.6 Aquarino外観(新ケース)

ケースを横から見た写真
Pic.7 Aquarino外観(新ケース)

エステーさんの冷蔵庫の脱臭炭のケースがちょうど良いサイズだったので、ケースを工作のうえケーブルも収まるように新たに細工しました。旧ケースよりもスリムで良いですね。

所感

タイトルからすると竜頭蛇尾な内容かもですが、自分としてはボリュームのあるプロジェクトで、初めの構想から1ヶ月半が経とうとしています。

EAGLE も勉強することができましたし、ESP-WROOM-02 の扱いにも慣れてきました。また YouTube で動画に字幕をいれられることが分かったり、ThingSpeak 利用も IFTTT のレシピ公開なども初めてでした。

センサのハードウェア・ソフトウェアの構想・実装、加えてWEBサービスマッシュアップまで、"IoT" の要素技術を一通り学ぶことができた実り多いプロジェクトでした。
しかしながらこれで終わりではなく、これからは運用・改修・機能追加など持続して取り組んでいきたいと思います。

以上