今更ながら ESP8266 (ESP-WROOM-02) のOTAを試す [Arduino]
世の中は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ヶ月間、悩みました
お陰様で「氷解」しました
ありがとうございました。
by とんかつ (2020-01-10 14:18)
こんにちは。
有益な情報をありがとうございます。
一つお尋ねしたいのは、BasicOTA に追加したAPI、OTA_setup()、OTA_loop()を記述すると、コンパイルが通らない、という点です。
BasicOTAの状態では、当然書き込みができるのですが、このAPIを追加するにあたって、何か必要なライブラリ追加などありますか?
by そよ風 (2023-03-21 09:25)