ESP32S3でOTAを試す(失敗) | お父にゃんの電子工作

お父にゃんの電子工作

暇なおじさんが、電子工作(主にラジオ製作)をして勝手な感想を書く

ESP32系ではOTA(Over-The-Air)アップデートが出来るらしい。同一ネットワークのWiFiであれば、WiFi経由でソフトの書き換えができるらしいのである。しかし、一度も試したことはないし、具体的にどうすればよいか分からないので、Google Geminiに訊いてみる。

 

すると、まず以下のようなコードを入れる必要がある、とのこと。

#include <WiFi.h>
#include <ArduinoOTA.h>
 
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
 
void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
 
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();
  }
 
  // --- OTA設定の開始 ---
  // ポート番号(デフォルト: 3232)
  // ArduinoOTA.setPort(3232);
  // ホスト名の設定(IDEのポート一覧に表示される名前)
  ArduinoOTA.setHostname("my-esp32s3-device");
  // パスワード設定(任意)
  // ArduinoOTA.setPassword("admin");
 
  ArduinoOTA.onStart([]() {
    Serial.println("Start updating");
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
  });
 
  ArduinoOTA.begin();
  // --- OTA設定の終了 ---
 
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}
 
void loop() {
  ArduinoOTA.handle(); // これを忘れるとOTAできません
 
  // ここに自分のメイン処理を書く
}

 

次にPCにPythonをインストールする必要がある。

Arduino IDEがWiFiで転送する際にはPythonコードで動かすため。

 

Pythonインストールの際には下部にある 「Add Python to PATH」(または Add python.exe to PATH)というチェックボックスに必ずチェックを入れる必要がある、とのこと。

 

さっそく、これをESP32S3のWebラジオに組み込んで、OTAで書き換えに対応させようと企てて試してみた。

 

すると、Webラジオの再生をしようとしたあたりで、クラッシュしてリブートを繰り返してしまう。

あれれ?

Google Geminiにクラッシュしたときのシリアルモニタのデータを送って見解を聞いたら、

「ネットワークの負荷が急増し、オーディオ用のタスクとOTAがリソースを奪い合ってクラッシュしている可能性があります。 」

 

こりゃいかん、もとに戻そうと修正前のコードを書いて再起動させても、なぜかクラッシュしてリブートを繰り返してしまう。

おいおい、壊れたのか?

WiFi設定を保存する領域に変なデータが書き込まれた?

かなり前のVer1.0のプログラムを書いても元に戻らない(涙)

ボードライブラリを最新版にしたり、昔のコードを書き直してみる等をしているうちに、何とか復帰して動くようになった。

めっちゃ焦った。

なんか、これ以上試すのは怖くなった。

 

ESP32S3のWebラジオでは色々詰め込みすぎたせいか?

簡単なプログラムで動かす時が来たら、改めて再チャレンジするかもしれない。

 

 

「詰め込みすぎニャ」