【ESP-IDF】ESP32が再起動を繰り返してしまう時の対処法

ESP32

目次

初めに

Windows環境でArduinoIDEを使用してESP32の開発をしていましたが、rebootし続けて書き込めなくなったため対処法を書きます。


ArduinoIDEとESP32の相性が良くないとの話もあったので、前記事でESP-IDFをWindows環境に導入してあります。2020年4月の情報なので今のArduino IDEは問題ないかもしれません。

【ESP32】ESP-IDFをWindows 10で使用する方法【Arduino】
はじめに趣味でESP32の開発を行っていたのですが、Arduino IDEでは書き込みがうまくいかない不具合に遭遇しました。ESP-IDFではうまくいくとの話があり、モノは試しでインストールを実施しました。2019年以降のインストール手順を...

私が購入したのは下記リンク上側の15*2Pinの方ではなく19*2Pinの方なので注意。
いわゆるNodeMCU-32Sと呼ばれる互換モジュールですね。
上側はDOIT ESP32 DEVKIT V1と呼ばれるもので、見た目が似ていますがPin配置が違います。

Rasbee ESP-WROOM-32S 開発ボード デュアルコア 2.4 GHz WiFi + Bluetoothデュアルモード対応 ESP-WROOM-32 内臓 マイクロコントローラ
Rasbee ESP NodeMCU開発ボード ESP8266 2.4GHz WiFi + Bluetooth デュアルコア CPU 低消費電力 Arduino対応 ワイヤレス CP2102 マイクロ USB デュアルコア モジュール 内臓 マイクロコントローラ ESPは既にアンテナとRFバラン、パワーアンプ、低ノイズ...
waves NodeMCU-32 開発ボード ESP32 ESP-WROOM-32 WiFi Bluetooth
マニュアル

起きたこと

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のコマンド一覧のページに詳しく載っています。

Build System - ESP32 - — ESP-IDF Programming Guide latest documentation

最後に

そもそもなぜ再起動を繰り返してしまったのかについてですが、ESP32に再起動連発しやすい個体があるとか、電圧が低い状態で使用しているからだとか、諸説あります。

今回に関してはFlashROMの初期化で解決しました。

ESP-IDFのドキュメントは日本語のものが少ないですし、新しいESP32を購入した方が手っ取り早いかもしれませんね。

Arduino IDEを使用して同じことができないか時間があるときに調べてみます。

コメント

タイトルとURLをコピーしました