SSブログ

今更ながら ESP8266 (ESP-WROOM-02) のOTAを試す [Arduino]

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


DSC04428.JPG


ドローンのマイコンにESP-WROOM-02を考えているのですが、ソフトウェアアップデートをOTAで出来れば便利かなと思った次第です。

OTAを行うには、OTA用のスケッチを書き込む必要があります。「スケッチの例」から「BasicOTA」を選択します。

BasicOTA.png

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


BasicOTA2.png


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


BasicOTAConsole.png


ここで、一度 Arduino IDE を閉じて再起動します。(←ここ重要)

すると、メニューのシリアルポートにネットワークポートが追加されています。

BasicOTAPort.png


このポートで、ソフトをアップデートをしますが、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」を追加し、処理を記述します。試しにボードに書き込んでみました。


BasicOTANewTab.png


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


DSC04434.JPG


動画でアップロードの様子を映してみました。最初は BasicOTA の状態なのでLED点灯はありません。LEDを1秒間隔で点灯するソフトをOTAし、その後、0.5秒間隔の点灯のソフトに変更してみました。





これは便利ですね。どんどん活用していきたいと思います!
(^_^)/~





HiLetgo OTA WeMos D1 CH340 WiFi 開発ボード ESP8266 ESP-12F For Arduino IDE UNO R3

HiLetgo OTA WeMos D1 CH340 WiFi 開発ボード ESP8266 ESP-12F For Arduino IDE UNO R3

  • 出版社/メーカー: HiLetgo
  • メディア: エレクトロニクス



ESPr Developer(ESP-WROOM-02開発ボード)

ESPr Developer(ESP-WROOM-02開発ボード)

  • 出版社/メーカー: スイッチサイエンス
  • メディア: エレクトロニクス



ESP8266ではじめるIoTプログラミング

ESP8266ではじめるIoTプログラミング

  • 出版社/メーカー:
  • 発売日: 2016/06/05
  • メディア: Kindle版




nice!(32)  コメント(2)  トラックバック(0) 
共通テーマ:趣味・カルチャー

nice! 32

コメント 2

とんかつ

こちらの記事を参考に、
ここ約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) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0