cygwin上でArduinoOTA動作

161114a1ArduinoOTAというのは、OTA(Over The Air)無線経由でArduinoでコンパイルしたプログラムをターゲットに書き込む機能らしい。存在は、前から知っていたが、ROM容量を倍使うとか読んだことがあって、そうなると日本語フォントを使用するプログラムでは容量的に非常に苦しい。ということで、手を出さなかったのだが、今、作業しているプログラムは日本語無しでも行けそうなので、組み込んでみることにした。

公式のドキュメント(?)はここにある。サンプルプログラムを見ながら、OTA機能を組み込み、COMポート経由で書き込む。

さて、日ごろ私は、esp8266 のプログラム開発を cygwin + emacs +make で行っている。makefileはplerup/makeEspArduinoを使用している。以前は、別の物を使用していたが、macbook Airで開発を試みた時、こちらでうまくいったので、それ以来 cygwinでも使用している。ただ、プログラムの書き込みはArduino IDEを使用している。make uploadでも書き込みは可能なのだが、シリアルモニターを開け閉めしなければいけないのが面倒で、その手間が無いのでArduino IDEを使用している。 makeからは、 make ota とすると pythonスクリプトespota.pyが呼び出され、書き込みが行われるのだが、やってみるとうまくいかない。通信が途中で途切れているようだ。

espota.pyの使い方を調べてデバッグオプション(-d)を付けてみたり、ArduinoOTP.cppの中をいじってみたりしているうち、段々動作がわかってきた。 espota.pyでTCPポートをlisten開始後、UDPパケットでポート番号等をArduinoOTP側に知らせ、ArduinoOTPがTCPポートにアクセスするところで繋がらないことが判明。WireSharkまでインストールし、動作を確認しているうち、思いついたというか思い出した。Firewallのせい? 試しにFireWallを一時停止すると、OTPでの書き込みができた。

その後、-Pオプションでespota.pyのポートを固定し、firewallの設定で、そのポートを通過させることで、いつでもOTAが使えるようになった。

makeからotaでプログラムを書き込めると快適だ。makeはコンパイル・リンクの中間ファイルを残し、最小限のコンパイル・リンクしか行わないので、通常コンパイルはすぐ終わる。そのあとの書き込みも高速に終了するようになったので、プログラム修正から動作確認までが凄く早くなった。Arduino IDEだとuploadボタンを押すと毎回全部コンパイル・リンクするから書き込みが速くなっても全体としては大して早くならない。ついでにコンパイルエラーが凄く醜い。cygwin+emacsなら next-errorコマンド一発である。ということで emacs + make環境をお勧めします。

Leave a Reply

メールアドレスが公開されることはありません。