キイロイトリらぼ

ぬいぐるみと一緒に生きていきます

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】

  • windows10 64bit Home
  • VSCode - 1.45.1
  • PlatformIO(VScodeにインストール済み)

【ターゲットボード】

  • ESP32-WROOM-32 開発ボード

手順 

OTA対応のベースのプログラムの準備

Arduino IDEのスケッチ例に「ArduinoOTA」→「BasicOTA」があるので,こちらをベースとする.

BasicOTAプログラムの先頭にESSIDとパスワードを設定する部分があるので,自分のWiFi環境を確認して設定する.

const charssid = "........";
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 = espressif32
board = esp32dev
framework = arduino
#upload_port = COM6
#monitor_port = COM6
upload_protocol = espota
upload_port = 192.168.100.34
monitor_speed = 115200

シリアルポートの設定はコメントアウトする.

プログラムを書き込む

設定が終われば,一度USBケーブルでESP32にプログラムを書き込む.

このとき,シリアルモニタでIPアドレスを確認することを忘れずに.

その後,VScode上のPlatformIO Upload WiFiを実行する.

PlatformIOには下の方にUpload to remote deviceのアイコンがあるので,こちらを押す.

f:id:gijin94yobu:20200517001120p:plain

実行タスクにPlatformIO Upload WiFiがでる.

f:id:gijin94yobu:20200516232455p:plain

書き込みが成功すると,下記のようになる.

f:id:gijin94yobu:20200516222732p:plain

サンプルプログラム

 基本的にはArduino IDEのBasicOTA.inoの内容.

 OTAで実行内容が変わっているかを確認するためにLEDの点灯を追加している.

ESP32でOTAによる書き換えをするプログラム

結果

以上の設定と手順で,OTAによるプログラム書き換えができた.

書き換わっているかどうかは,LEDの点灯間隔を変えて確認した.

ESP32をパソコンにUSBケーブルで接続したままでもOTAで書き換わっているはずだが,本当にOTAで書き換えているかが実感できないので,モバイルバッテリーでESP32を動かして確認してみた.

この状態で,PlatformIOで書き込むとOTAをしている感じが実感できる.

f:id:gijin94yobu:20200516222341j:plain

 

あとがき

Arduinoくらいしか触っていないと,シリアル書き込み以外でプログラムを書き込めることは結構新鮮である.OTAが活躍する事例がまだ思いつかないが,かっこいいのでいつかは応用したい.

参考

  • PlatformIO documentation Espressif 32

https://docs.platformio.org/en/latest/platforms/espressif32.html

  •   ESP32&Arduino 電子工作 プログラミング入門
ESP32&Arduino 電子工作 プログラミング入門

ESP32&Arduino 電子工作 プログラミング入門

  • 作者:藤本 壱
  • 発売日: 2020/04/15
  • メディア: 単行本(ソフトカバー)