きっかけ
・某コンの本番基板において電源投入だけではプログラムが実行されずEN(RESET)ボタンを押さないとプログラムが実行されなかった.
(黙っててごめんなさい)(ちなみにフライト前々日ぐらいに気が付きました)
さすがに次の年も同じことをするわけにはいかないので,原因究明を始めた.
以下TLに助けを求めるTW...
ESP32の電源投入時にプログラムが走らない理由ってやっぱ電源投入時に電流が不安定になるからなのかな.本番前になってちょと焦った.遅延RST回路みたいなの組んだほうがいいのかレギュレータのA上げたほうがいいのかどっちなんだろう
— 後姿tail(存在しない記憶) (@tail_backshape) 2024年8月29日
なんとなく電源周りのコンデンサとかが怪しいと思っていましたが暫く進展なし.
こういうのは大体英語圏のほうが情報が多いとの約束なので調べてみたらぴったりの記事がありました.
ESP32の公式のフォーラムです.
www.esp32.com
簡潔に解決策を引用すると,
「So fast solution is: Use different capacitor for one of signals or remove capacitor from BOOT, or add 10K resistor between BOOT (GPIO 0) and Vcc. If you use any of these methods, it will run your program when you plug it to usb without need of resetting ;) .」
(超意訳:簡潔に言うと,コンデンサを調整するかBOOT(GPIO 0)とVcc(5V)の間に10kΩの抵抗を挟めばええよ^^)
で,コンデンサ周りを弄るのは面倒だったのでサクッとできる,抵抗の追加をしたら無事動きました.
ちなみに後の投稿で,
「"Add a 10K resistor between BOOT (GPIO 0) and Vcc." - This worked for me. Previously wasted time with a capacitor between EN and ground, and also a 100k resistor between GPIO 0 and 3.3v. Nothing worked until I connected the 10k resistor between GPIO 0 and VCC (5v).」
(超意訳:抵抗入れたらうまくいったわ.100kΩの抵抗を3.3vとGPIO 0に挟んでも効果なかったんよ...)
とあるので,プルアップ抵抗は5vに挟むのがよさそうです.
10kΩを3.3v-GPIO 0でも動きそうな気はするのでまた今度試してみます.
以上.