"esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header" が発生した時にチェックすること
AE-ESP-WROOM-02にArduinoで書き込みを行おうとした際に,以下のエラーが発生し,解決に時間を要しました.
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
私の場合はGPIO15をLowにしていなかった(オープンだった)のが原因でした. ESP-WROOM-02のデータシートにはちゃんと書いてあるんですけどね・・・.
他にもちゃんとデータシートを読まない人(未来の自分)がいると思うので,上記のエラーが発生した時に確認すべきことをメモしておきます.
シリアル通信が正しくつながっているか
配線や電源が正しく,ArduinoがESP8266と正しく通信できているかチェックします.
方法は以下の通りです.
- Arduinoのシリアルモニタを表示する
- ボーレートを74880に設定する(ESP8266は起動直後のボーレートが74880であるため)
- ESP8266をリセットする(RSTをLOW→HIGHにする)
すると,次のような出力が確認できます.
これでArduinoと正しくシリアル通信(ESP8266からArduinoに対する送信)ができていることがチェックできます.
ESP8266が正しくUART Download Modeになっているか
Arduinoから書き込みを行う際は,ESP8266がUART Download Mode(いわゆる書き込みモード)になっている必要があります.
UART Download Modeにするには,データシートp.7に書いてあるとおり,以下のような状態でESP8266が起動する必要があります.
- GPIO15: Low
- GPIO0: High
- GPIO2: High
実際に何モードで起動しているかは,起動時の出力で確認できます.
前述のシリアルモニタに出力されたboot mode:(7,7)
がそれです.
数字の意味は,以下のページが参考になりました.
cf. esp-wroom-02(esp8266) boot mode(x,y)とは - shangtian’s blog
このページが消えてしまうと困るので,(x,y)のxの意味だけ転記します. code(2進数)の各ビットは,GPIO15,GPIO0,GPIO2のピン状態です.
code(2進数) | code(10進数) | 意味 |
---|---|---|
000 | 0 | Remapping |
001 | 1 | Boot from the UART0. Also includes flashing the flash memory for subsequent normal start |
010 | 2 | Jump start |
011 | 3 | Boot from flash memory |
100 | 4 | SDIO low speed V2 |
101 | 5 | SDIO high speed V1 |
110 | 6 | SDIO low speed V1 |
111 | 7 | SDIO high speed V2 |
x=1になっていない場合は,各ピンが正しく設定されているか確認するとよいでしょう.
私の場合,UART Download Modeにしたつもりが(5,7)になっていたので,GPIO15がオープンであることが原因なのだと気づけました.