組み込み開発を、実機で体系的に学びませんか?
クミタテでは、ESP32・電子回路・IoT開発を学べる オンライン教材を公開しています。無料会員向け教材も利用できます。
無料会員登録して教材を見る Googleアカウントなら簡単に登録できます
自作ESP32基板を作っていたとき、かなり厄介なトラブルに遭遇した。

書き込みはできるのに、電源を入れても起動しない…
最初は電源を疑い、配線を疑い、はんだ不良を疑い、ESP32自体の故障まで疑った。
でも原因はもっと単純だった。
ブートストラップピン電圧の、たった “数msの立ち上がり差” だった。
※ここでいうESP32は、ESP32C5です
今回見ていたのは、電源投入直後のあるGPIOピンの電圧波形。
比較するとこんな感じだった。


差はたった9ms程度。
でも、この差がESP32にとって致命的だった。
ESP32には「ブートストラップピン(Strapping Pin)」というものがある。
電源投入直後にこれらのピン状態を読み取って、
などを決定している。
つまり、電源投入時のほんの一瞬だけ重要になる特殊なピン。
今回、自分はそこへ不用意にコンデンサを接続してしまっていた。
コンデンサが付くと、信号はゆっくり立ち上がる。
例えば:
3.3V
│
10kΩ
│
│ーブートストラップピン(GPIO)
│
0.1uF
│
GND
このような回路だと、GPIO電圧は即座にHIGHにならず、RC時定数に従ってゆっくり上昇する。
時定数は:
今回、
なら:
τ=10000×0.1×10−6=1ms
になる。
数ms〜十数msくらい、電圧が中途半端な状態になるわけだ。
ESP32は電源投入直後、かなり早いタイミングでブートピンの状態をサンプリングする。
つまり、
だと、ESP32が誤ったブートモードへ入ってしまう。
結果として、
という非常に分かりにくい状態になる。

これ、本当に混乱する。
今回厄介だったのは、
という点。
つまり「全部動いているように見える」のに起動だけしない。
結果として、
などを延々疑うことになった。
原因に辿り着くまで丸1日かかった。
ESP32のブートストラップピンには、基本的に以下を慎重に接続したほうがいい。
特に、
「ただノイズ対策のつもりでコンデンサを入れた」
みたいなのが危険。
ESP32はかなり便利で強力なマイコンだけど、ブート周りは意外と繊細。
今回の件で、
「電源投入直後の数msがこんなに重要なのか…」
と痛感した。
もしESP32基板を自作する人がいたら、ブートストラップピンの扱いには本当に注意したほうがいい。