目次
初めに
Windows環境でArduinoIDEを使用してESP32の開発をしていましたが、rebootし続けて書き込めなくなったため対処法を書きます。
ArduinoIDEとESP32の相性が良くないとの話もあったので、前記事でESP-IDFをWindows環境に導入してあります。2020年4月の情報なので今のArduino IDEは問題ないかもしれません。
私が購入したのは下記リンク上側の15*2Pinの方ではなく19*2Pinの方なので注意。
いわゆるNodeMCU-32Sと呼ばれる互換モジュールですね。
上側はDOIT ESP32 DEVKIT V1と呼ばれるもので、見た目が似ていますがPin配置が違います。
起きたこと
ESP32が再起動を繰り返して使用不能になった。
シリアルコンソールを見ると再起動時のテキストをずっと吐き出している。
結論
結論としては、FlashROMを初期化することで解決しました。
以下ではやり方を記述します。
- make erase_flashを実行する
- esptool.py を実行して引数でerase_flashを指定する
- ESP-IDFのコマンドからelase_flashを実行する
の三種類の方法がありますが、3番目を実行しました。
どの方法でもESP-EDFの導入は必須です。FlashROMのリセット機能がESP-IDFにしかないからです。
一番上については、Windows PowerShell環境にmakeを入れてもそのままだとディレクトリの表現にコロンがある(C:\←これ)せいで動かないです。 MSYSを使うなどで対処することは可能で、以前のESP-IDFはこれを推奨していました。今は独自のコマンドプロンプト環境を提供しているので非推奨です。
一番下が公式の推奨している方法という理解でいいと思います。
手順
ESP-IDF内のコマンドにerase_flashがあるので、それをコマンド入力すればよいです。
idf.py -p [ESP32のポート] erase_flash
これだけ、コツは下の実行結果のConnectingの部分でESP32のリセットボタンを連打すること。じゃないと接続されませんでした。
C:\Users\hoge\esp\hello_world>idf.py -p COM4 erase_flash
Note: You are using Python 3.7.4. Python 3 support is new, please report any problems you encounter. Search for 'Setting the Python Interpreter' in the ESP-IDF docs if you want to use Python 2.7.
Checking Python dependencies...
Python requirements from C:\Users\hoge\esp\esp-idf\requirements.txt are satisfied.
Running esptool.py in directory C:\Users\hoge\esp\hello_world\build
Executing "C:\Users\hoge\.espressif\python_env\idf3.3_py3.7_env\Scripts\python.exe C:\Users\hoge\esp\esp-idf\components/esptool_py/esptool/esptool.py -p COM4 -b 460800 --after hard_reset erase_flash"...
esptool.py v2.8
Serial port COM4
Connecting........_____....._____....._____....._
Detecting chip type... ESP32
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC:
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Erasing flash (this may take a while)...
Chip erase completed successfully in 7.5s
Hard resetting via RTS pin...
Done
実行結果を見るに、結局esptool.pyのerace_flashを使用しているだけですね。
一応idf.pyのコマンド一覧のページに詳しく載っています。
最後に
そもそもなぜ再起動を繰り返してしまったのかについてですが、ESP32に再起動連発しやすい個体があるとか、電圧が低い状態で使用しているからだとか、諸説あります。
今回に関してはFlashROMの初期化で解決しました。
ESP-IDFのドキュメントは日本語のものが少ないですし、新しいESP32を購入した方が手っ取り早いかもしれませんね。
Arduino IDEを使用して同じことができないか時間があるときに調べてみます。
コメント