ESP32マイコンボードをArduino IDEで書き込むときに自動で書き込めない場合の対策方法を試してみた。
NodeMCU-32SにArduino IDEで書き込みをするのがうまくいかない。自動で書き込みができなくて、手動で基板上のボタンを押すと書き込みができた。 しかし、毎回ボタンを押すというのは面倒だ。
これには対策方法があるそうだ。Twitterで教えてもらった。
このあたりを参考にして、NodeMCU-32SのENピンとGNDの間にコンデンサーを入れたら書き込みができるようになった。
・ESP32のプログラム書込みを安定させる – Qiita
・【ESP32】自動書き込みするために、EN-GND間にコンデンサーを挿入 – お部屋でモバイル
NodeMCU-32Sのモジュールを改造したものは、こんな感じになっている。
ESP32マイコンは書き込みをするためにGPIO0とENの2つのピンを制御する必要がある。なので、それを手動で行うために2つのプッシュボタンが実装されている開発キットが多い。
(手動での手順は、GPIO0のボタンを押し(GPIO0=Low)、GPIO0を押したままでENボタンを押す(EN=Low)、ENボタンを離す(EN=High)に戻すと、書き込みが開始される。GPIO0ボタンも離してよい。)
Arduino IDEは、ESP32マイコンへの書き込みを自動で行うためにUSB-UARTのシリアル通信の制御信号のDTRとRTSの2つを使って制御している。
例えばESP32マイコンを内蔵したM5Stackの回路図は、このようになっている。
NodeMCU-32Sなども同様な回路になっているはずなのだが、うまく書き込みができない。
USB-UART I/Fを経由してDTRとRTSの2つの信号線を時間差で変化させる処理が、うまく時間差を作れていないせいらしい。
対症療法として、ENピンとGNDの間に0.1μFのコンデンサーを入れてやればよい。もし0.1μFで足りなければ容量をもう少し大きいものを取り付ければよいそうだ。
自分の場合、NodeMCU-32Sにチップ型の0.1μFのコンデンサーを取り付けてうまくいった。
あと、別のESP32マイコンボードも同じようにArduino IDEで自動書き込みができなかったので、これも同様に0.1μFのチップコンデンサーを取り付けて、自動書き込みできるようになった。
あと他のESPDUINO-32というArduino型のESP32マイコンボードもあるのだが、これは上記のような対策をしなくても最初からArduino IDEで自動書き込みができていた。
IoT ExpressというESP32マイコンボードの場合、そもそもDTR,RTSの信号線の仕組みが実装されていないので、コンデンサーを付けるだけでは自動書き込みはできない。
IoT Express MkIIという後継機種は自動書き込みができるようになっているらしい。