準備
コンパイル
気温、湿度、気圧を計測することができるセンサチップBME280です。周辺回路も実装したモジュール基板が多数販売されていますので、それを用意してください。
このモジュールは SDA, SCLのプルアップ抵抗が実装されているようです。
BME280に似たチップにBMP280があります。 こちらは気圧+気温センサチップで湿度は測れません。 BME280は真四角、BMP280は長方形です。
いきなり壊れて、ぐずり出すことがありますので、複数個のまとめ買いをおすすめします!
ESP32(開発ボード) あるいは M5Stack が必要です。
ESP32、ESP32-WROOM-32、ESP32開発ボード、M5Stackと色々と言葉がでてきますが、次のような関係です。
ESP32 \( \subset \) ESP32-WROOM-32 \(\subset\) ESP32開発ボード
あるいは
ESP32 \( \subset \) ESP32-WROOM-32 \(\subset\) M5Stack
あるいは
ESP32 \( \subset \) ESP32-WROOM-32 \(\subset\) ESP32開発ボード \( \subset \) M5Stack
また、ESP32-WROOM-32には次の3種類があるそうです。
色々なところから様々な開発ボードが販売されていますが、私が動作確認したのは下記の2製品です。
ESP32を内蔵したESP32-WROOM-32をさらに基板上に実装しているESP32 DevKitCです。 Wi-Fiを内蔵しています。 これは安定して動作しました。
スイッチサイエンスのESPr Developer 32は足が生えていないので別途足(10 x 2)が必要です。
下記の製品はさらに格安です(1個 840円也)。こちらはArduino IDEでボードとしてNodeMCU-32Sを選択してください。ESP32 Dev Moduleを選ぶと実行時にエラーを吐きます(吐くときもあります。挙動がよく分かりません...)開発基板上のLEDはGPIO 2で制御できます。
購入直後は、なにをどうやってもプログラムコードの書き込みがうまくいかず、しばらく放置していましたが、ある日突然、これまでがうそのようにちゃんと動くようになりました。 なにが悪かったのか、未だに??のままです。
あやしげなESP32開発ボードの場合、三端子レギュレターがESP32側(の下)にある製品の方が安定するようです。 USB端子側に三端子レギュレターがあるものは、なんとなく不安....(個人的観測と体験によるものです)
オールインワンのESP32です。(モニター、バッテリー、スピーカー装備)
ESP32の開発ボードは幅があるので通常のブレットボードでは、開発ボードは刺さりますが、周辺回路の実装ができません。 そこでちょっとだけ幅が広いサンハヤトのSAD-101がお勧めです。
周辺部品はたいした数ではありませんので、手持ちのユニバーサル基板でも十分に間に合うと思います。
開発ボードの場合は、LEDを加えると、Busy / Idle 状態や気象情報を表すことができます。なくても、かまいません。 Busy / Idle状態は、基本的に5分に1回、一瞬光るだけです(超地味)。 気象情報を表すLEDは、一定間隔でモールスで気温、湿度、気圧をお知らせします。
3.3Vで駆動できる圧電ブザーなどを用いれば、音でモールスができると思います(私の方では試していませんし、たぶん、うるさいだけだと思います)。
M5Stackの場合は、LCD画面上に状態を表示しますのでLEDは不要です。
ESP32は突入電流が大きいらしいので、それなりに大電流が流せるUSB電源が必要です(最近のUSB電源であれば大丈夫だと思います)。 電圧降下が起こらない程度の容量が必要です。 ただし、M5Stackの場合は、さらに大電流を要します。足りない場合、途中でリブートを繰り返します。
2.4GHzのアクセスポイントが必要です。 ESP32はWiFiの掴みが弱いので、Wi-Fi APの設置条件は重要です。
ESP32開発ボードの場合は、Idle状態で50mA程度、WiFi送信時で85mA程度。
M5STACKM5Stackの場合、Idle状態で300mA程度、WiFi送信時で350mA程度必要です。
ちまたの情報ではいずれも突入電流が大きいらしいので、ある程度余裕をみたUSB電源が必要です。
スケッチの設定によりESP32のdeepsleepモードを利用できるようになっています。 5分おきにに数秒だけ数十mAの電流が流れるだけで、待機時(deep sleep時)は数\( \mu \)Aしか流れません。 よって、計算上は長期間のバッテリー駆動が可能です。 ただし、USBポータブル電源の場合、deep sleep時に流れる電流が小さすぎて、USBポータブル電源自体が自動的に電源OFFになってしまいdeep sleep自体から復帰しなくなります(生命維持装置が外されてしまった状態になる)。 したがって、勝手にOFFにならないタイプのポータブル電源を探すか、乾電池駆動を行うことになります。
空いているGPIOを使って電源電圧を監視し、バッテリーが怪しくなったらメールで通知なんてことも簡単にできるはずです(今回は未実装)。
現在の機能の範囲であれば、deep sleepモードではなく、さらに待機時の電流が少ないhibernationモードでも大丈夫なはず。