M5Stick-Cに使用されているマイコンESP32には、Wi-Fi経由でプログラムをアップできるOTA(Over The Air)機能があります。ArduinoIDEでは比較的簡単にできますが、PlatformIOでやる方法があまりまとまっていなかったので、備忘録としてまとめました。
※本記事ではM5Stick-Cを使用していますが、ほぼ同じ方法でESP32の開発ボードにも適用可能です。参考にしてください。
参考サイト
PlatformIOでM5Stick-Cを使うを参考に、PlatformIOからM5Stick-Cに書き込む準備をします。
適当なプロジェクトを作成しておきます。
プログラム
いたって普通のArduinoOTAのプログラムです。
いつもの通りYOURSSIDとPASSWORDは各自の環境に合わせて変更してください。
ここで、setHostname(“myesp32”)とすることでIPではなくmyesp32という名前で参照できるように変更しています。後ほど使います。
#include <WiFi.h>
#include <ESPmDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include <M5StickC.h>
const char* ssid = "YOURSSID";
const char* password = "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("myesp32");
ArduinoOTA
.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH)
type = "sketch";
else // U_SPIFFS
type = "filesystem";
Serial.println("Start updating " + type);
})
.onEnd([]() {
Serial.println("\nEnd");
})
.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
})
.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());
}
void loop() {
ArduinoOTA.handle();
}
処理は、loop内に追記しましょう。上記のコードはOTAの最小構成なので、書き込むときに必ず残さなければならず、消すとOTAできなくなります。
コードはこれで完成ですが、重要なplatformio.iniの設定があります。platformio.iniを開き、下記のコードを貼り付けてください(M5Stick-Cの一例)。
[env:m5stick-c_ota]
platform = espressif32
board = m5stick-c
framework = arduino
lib_deps =
m5stack/M5StickC@^0.2.0
monitor_speed = 115200
upload_protocol = espota
upload_port = myesp32
[env:m5stick-c]
platform = espressif32
board = m5stick-c
framework = arduino
lib_deps =
m5stack/M5StickC@^0.2.0
monitor_speed = 115200
platformio.iniでは以下の3つがポイントとなります。
・[env:hogehoge]でhogehogeという環境(ビルド・書き込み条件)を追加
・upload_protocol = espota でOTAでの書き込みを明示
・upload_port = hogehoge でhogehogeという名前のESP32に接続
よく見てみると、2つある環境の違いはupload_protocolとupload_portがあるか否かですね。他のESP32ボードでも、このように2つの環境を作り、2行付け足せばOKです。
因みに、upload_port = myesp32
の右辺はプログラム内で明示した名前です。代わりに upload_port = 192.168.1.100
のようにIPを指定することもできます。(私は固定IPの設定行を書くのが面倒で、かつ変動するIPを毎回打つのはだるいので名前を付けました…)
直接書き込み
これで環境関係の準備は終了。
次に書き込みますが、この時点ではESP32にOTAのプログラムがないので、最初だけ有線で書き込む必要があります。
画面下のenvをOTAなしバージョンに切り替えます。私のplatformio.iniでいうと[env:m5stick-c]ですね。
これで→をクリックし、書き込みます。書き込みが成功すると以下の画面になります。
OTA書き込み
次に、環境を[env:m5stick-c_ota]に切り替えます。この状態で→を押して書き込んでみて下さい。同一ネットワーク内のmyesp32という名前のデバイスを検索し、書き込みが始まります。
書き込みが完了しました。
参考になるサイト
platformio.ini周りの設定はPlatformIOのESP32ページが参考になります。
下図の通りOTAのオプションなども載っているので、眺めてみると面白いです。
M5Stick-Cに使用されているマイコンESP32には、Wi-Fi経由でプログラムをアップできるOTA(Over The Air)機能があります。ArduinoIDEでは比較的簡単にできますが、PlatformIOでやる方法があまりまとまっていなかったので、備忘録としてまとめました。
※本記事ではM5Stick-Cを使用していますが、ほぼ同じ方法でESP32の開発ボードにも適用可能です。参考にしてください。
目次
参考サイト
PlatformIOの準備
PlatformIOでM5Stick-Cを使うを参考に、PlatformIOからM5Stick-Cに書き込む準備をします。
適当なプロジェクトを作成しておきます。
プログラム
いたって普通のArduinoOTAのプログラムです。
いつもの通りYOURSSIDとPASSWORDは各自の環境に合わせて変更してください。
ここで、setHostname(“myesp32”)とすることでIPではなくmyesp32という名前で参照できるように変更しています。後ほど使います。
処理は、loop内に追記しましょう。上記のコードはOTAの最小構成なので、書き込むときに必ず残さなければならず、消すとOTAできなくなります。
platformio.ini(重要)
コードはこれで完成ですが、重要なplatformio.iniの設定があります。platformio.iniを開き、下記のコードを貼り付けてください(M5Stick-Cの一例)。
platformio.iniでは以下の3つがポイントとなります。
・[env:hogehoge]でhogehogeという環境(ビルド・書き込み条件)を追加
・upload_protocol = espota でOTAでの書き込みを明示
・upload_port = hogehoge でhogehogeという名前のESP32に接続
よく見てみると、2つある環境の違いはupload_protocolとupload_portがあるか否かですね。他のESP32ボードでも、このように2つの環境を作り、2行付け足せばOKです。
因みに、
upload_port = myesp32
の右辺はプログラム内で明示した名前です。代わりにupload_port = 192.168.1.100
のようにIPを指定することもできます。(私は固定IPの設定行を書くのが面倒で、かつ変動するIPを毎回打つのはだるいので名前を付けました…)直接書き込み
これで環境関係の準備は終了。
次に書き込みますが、この時点ではESP32にOTAのプログラムがないので、最初だけ有線で書き込む必要があります。
画面下のenvをOTAなしバージョンに切り替えます。私のplatformio.iniでいうと[env:m5stick-c]ですね。
これで→をクリックし、書き込みます。書き込みが成功すると以下の画面になります。
OTA書き込み
次に、環境を[env:m5stick-c_ota]に切り替えます。この状態で→を押して書き込んでみて下さい。同一ネットワーク内のmyesp32という名前のデバイスを検索し、書き込みが始まります。
書き込みが完了しました。
参考になるサイト
platformio.ini周りの設定はPlatformIOのESP32ページが参考になります。
下図の通りOTAのオプションなども載っているので、眺めてみると面白いです。