ESP32やESP8266は無線LAN経由でArduino IDEからスケッチを更新する事が出来る。Arduino OTAと言う機能である。
無線LANに接続している状態で設置し使用している場合、スケッチの更新が必要な際わざわざPCとUSBで接続する必要がないため、非常に便利な機能である。
サンプルスケッチがArduinoOTAの下にある。主要な部分を抜き出したのが以下のスケッチ。初回はUSBで接続して書き込む必要がある。
setHostnameに分かり易い名前を付けておくと良い。
#include <WiFi.h> #include <ESPmDNS.h> #include <WiFiUdp.h> #include <ArduinoOTA.h> const char* ssid = "ssid名"; const char* 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(); } ArduinoOTA .setHostname("esp32_TESTBOARD") .onStart([]() {}) .onEnd([]() {}) .onProgress([](unsigned int progress, unsigned int total) {}) .onError([](ota_error_t error) {}); ArduinoOTA.begin(); } void loop() { ArduinoOTA.handle(); }
ESP8266の例
#include <ESP8266WiFi.h> #include <WiFiUdp.h> #include <ArduinoOTA.h> const char* ssid = "ssid名"; const char* 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(); } ArduinoOTA.setHostname("esp8266_tenki"); ArduinoOTA.onStart([]() {}); ArduinoOTA.onEnd([]() {}); ArduinoOTA.onError([](ota_error_t error) {}); ArduinoOTA.begin(); } void loop() { ArduinoOTA.handle(); }
書き込んでESPマイコンがPCと同じネットワークに接続して発見出来る状態になれば、Arduino IDEのシリアルポートの下に自動的に表示される。pythonが必要らしいので、pythonをインストールしていなければインストールしておく。
https://www.python.org/downloads/

シリアルポートを選択する様に、対象のデバイスを選択してスケッチを書き込むだけでネットワーク越しにスケッチの書き込みが行われる。

セキュリティやミスで書き込むのを防ぐためにパスワードを設定する事も出来る。下記行をArduinoOTA.beginの前に追加する。
ArduinoOTA.setPassword((const char *)"123");
123を適当なパスワードに設定する。
シリアルポートのリストには出てくるのに、書き込もうとすると [ERROR]: No response from device と出て書き込みが出来ない場合、ウイルスチェックソフト等のファイアウォールがブロックしている可能性があるので、ファイアウォールを一時的に停止するか例外設定しておく。