ESP-WROOM-02がArduinoで開発できとても便利ですが、今回Arduino CoreにOTA(Over The Air, Wifi経由書き込み)の機能が取り込まれました。スケッチを書き込む際にUSBケーブルを繋ぐ必要もなくなり、開発が更に便利になりそうです。
##環境のセットアップ
今回はMacを使いましたが、Windowsでも大した違いはないと思います。
Wifiモジュールのセットアップは大量に情報がありますが、今回の回路はこんな感じにしてみました。
秋月電子で買えるパーツでESP-WROOM-02のArduino開発環境セットアップ
Arduino IDEに導入するESP8266 Arduino Coreは、Stable ReleaseにOTA機能が取り込まれたVersion 2.0.0(11/30更新)以降を使用します。ESP8266をセットアップする際にこれ以前のバージョンが導入された場合はBoard Managerから更新できるようです。
また、Python2.7も必要です。3.5では動きません。
CoreとPythonを入れたらArduino IDEを再起動しておきましょう。
##OTA対応スケッチの準備
まず、OTAに対応したスケッチを通常のUART経由で書き込む必要があります。
Arduino IDEにCoreを導入すると、「スケッチの例」に「BasicOTA」というスケッチが追加されているはずです。スケッチの中に接続先のSSIDとパスワードを書き込んでおきます。
##OTAスケッチを書き込む
スケッチを書き換えたら、Wifiモジュールに書き込みます。
USBシリアルをPCに接続し、WifiモジュールをUART Download Modeで起動します。
ボードの設定はこんな感じ。
シリアルモニタを開き、UARTのボーレートを115200に設定してモニタは開いたままにしておきます。
Arduino IDEの書き込みボタンを押すとUART Downloadが開始されます。書き込みが完了すると自動でリブートがかかり、アクセスポイントへの接続がうまくいけばこのように表示されるはずです。
これでOTA対応のスケッチ書き込みは終了です。今後OTAでスケッチを書き込むにはBasicOTAのソースコードが最低限必要になるので、BasicOTAのソースを改変しながら必要なコードを書き加えていくことになります。
##OTAでスケッチを書き込んでみる
OTAでスケッチを書き込むには、まずRST SWを押してWifiモジュールをFlash Boot Modeで起動します。
Arduino IDEが起動されているPCとWifiモジュールが同じネットワーク上にいる場合、このように"Network Ports"が表示されるはずです。Wifiモジュールが見つからない場合はArduino IDEを開きなおしてみましょう。
Wifiモジュールが見つかったら、先ほどのBasicOTAスケッチにLチカを入れたコードをOTA経由で書き込んでみます。
#define ledPin 13
void setup() {
//----BasicOTAのコード---//
// ...
//---------------------//
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
}
void loop() {
ArduinoOTA.handle();
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(500);
}
ArduinoOTA.handle()はOTAを待ち受けるメソッドのようなので、消さずに残しておきます。
設定は以下のような感じで、WifiモジュールのIO13にLEDを繋いでおきましょう。
- Upload Using: "OTA"
- ポート: "esp8266 at ***"
この部分だけ変更します。
ここまできたら、Arduino IDEの書き込みボタンを押すとアップロードが始まります。
正常にアップロードが終わるとWifiモジュールが自動的に再起動し、アクセスポイントに接続されるとLEDが点滅するはずです。
スケッチにOTAの処理コードを含んでいる限り、これ以降のOTAは同様の手順で行えます。
##OTAの制約
ArduinoOTAでは、現在走っているスケッチに加えて新しいスケッチをロードするのでUART経由より余分な容量を必要とします。元々のドキュメントを詳しく読んでないのでどの程度必要なのかはわかりませんが。
また、今回のセットアップではセキュリティを一切考慮していません。機能としてはパスワードやアップロード元ホストの制限を設定することが可能なようです。
##参考
OTA Updates