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 と出て書き込みが出来ない場合、ウイルスチェックソフト等のファイアウォールがブロックしている可能性があるので、ファイアウォールを一時的に停止するか例外設定しておく。