Universal ESPduino 使い方 準備編3 Wi-Fiに接続してOTAを行う

Universal ESPduino でOTAを使うために、 Pythonのインストールを行う手引きです。
前記事ではArduino IDE のボード設定を行い、シリアルでFWを書き込みました。
本記事ではWi-Fi経由でスケッチ(FW)を書き込みます。

ESP8266 ではWi-Fi を使ってネットワーク接続したPCからスケッチの書き込みが出来ます。
無線を使って空中を飛ばすため、 Over The Air と呼ばれ OTA と略されます。
USBシリアルアダプタを使わずに、ネットワークがあればどこからでもスケッチの書き換えが出来るため非常に便利です。また、速度も早い上に、ブートスイッチを切り替える必要もないため、シリアル接続でデバッグしながらOTAするのも便利です。

Pythonをインストールします。

Arduino IDE を使ってOTAを動かすのに Python 2.x 系が裏で使われます。
そのため、以下のページからPython 2.x (執筆時点では2.7.12) をダウンロードしてインストールします。

https://www.python.org/downloads/

インストール時にパスが通らない設定がデフォルトになっているので、 [Add python.exe to Path] を有効にして、パスが通るようにしてください。

install

インストールが完了したらWindows を再起動してください。

Windowsを再起動しろというアラートが出なかったとしても以下のようなパスが通らないエラーが発生します。

Arduino:1.6.12 (Windows 7), ボード:”Generic ESP8266 Module, 80 MHz, 40MHz, DIO, 115200, 4M (3M SPIFFS), ck, Disabled, None”
最大1,044,464バイトのフラッシュメモリのうち、スケッチが243,583バイト(23%)を使っています。
最大81,920バイトのRAMのうち、グローバル変数が33,132バイト(40%)を使っていて、ローカル変数で48,788バイト使うことができます。
java.io.IOException: Cannot run program “python.exe”: CreateProcess error=2, 指定されたファイルが見つかりません。
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at processing.app.helpers.ProcessUtils.exec(ProcessUtils.java:26)
at cc.arduino.packages.Uploader.executeUploadCommand(Uploader.java:129)
at cc.arduino.packages.uploaders.GenericNetworkUploader.uploadUsingPreferences(GenericNetworkUploader.java:97)
at cc.arduino.UploaderUtils.upload(UploaderUtils.java:78)
at processing.app.SketchController.upload(SketchController.java:707)
at processing.app.SketchController.exportApplet(SketchController.java:680)
at processing.app.Editor$DefaultExportHandler.run(Editor.java:2176)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: CreateProcess error=2, 指定されたファイルが見つかりません。
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:386)
at java.lang.ProcessImpl.start(ProcessImpl.java:137)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
… 8 more
スケッチの書き込み中にエラーが発生しました

これでArduino IDE側はOTAの環境が整いました。

OTA対応のスケッチを書き込む

OTAに対応するには ESP8266側がOTAに対応したプログラムになっている必要があります。
また、Wi-Fiに接続できるようにSSIDとパスワードが正しく入力されていて、接続出来ること、
Arduino IDE 側からOTA要求があった時に ArduinoOTA.handle() が呼ばれている事が必要です。

まずは、ESP8266用のサンプルスケッチを使って機能を確かめてみます。

[ファイル] > [スケッチの例] > カスタムライブラリのスケッチ例 [Arduino OTA] > [Basic OTA] を選択し、開きます。

ota

 

Basic OTA のスケッチを別名で保存してから、 以下の図の赤枠の中の ssid と password の “………..” の中を自分のPCが接続しているネットワークの Wi-Fi の SSID 及び パスワードを入力します。

ota1入力し終わったら、Universal ESPduino のDIPスイッチの1, 2, 3, 4 をそれぞれ ON, ON, OFF, ON にセットして、USBシリアルアダプタを接続します。

USBシリアルアダプタは電圧が3.3Vになっていることを必ず確認した後で接続してください。高電圧で壊れる可能性があります。

その後、シリアルポートを選択して(下図では “COM11” ) 書き込みボタンを押して下さい。
※この時点ではOTA書き込みの部分は見えない

uplo

 

OTA対応ファームウェアが書き込み出来たら、いったんUniversal ESPduino から USBシリアルアダプタを取り外し、DIPスイッチの 1, 2, 3, 4 をそれぞれ ON, OFF, ON, ON に切り替えてから USBシリアルアダプタを再度接続してください。

そのままArduino IDE のシリアルモニタを開いて見ると、SSIDとパスワードが正しく設定されていれば、 Booting  の文字の後、 Ready , IP address: xxx.xxx.xxx.xxx が表示されるはずです。

ping にも応答しますので、 ping を飛ばして確認しても良いでしょう。

問題なくOTA対応スケッチが起動し、ネットワークに繋がったら、 Arduino IDEを再起動して シリアルポートを確認すると、 上図のように ネットワークポートとして ESP8266 のMACアドレスの下6桁とIPアドレスが表示されるはずです。

次からはシリアルポートの代わりに、このネットワークポートを選択してOTAにてスケッチの書き込みが出来ます。

確認のために、 Universal ESPduino の16と書かれたポートにLEDのカソード(-側)を接続し、LEDのアノード(+側)を抵抗(330Ω)を介して 3.3Vに接続してLチカをしてみます。

void loop() {
   pinMode(16, OUTPUT);
   digitalWrite(16, LOW);
   delay(1000);
   digitalWrite(16, HIGH);
   delay(1000);
   ArduinoOTA.handle();
}

このように書き換えて、スケッチの書き込みを行ってみて下さい。

問題がなければDIPスイッチの切り替えも不要で、自動的に再起動がかかり、OTAにてファームウェアが書き込まれるはずです。

このスケッチではまず、Wi-Fiの接続を試みて、接続が成功しない場合は再起動するようになっています。
Wi-Fi の接続が成功したら LEDが点滅し始めます。
このスケッチでは、ArduinoOTA.handle() が呼ばれるのが2秒に1回になります。
タイミングによってOTAに時間がかかったり失敗することもあるので、ArduinoOTA.handle() を各所で呼ぶか、プログラムが止まらないようにしましょう。
何処かで無限ループにとらわれてしまったりすると、OTA書き込み出来なくなります。
その際はUSBシリアルアダプタを使って書き込みを行います。

また、シリアルポートでOTAが選択されていると、シリアルモニタが動きません。

下図のように、”コンソールにアクセスするために、マイコンボードのパスワードを入力してください。”と出ますが、これは Arduino Yun用のプログラムで、ESP8266 (パッケージバージョン 2.3.0)では動きません。
コミュニティサイトでは将来的にサポートしたいと書いてあったので、それまではTeraTerm等を使用しましょう。

console

“Universal ESPduino 使い方 準備編3 Wi-Fiに接続してOTAを行う” への1件の返信

コメントを残す