動作確認(Lチカ)ができたので、OTAしてみることに
[IoT] VisualStudio + PlatformIO + ESP32 での環境構築
Sponsor Link
OTA
OTAそのものは、Arudinoのサンプルからとってきたものに、Lチカを追加
setup で準備して、loop から、ArduinoOTA.handle()を 呼び出すだけ。
コード
#include <ESP8266WiFi.h> #include <ESP8266mDNS.h> #include <WiFiUdp.h> #include <ArduinoOTA.h> #ifndef STASSID #define STASSID "SSID" #define STAPSK "password" #endif const char* ssid = STASSID; const char* password = STAPSK; 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("admin"); // Password can be set with it's md5 value as well // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3 // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3"); ArduinoOTA.onStart([]() { String type; if (ArduinoOTA.getCommand() == U_FLASH) { type = "sketch"; } else { // U_SPIFFS type = "filesystem"; } // NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end() Serial.println("Start updating " + type); }); 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()); // setup ping in/out pinMode(LED_BUILTIN, OUTPUT); } void loop() { ArduinoOTA.handle(); // LED On/Off digitalWrite(LED_BUILTIN, HIGH) ; delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); }
PlatformIOの設定
ArduinoIDEだとネットワーク上のターゲットを見つけてくれるみたいだけど、PlatformIOでは、手書きが必要です。
platformio.iniの中に、以下の設定を追加。
コード
upload_protocol = espota upload_port = IPアドレス or mDNSで引ける名前
MEMO
DHCPベースだとIPアドレス変わるかもしれないから、固定IPにするか、mDNSにしたほうが、後のメンテナンスは楽になります。
書き込み
普通に、”upload”を実行すると、以下のように、表示されて書き込み完了します。
コード
16:01:20 [INFO]: Sending invitation to: <ESP8266のIPアドレス> 16:01:21 [INFO]: Waiting for device...
まとめ: ESP8266 OTA 設定
ESP8266 で OTA するための設定
- setup で OTA 設定を行う
- loop で ArduinoOTA.handle() して、必要に応じて OTA を行う
ものの、10分でOTAできるようになります。
Sponsor Link