IoT Base基板をESP-WROOM-02(ESP8266)から、ESP-WROOM-32(以下、ESP32)を使ったものに更新した。
○ESP-WROOM-02の弱点
ESP-WROOM-02は強力だが弱点が無いわけではない。
- アナログ入力が1chしかない
- GPIO数が少な目
- RAMが少ない
Arduino機としては多いが、Azureを使おうとするとヒープメモリがあまり取れず、凝ったプログラムを作るとコケてしまう。
そこで注目するのは、当然ながら後継モジュールであるESP32である。
○ESP32で解消すること
前記の弱点はすべて解消する。むしろ少々持て余すくらいのスペックがある。ベース基板でA/D変換ICが不要になり、デザインを1種類にできるメリットは大きい。モジュールサイズは、RSP-WROOM-02より縦方向が若干長くなるが横幅は同じ。従来のIoT Base基板のサイズを変えずに、パターン・レイアウトだけの変更で済むのもありがたい。
ESP-WROOM-02では、コード中のリテラル文字を削るなど、前時代的な努力で、ヒープメモリーを捻出していたのだが、そんな必要も過去のことになる。
○ESP32への移行しなかった理由
モジュールのスペック的には文句無しなのだが、2016年9月に発売されたモジュールのため、ライブラリが未整備だったこともあり、昨年から、どのタイミングで移行するかを計っていた。
最大の関心は、自前のライブラリがESP-WROOM-02とESP-WROOM-32で共用が可能かどうかだ。ネット上だとESP-32の情報量はまだまだ少なく、少ない変更で共用が可能かどうかが判断できない。らちが明かないので、とりあえず、現状で、どこまでできるかを試していくことにした。
○ライブラリはなんとかメドがたった
提供されているライブラリ(IDFではなく、Arduino版)は...
- 大部分は、ESP-WROOM-02と同じクラスとメソッドがあり踏襲されている
- 一部のクラスのメソッドが削れれているが、サードパーティのものと置き換えて使えばなんとかなる。
ただし、自前で実装が必要なメソッドもあった。 - まったくないクラスもあるが、とりあえずサードパーティのもので間に合った。
○リブートに悩まされる
ESP-WROOM-32(ESP32-DevKitC ESP-WROOM-32開発ボード)でコンパイル・リンクは完了したものの、setup()前に、リブートを繰り返してしまい、プログラムが走らない。自前のライブラリを使わないプログラムは動くので、当然、自前のライブラリに問題があるのは分かったが、ESP-WROOM-02では問題ないものが、ESP32だとリブートしてしまう理由が、なかなかわからなかった。
結論としては、コンストラクタで、まずい書き方をしているとリブートすることがわかり、この洗い出しにかなり時間がかかった。逆に言えばESP-WROOM-02で問題なかったことの方が、解せなかった。
○"Brownout detector was triggered"で頭をかかえる
ESP-WROOM-32版の回路図を作成し、ブレッドボードでテストを行ってみた。ところが、Wi-Fiがからんだ処理をしようとすると"Brownout detector was triggered"でリブートしてしまう。
ネットの情報で、ESP32の鬼門は電源であり、特にWi-Fiは電気を食うのは事前に解っていたので、電源周りをいじれば解消すると思っていた。しかし、モジュールの交換、オシロでの電圧ドロップチェック、LDOレギュレータ、考えうることをすべてやってみたが解消しない。まぁ、最終的には解決したのだが、ESP32はESP8266とは異なり、いい加減な配線と電源だとダメなことが分かった。
○IoT Base(ESP32版)の仕様
A/D変換ICを削除し、かわりにEEPROMとLDOレギュレータを配置した基板を作成した。ESP32が黒基調なので基板も黒色にしてみた。フラッシュメモリーは、書き換え回数が気になるのでEEPROMを使うことにした。
このあたりのハード構成は、IoTシステム全体の仕様ともからんでくる。PCやスマホのような"全部入り"ハード構成で考えるわけにはいかない。Raspberry PiはPCに近いが、それでもすべて問題が解消するわけではない。
このESP32だと電源ONからWi-Fi接続を経てAzureに接続まで15秒程度で済むが、仮にPCをIoT機に使うとするとこうはいかない。スリープを使えば、復帰は早くなるが、その場合、IoT機の電源は、機械とは別に取る必要がでてくる。そうなると、電源工事と配線の取り回しが発生し....。話は最初に戻るが、だからIoTシステム全体の仕様を決めないと、IoT機のハード構成が決まらないというわけだ。
○IoT Base(ESP32版)の所見
加工数送信機のプログラムを動かすところまでは、こぎつけた。気になっていた点は、電力消費と発熱だが。電力消費は、ESP-WROOM-02よりも60mAくらい多い。今回はバッテリー駆動ではないので、問題にはならないが、ESP-WROOM-02の方が良い場合があると思う。
放熱対策として、基板のベタGNDへ熱を逃がすようにデザインをした。このため発熱に関しては、心配するほどでは無いように感じた。
以上