ESP32 WROOM-32E N-16は、WiFi、BlueToothも扱える上にメモリ、フラッシュも余裕があるので、個人的には、お値段も安く魅力的だとおもいます。
過去何度か使用してきましたが、それほどトラブルもなく使ってきました。
ですが、先日、WiFi接続したままループするプログラムをこのマイコンで動作させたところ、不定期にExceptionが発生し、リブートしてしまうという現象が発生しました。(数時間に1回~数回発生する)
WiFi接続しないでループしている分には、何も発生しません。
また、一瞬使う時だけWiFi接続するようなメール送信等でも特に異常はありませんでした。
遭遇したExceptionは、主に下記の2つでした。
それ以外もありましたが、再起動後に発生したものでしたので、ここでは割愛します。
「Guru Meditation Error: Core 0 panic’ed (LoadProhibited). Exception was unhandled.」
「Guru Meditation Error: Core 0 panic’ed (IllegalInstruction). Exception was unhandled.」
バックトレースすると、コケているのは、パケットをメモリに保管するWiFiの最下位層でした。
様々な方が同じような症状でハマっているようで、結構苦しんでいるように見えました。
解決に至らなかった方も結構な数おられました。
よくある障害原因は、
・GPIO 6, 7を使ってしまった(回路設計ミス)
・電圧、電流が不安定であった(電源不良)
なのですが、どちらにも該当しない方が多数おられました。
私の場合もどちらにも合致しませんでした。
WiFiを接続すると発生するので、ルーター由来(干渉波自動回避機能、エラーパケット等)かと疑って、ルーターのログを探ったのですが、異常はありませんでした。
つまりは、ESP32側の単独障害が濃厚。
「ボード」のバージョンでも、発生頻度が変わります。
テストプログラムを使って障害を発生させましたので、スタック、ヒープ等のアプリの問題でないことも確認しました。
発生していたExceptionは、フラッシュメモリ由来で発生する現象なのですが、WiFi接続中しか発生しない上、ボードバージョンでも頻度が変わるので、解析方針が変な方向に向かってしまっていました。
初心に返り、ESP32のデータシートを見つつ「Exceptionはすべてフラッシュ要因」「水晶=40MHz」を頭に入れて再度、安定化の試行を行いました。
試行の結果、起因する設定がわかりました。
下記は、Arduino IDE 2.3.6 ESP32 Dev Moduleのツールメニューです。

試行錯誤した結果、現象に関係していたのは、赤で囲った部分:Flash Frequencyでした。
80MHz/40MHzが選択可能なのですが、80MHzにすると、WiFi動作時にExceptionが発生します。
40MHzに設定変更すると、安定動作し、Exceptionは全く発生しなくなりました。
80MHzはWiFiを使わなければ動作しているように見えますが、安定を求めるのであれば、あまり使わない方がよさそうな感じがします。
もし、同じような障害で苦しんでおられる方の参考になれば幸いです。