今更ながら ESP8266 (ESP-WROOM-02) のOTAを試す
世の中はESP8266からESP3212へ移行しつつありますが、今更ながらESP8266のOTAを試してみました。

ドローンのマイコンにESP-WROOM-02を考えているのですが、ソフトウェアアップデートをOTAで出来れば便利かなと思った次第です。
OTAを行うには、OTA用のスケッチを書き込む必要があります。「スケッチの例」から「BasicOTA」を選択します。

BasicOTAの"ssid" と"password" を変更します。

BasicOTAをESP-WROOM-02へ書き込み、ブートモードで起動します。ここで、コンソールにIPアドレスが出てくれば準備完了です。

ここで、一度 Arduino IDE を閉じて再起動します。(←ここ重要)
すると、メニューのシリアルポートにネットワークポートが追加されています。

このポートで、ソフトをアップデートをしますが、OTAをするソフトウェアは常にBasicOTAのルーチンが必要になります。省いてしまうと、一度OTAをしたら二度目からOTAが出来なくなります。(ここも重要)
BasicOTAの中に処理を追加するのは見通しが悪いので、BasicOTAにAPIを追加します。追加するのは、OTA_setup()、OTA_loop() の二つです。
新規にタブ「MainOTA」を追加し、処理を記述します。試しにボードに書き込んでみました。

WiFiで動作していることを確認するためにバッテリーで駆動してみます。

動画でアップロードの様子を映してみました。最初は BasicOTA の状態なのでLED点灯はありません。LEDを1秒間隔で点灯するソフトをOTAし、その後、0.5秒間隔の点灯のソフトに変更してみました。
これは便利ですね。どんどん活用していきたいと思います!
(^_^)/~


ドローンのマイコンにESP-WROOM-02を考えているのですが、ソフトウェアアップデートをOTAで出来れば便利かなと思った次第です。
OTAを行うには、OTA用のスケッチを書き込む必要があります。「スケッチの例」から「BasicOTA」を選択します。

BasicOTAの"ssid" と"password" を変更します。

BasicOTAをESP-WROOM-02へ書き込み、ブートモードで起動します。ここで、コンソールにIPアドレスが出てくれば準備完了です。

ここで、一度 Arduino IDE を閉じて再起動します。(←ここ重要)
すると、メニューのシリアルポートにネットワークポートが追加されています。

このポートで、ソフトをアップデートをしますが、OTAをするソフトウェアは常にBasicOTAのルーチンが必要になります。省いてしまうと、一度OTAをしたら二度目からOTAが出来なくなります。(ここも重要)
BasicOTAの中に処理を追加するのは見通しが悪いので、BasicOTAにAPIを追加します。追加するのは、OTA_setup()、OTA_loop() の二つです。
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
const char* ssid = "your ssid";
const char* password = "your password";
void setup() {
Serial.begin(115200);
Serial.println("Booting");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("Connection Failed! Rebooting...");
delay(5000);
ESP.restart();
}
// Port defaults to 8266
// ArduinoOTA.setPort(8266);
// Hostname defaults to esp8266-[ChipID]
// ArduinoOTA.setHostname("myesp8266");
// No authentication by default
// ArduinoOTA.setPassword((const char *)"123");
ArduinoOTA.onStart([]() {
Serial.println("Start");
});
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);
if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
else if (error == OTA_END_ERROR) Serial.println("End Failed");
});
ArduinoOTA.begin();
Serial.println("Ready");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
OTA_setup(); // ←追加
}
void loop() {
ArduinoOTA.handle();
OTA_loop(); // ←追加
}
新規にタブ「MainOTA」を追加し、処理を記述します。試しにボードに書き込んでみました。

WiFiで動作していることを確認するためにバッテリーで駆動してみます。
動画でアップロードの様子を映してみました。最初は BasicOTA の状態なのでLED点灯はありません。LEDを1秒間隔で点灯するソフトをOTAし、その後、0.5秒間隔の点灯のソフトに変更してみました。
これは便利ですね。どんどん活用していきたいと思います!
(^_^)/~

HiLetgo OTA WeMos D1 CH340 WiFi 開発ボード ESP8266 ESP-12F For Arduino IDE UNO R3
- 出版社/メーカー: HiLetgo
- メディア: エレクトロニクス

ESPr Developer(ESP-WROOM-02開発ボード)
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
この記事へのコメント
ここ約1ヶ月ほど成功せずにいたOTAが、出来ました!!
何より驚いたのは
OTAではesp8266へのスケッチ書込・実行時の「お作法」が
要らない事でした。
シリアルポートでの書き換えは、一々このお作法が必須でしたが
OTAでは、いきなりの書き替え+アップロードだけで
スケッチが実行されます。これにはびっくりでした。
「動画」も参考になりました。
「喉に刺さった魚の骨」みたいに、この1ヶ月間、悩みました
お陰様で「氷解」しました
ありがとうございました。
有益な情報をありがとうございます。
一つお尋ねしたいのは、BasicOTA に追加したAPI、OTA_setup()、OTA_loop()を記述すると、コンパイルが通らない、という点です。
BasicOTAの状態では、当然書き込みができるのですが、このAPIを追加するにあたって、何か必要なライブラリ追加などありますか?