ESP32をVScode + PlatformIOでOTAする
概要
ESP32とVScode + PlatformIOでOTA(Over The Air)によるプログラム更新をやってみた.
Arduino IDEによる方法は書籍『ESP32&Arduino 電子工作 プログラミング入門』で記載があったが,ESP32をいじるにはVScode +PlatformIOのほうが便利なため,こちらの方法でOTAができることを確認した.
結論
PlatformIOの設定ファイル(platformio.ini)に下記の設定を追加することが必要なことがわかった.
[env:myenv] upload_protocol = espota upload_port = IP_ADDRESS_HERE or mDNS_NAME.local
https://docs.platformio.org/en/latest/platforms/espressif32.html
Over-the-Air (OTA) update参照
upload_portには,実際にESP32に割り当てられたIPアドレスを設定する.
実行したこと
実行環境
【ホストPC】
【ターゲットボード】
- ESP32-WROOM-32 開発ボード
手順
OTA対応のベースのプログラムの準備
Arduino IDEのスケッチ例に「ArduinoOTA」→「BasicOTA」があるので,こちらをベースとする.
BasicOTAプログラムの先頭にESSIDとパスワードを設定する部分があるので,自分のWiFi環境を確認して設定する.
const char* password = "........";
platformio.iniの設定
こちらが大事.
PlatformIOには設定ファイルであるplatformio.iniがある.
platformIOは,.iniファイルが初期設定でもシリアル通信による書き込みCOMポートを自動で選択してくれるが,複数書き込みをするときは上手く自動で選択してくれないことが多かったので,.iniファイルに指定ポートを記載している.
OTAをする場合も,自動では設定ができなかったので,.iniファイルで指定する.公式ドキュメントを見たら.iniファイルにupload_protocolにespota,upload_portにIPアドレスを設定する.
IPアドレスは下記のプログラムの一回目実行でシリアルモニタ上に表示されるようにしている.割り当てられたIPアドレスを確認してからplatformio.iniを編集する.
platformio.ini
; PlatformIO Project Configuration File;; Build options: build flags, source filter; Upload options: custom upload port, speed and extra flags; Library options: dependencies, extra library storages; Advanced options: extra scripting;; Please visit documentation for the other options and examples
[env:esp32dev]platform = espressif32board = esp32devframework = arduino#upload_port = COM6#monitor_port = COM6upload_protocol = espotaupload_port = 192.168.100.34monitor_speed = 115200
シリアルポートの設定はコメントアウトする.
プログラムを書き込む
設定が終われば,一度USBケーブルでESP32にプログラムを書き込む.
このとき,シリアルモニタでIPアドレスを確認することを忘れずに.
その後,VScode上のPlatformIO Upload WiFiを実行する.
PlatformIOには下の方にUpload to remote deviceのアイコンがあるので,こちらを押す.
実行タスクにPlatformIO Upload WiFiがでる.
書き込みが成功すると,下記のようになる.
サンプルプログラム
基本的にはArduino IDEのBasicOTA.inoの内容.
OTAで実行内容が変わっているかを確認するためにLEDの点灯を追加している.
結果
以上の設定と手順で,OTAによるプログラム書き換えができた.
書き換わっているかどうかは,LEDの点灯間隔を変えて確認した.
ESP32をパソコンにUSBケーブルで接続したままでもOTAで書き換わっているはずだが,本当にOTAで書き換えているかが実感できないので,モバイルバッテリーでESP32を動かして確認してみた.
この状態で,PlatformIOで書き込むとOTAをしている感じが実感できる.
あとがき
Arduinoくらいしか触っていないと,シリアル書き込み以外でプログラムを書き込めることは結構新鮮である.OTAが活躍する事例がまだ思いつかないが,かっこいいのでいつかは応用したい.
参考
- PlatformIO documentation Espressif 32
https://docs.platformio.org/en/latest/platforms/espressif32.html
- ESP32&Arduino 電子工作 プログラミング入門