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へ熱を逃がすようにデザインをした。このため発熱に関しては、心配するほどでは無いように感じた。
 
以上