Over The Air で (すなわち Wifi 経由で)、ファームウェア書きかえをするやつ。
コード
https://github.com/esp8266/Arduino/blob/master/libraries/ArduinoOTA/examples/BasicOTA/BasicOTA.ino
これの通りにすればコード的にはとりあえずうまくいく。
platform.ini
board は esp12e にしとかないとだめ。generic と書いてあるからといって、esp01 とか esp01_1m とかは flash のサイズが小さいので OTA_BEGIN_ERROR と言われる。
OTA の場合使える容量は半分以下になる。というのも、既存領域の余った部分にとりあえず書くからっぽい。
OTA
まずアドレスを mDNS からひいてくる (シリアルに表示させてもいいけど)
$ dns-sd -B _arduino._tcp Browsing for _arduino._tcp DATE: ---Wed 23 Dec 2015--- 17:49:14.912 ...STARTING... Timestamp A/R Flags if Domain Service Type Instance Name 17:49:14.913 Add 2 4 local. _arduino._tcp. esp8266-ee8488 $ dns-sd -G v4 esp8266-ee8488.local DATE: ---Wed 23 Dec 2015--- 17:48:48.955 ...STARTING... Timestamp A/R Flags if Hostname Address TTL 17:48:48.958 Add 2 4 esp8266-ee8488.local. 192.168.0.11 120
platform.ini の port に、この ip address を書いておく。これだけで自動的に OTA 経由と判別して書きこもうとする。
書きこみ時間
222K のbinファイル書きこみに4秒ぐらい。
$ ls -altrh .pioenvs/esp12e/firmware.bin -rw-r--r--@ 1 cho45 staff 222K 12 23 21:05 .pioenvs/esp12e/firmware.bin $ time "/Users/cho45/.platformio/packages/framework-arduinoespressif/tools/espota.py" --debug --progress -i 192.168.0.11 -f .pioenvs/esp12e/firmware.bin 18:55:58 [DEBUG]: Options: {'esp_ip': '192.168.0.11', 'image': '.pioenvs/esp12e/firmware.bin', 'auth': '', 'esp_port': 8266, 'spiffs': False, 'debug': True, 'progress': True} 18:55:58 [INFO]: Starting on 0.0.0.0:24984 18:55:58 [INFO]: Upload size: 227280 18:55:58 [INFO]: Sending invitation to: 192.168.0.11 18:55:58 [INFO]: Waiting for device... Uploading: [============================================================] 100% Done... 18:56:02 [INFO]: Waiting for result... 18:56:02 [INFO]: Result: OK "/Users/cho45/.platformio/packages/framework-arduinoespressif/tools/espota.py 0.06s user 0.05s system 2% cpu 4.417 total
その他
UART Download で書きこんだ直後の起動中に OTA 書きこみをした場合、ESP.restart() が失敗するっぽい。UART Download したあとは、一旦 reset してから OTA すればいいっぽい。