トップ > 興味のあること > コンピュータ > ハードウェア > マイクロコンピュータ

ESP32

2019年4月29日

Wi-FiとBluetoothを備えたワンチップマイコン。 ArduinoのIDEを流用して、 ほぼ同じ感覚でプログラミングできる。 電源と無線LANを確保すれば、 単体でネットワークにつながるのがミソ。

秋月電子温湿度気圧センサと組み合わせて使ってみた。 BME280とESP32をI2Cで接続するという記事は結構あるが、 一番参考になったのはhttps://trac.switch-science.com/wiki/BME280である。 基本的な部分は丸パクリした。 センサのジャンパはすべて半田ブリッジして、 I2Cで通信するように設定した。 接続はセンサの4番ピンをESP32の21番ピン、 センサの6番ピンをESP32の22番ピンで、 Wireライブラリで読み書きする。 ちなみにGPIO34を電源端子につないで、 電圧も測っている。

データを読み出した後の計算は、 前述のページにあったプログラムそのままだ。 で、Wi-Fiにつないでambientに投げて、 グラフ化は丸投げする。 300秒Deep Sleepするのがちょっと工夫したくらいか。 これとて先人の努力の成果なのだが。

https://gist.github.com/tom-a/8f95230c25b903f54492387ffe499888

11行近辺のchannelID、writekey、ssid、 passwordは各人の環境にあわせて変更する必要がある。

2019年5月1日

何も考えず単三乾電池を2本直列にして、 3.3V端子とGND端子に接続。 一応動いているようだが、 どのくらい持つだろうか。

写真:ESP32とBME280

2019年5月12日

ストロベリー・リナックスのモジュールを使って、 太陽発電システムのモニタを試してみた。 太陽電池パネルからコントローラー、 コントローラーから鉛蓄電池までの配線に、 モジュールを割り込ませる。

写真:ESP32でINA226

ソフトウェアに関しては、 今回も先人の成果を拝借した。

https://gist.github.com/tom-a/dc6ed3a380a8f8158f8ca080974fee1d

書き換えたのは、

  1. モジュールを二つ使うので、セットアップや読み出しをアドレスで区別して行えるようにした。
  2. wordで読み込んだデータはintに代入してもunsignedのままなので、MSBが1だったら0x10000を引いて負数にした。I2Cでレジスタを読み出す関数はwordを返す。で、wordはunsigned shortなので、電流値を計算する式の中でshortにキャストした。
  3. 1分deep sleepする。
  4. ambientにデータを投げる。

くらいか。 とりあえず動くようになったので、 ResetReasonに応じた処理などリファクタリングしたいところ。

2019年5月14日

11:00を最後に、 BME280でモニタしているデータの送信が途絶えた。 電池は1.2V程度の電圧だったが、 Wi-Fiの起動には耐えられなかったのか? エネループに交換してみる。

2019年5月24日

09:10を最後に通信途絶。 意外と持たなかった。

2019年6月25日

18650で3500mAhなリチウムイオン電池で駆動していたが、 21:00頃通信途絶。 1ヶ月程度と今のところ最長記録。 ダイソーの500円モバイルバッテリーを試してみたが、 やはりすぐに電源供給が止まってしまう。 低消費電力というのも善し悪しである。 予備のリチウムイオン電池に交換して、 2.8Vになったリチウムイオン電池を充電。

2019年7月17日

前回と同じバッテリーで駆動したが、 今回は測定を5分おきではなく1分おきにしてみた。 すると、今日の08:22頃に通信が途絶。 22日ほどの稼働時間になるので、 1/5とは言わないがそれなりに短くなるのがわかった。

2019年8月2日

太陽光発電発電をモニタしているESP32を、 マキタの18V3Ahなバッテリーで駆動するようにしてみた。 こうしないと、 MacBook Pro + USBハブ + 外付けHD 全部を動かすためのACコンセントが足りないのだ。

2019年8月5日

母屋の気温測定器が、 11:16ごろ沈黙。 バッテリーが尽きていた。 充電後、20:42くらいに再起動。

2019年8月23日

太陽発電システムのモニタが電源断。 マキタのバッテーリも、意外ともたなかった。 前回は保存状態のまま使ったが、 今回はフル充電してから接続してみた。

2019年8月26日

母屋の気温測定器バッテリーを使い切ったので、 再充電後。

2022年1月13日

ここ最近、 BME280のデータがambientに記録できていなかったので、 プログラムを見直す。 久しぶりにGoogleで検索したら、 BME280を読み出すライブラリを作った人がいたので、 それを拝借。 bme280.cppとbme280.hを同じディレクトリにコピーすれば、 プログラム本体で使えるようになる。 バッテリーでの駆動ではなく、 USBポートからの給電に切り替えたので、 setupとloopへの按分を行い、 グローバル変数も減らした。 大気圧が800hPaよりも大きい時に記録しているのは、 電源投入直後のおかしなデータをはじくため。

ついでにInfluxDBにも記録して、 Grafanaでも見られるようにしてみた。

2022年1月17日

2022年1月15日にフンガ・トンガが噴火したが、 遡ってみたら自宅の環境モニタリングシステムにもしっかり記録されていた。 1分単位での記録を見る限り、 爆風ほど急激な変化ではなかったようだ。

グラフ:気圧変化