ESP8266 : ArduinoOTAで無線書き込み
Wi-Fiが使えるマイコンで,
一度はやってみたかった無線書き込み.
気になって調べてみたら,
想像以上に簡単だった.
ArduinoOTAとは
ArduinoOTAは Arduino IDEに 標準で附属するライブラリで, このライブラリのスケッチが書き込まれているESP8266などのボードに ネットワーク経由でスケッチを書き込むことができる. OTAはOver the Airの略だそう. そのまんま.
一応, ArduinoOTAの恩恵を受けるには
Python 2.7が必要だそう.
python2
が使えないときは
pyenv install 2.7.17
とかする.
ここでは説明を省く.
BasicOTAの書き込み
標準ライブラリなのでサンプルスケッチがある.
File > Examples > ArduinoOTA > BasicOTA
これを書き込めば次回のスケッチは ネット経由で書き込むことができるようになるの. が, ESP8266を1つしか使わないのであれば シリアルモニタを使わずともIPアドレスがわかるので, シリアル通信を除いた最低限のスケッチが以下.
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
const char* ssid = "your-ssid";
const char* password = "your-password";
void setup() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
delay(5000);
ESP.restart();
}
ArduinoOTA.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH) {
type = "sketch";
} else { // U_FS
type = "filesystem";
}
});
ArduinoOTA.begin();
// setup()に書きたいことはここ
}
void loop() {
ArduinoOTA.handle();
// loop()に書きたいことはここ
}
これを書き込むと,
Tools > Port: ~に
ESP8266-xxxxxx at 192.168.x.xx
のようにIPアドレス付きのPortが出現する.
これを選択することで,
次回はネット経由で書き込みすることができるようになる.
なお, 書き込みが終了してから 実行されるまでに, 10秒くらい時間がかかる. ドキドキしながら待つ.
これを毎回スケッチに潜ませれば, スケッチをOver the Airし続けられる. 潜ませるのを忘れると, またPCとケーブルで接続しなきゃいけないので, 注意が必要.
PlatformIOで使う
公式のドキュメント にあるように, PlatformIOでの書き込みでも AruduinoOTA経由で書き込める. ただし, こちらはIPアドレスの確認が必須. ArduinoIDEのPortに表示されるIPアドレスを メモしておく.
あとは簡単,
PratformIOのプロジェクトフォルダにある
platfirmio.ini
に
次の2行を追加するだけ.
upload_protocol = espota
upload_port = 192.168.x.xx
これで書き込めば, 自動的に ArduinoOTA経由で書き込んでくれる. 便利な世の中.
PlatformIOとは
そういえば, 脈略もなくPlatformIOを登場させていた. PlatformIOは組み込み系のための強力な拡張機能. てか, もはや統合開発環境. Arduino IDEとかいう軟弱なエディタではなく, VSCodeとかで開発ができる. しかも, Arduino言語でも使える. Arduinoを使いたくない理由の半分をこいつが解決してくれた.
インストールは普通の拡張機能と同じなので説明は省く. 以下のQiita記事を参考にされたい. マイコン開発するならPlatformIOがめちゃくちゃいいぞ - Qiita