ESP32 で Arduino を使わずに OTA する方法

Arduino for ESP32 を使えばネットワーク経由でファームの書き換えが行えますが,ESP-IDF を使って同じことを実現する方法を紹介します.

背景

無線 LAN 経由で ESP32 のファームを書き換えたくなったとき,Arduino for ESP32 なら簡単にできるものの,ESP-IDF のみだと簡単にできる定番のものがありません.

機能的には下記のものがやりたいことに最も近かったのですが,スクラッチでサーバが書かれているので,UI を工夫しようとしたときにちょと大変そう.

ESP-IDF OTA template app
https://github.com/yanbe/esp-idf-ota-template

そこで, esp_http_server を利用する形で書いてみることにしました.

OTA に必要な処理

ESP-IDF には OTA 用のライブラリが用意されているので,やることは簡単.基本的に次の処理を行えば OK です.

ネットワーク経由で書き換えを行う場合,ファームを小分けに受信しながら STEP 3. を繰り返すことになります.

コード

先ほどの内容を踏まえて,HTTP 経由で OTA できるようにするコードがこちら.

動かすには,下記のように http_ota_handler_installを呼び出してやります.すでに HTTP サーバを動かしている場合は,最後の一行を追加するだけです.

使い方

準備として,次の内容を Makefile に追記します.

その上で次のようにすると,OTA が始まります.(192.168.2.169 は ESP32 の IP アドレス)

実際に動かすと下のようになります.

快適です.