NodeMCUが書き込みできなくなった件
経緯
- OLED0.96_Screen_V2.ino をコピーして、NodeMCU_OLED0.96_Screen_V2.ino として新規保存した。
- V2を外付けOLED用に変更した。
OLED配線は SCL=D1(GPIO5), SDA=D2(GPIO4)。 - D2をOLEDのSDAに使うため、V2のボタン入力は衝突回避で D7(GPIO13) に変更した。
- OLED0.96_Screen_V1.ino もコピーして、NodeMCU_OLED0.96_Screen_V1.ino として新規保存した。
- V1も外付けOLED用に変更した。
OLED配線は SCL=D1(GPIO5), SDA=D2(GPIO4)。
書き込みエラー
発生していたエラー:
A fatal esptool.py error occurred: Failed to connect to ESP8266: Timed out waiting for packet header
最初はUSBケーブル、COMポート、ボード設定、外部配線、FLASHボタン、Upload Speedなどを確認したが改善しなかった。
切り分け
74880 baudでRSTログを確認したところ、最初は次の表示だった。
boot mode:(3,6)
これは通常起動モードで、書き込みモードではなかった。
その後、D3(GPIO0) を GND に接続してRSTしたところ、
boot mode:(1,6)
になった。
これはESP8266が書き込みモードに入った状態。
原因
NodeMCU本体は壊れていなかった。
原因は、ESP8266が自動で書き込みモードに入れていなかったこと。
可能性としては、
FLASHボタンが効きにくい GPIO0周りの接触/回路の問題 自動リセット/自動書き込み回路がうまく動いていない
あたり。
解決方法
書き込み時は手動で書き込みモードに入れる。
D3(GPIO0) → GND に接続 RSTを押して離す boot mode:(1,6) を確認 Arduino IDEでアップロード 書き込み完了後、D3-GNDを外す RSTを押して通常起動
これで書き込みできるようになった。
最終配線
外付けOLED:
OLED SCL → NodeMCU D1 / GPIO5 OLED SDA → NodeMCU D2 / GPIO4 OLED VCC → 3.3V OLED GND → GND
V2のボタン:
ボタン片側 → NodeMCU D7 / GPIO13 ボタンもう片側 → GND
V1はOLEDのI2Cピン変更のみ。