Espressif ESP8266とArduinoの組み合わせでOTAアップデートが使用出来ます。
オリジナルのドキュメントは
https://github.com/esp8266/Arduino/tree/master/doc/ota_updates
にありますが、使ってみた情報を書いておきます。
そもそも、Espressif ESP8266をArduino環境でなぜOTAアップデートするかですが、ESP8266のボード形態にもよりますがアップデートの際にPCと接続しにくいボードがほとんどであり直接接続しないアップデート方法はスマートで便利な方法だからなのです。
開発用途に向の NodeMCU development boards はUSB-シリアルインターフェースをボード上に持っていますが例外的な存在でしょう。
日本で使用可能なESP-WROOM-02 WiFi ModuleなどはUSB-シリアルのインターフェースは持ちませんので書き込みの際には書き込みツールを使うことになります。
比較的ピン数の少ないESP8266では書き込みに使用するシリアル用のピンも他の用途と兼用でありシリアル以外の機能を割り当てる場合も多々あると思います。組み上がっている物の配線を外しプログラムを書き込む作業はできれば避けたいものです。
そのような場合でも、WiFi経由でプログラムの書き込み、書き換えができるOTAアップデートでは物理接続をしないので書き換えは大変容易になります。
転送時間もシリアル経由より早いです。
若干の注意点として、OTAアップデートが出来るESP8266ボードと出来ないESP8266ボードがあります。
フラッシュメモリのサイズが1MB以上のものはOTAアップデートが使用出来ます。
ESP-WROOM-02 WiFi Moduleのフラッシュメモリのサイズは4MBでありOTAアップデートが使用出来ます。
OTAアップデートには3種類の方法が用意されています。
1.Arduino IDEでのアップデート
2.Web Browserでのアップデート
3.HTTP Serverでのアップデート
この中で、開発段階、小規模の場合は1.と2.、複数台以上の中規模運用は2.、大規模運用の場合は3.を選ぶことになると思います。
1.Arduino IDEでのアップデート
この方法では同一ネットワーク上にターゲットとArduino IDEが存在しなければなりません。
Arduino IDEは1.6.7以降が必要です。
Python 2.7のインストールが必須です。(バージョン3.5はサポートされていません)
サンプルコードは
ファイル > スケッチの例 > ArduinoOTA > BasicOTA.ino
にあります。
SSID、Password等はご自分の環境に合わせて書き換えてください。
このスケッチをESP8266へシリアル経由で書き込むと最初の準備が完了です。
ここまで設定をしてESP8266を立ち上げるとArduino IDEのツールメニュー以下シリアルポートに今回プログラムを書いたESP8266が出てくるはずです。
この方法のポイントはマルチキャストDNS(mDNS)使うところです。
少なくとも自分の開発には馴染みませんでした。
これ以降の開発はBasicOTA.inoの内容を含める形で進めます。(アップデートに使用するコードを残しておきます)
2.Web Browserでのアップデート
一番お勧めの方法です。
この方法では同一ネットワーク上にターゲットとブラウザが存在しなければなりません。
実質的にESP8266WebServer.hを追加すれば使えます。
サンプルコードは
ファイル > スケッチの例 > ESP8266WebServer > WebUpdate.ino
にあります。
SSID、Password等はご自分の環境に合わせて書き換えてください。
このサンプルでもESP8266mDNS.hをインクルードしていますが、IPアドレスを指定、もしくは特定できれば不要(インクルード不要)です。
生成されるバイナリは自分の開発環境のTempフォルダに出来ます。(Windows環境の場合)
正確な位置はコンパイル時のログに出ています。(Windows環境ではbuild~.tmpというフォルダです)
サンプルの場合、書き込んだESP8266のルート(例 192.168.0.100/)にブラウザでアクセスするとアップロード指定ができるページとなっているはずです。
先ほどのTempフォルダにある、スケッチ名.ino.bin を指定しアップロードすると書き換えが行われます。
その後、自動で再起動がかかり成功すれば新しいプログラムが実行されます。
3.HTTP Serverでのアップデート
この方法では同一ネットワーク上にアップデートサーバが無くてもHTTP通信可能であれば大丈夫です。(未検証)
サンプルコードはオリジナルドキュメント内にあります。
ESP8266側で定期的にアップデートチェックを行いサーバー側が必要に応じてアップデートファイルを返すという仕組みで動作します。
オリジナルドキュメントではサーバー側はWebサーバ+PHPで説明されています。
任意のタイミングでアップデートが行えない仕組みであり、開発時には使用しにくいでしょう。
大規模で使用する場合には便利な方法となるでしょう。
2.と共存する形を仕込んでおくと良いかもしれません。
OTAアップデートすべての方法で注意すべき事もあります。
プログラムが制御を失う状態(無限ループ等)に入るとOTAアップデートは出来なくなります。
ウォッチドッグタイマは有効にして自動復帰は仕込んでおいた方が後々のためになるでしょう。
各々の方法で仕掛けたアップデートプログラムを入れ忘れてOTAアップデートを行ってしまうとやはりその後OTAアップデートが出来なくなってしまいます。