ESP8266をArduinoIDEからオンライン書き込みしてみた

ESP8266（esp-wroom-02）での作例が最近増えてきて参考サイトも増えてきて情報が増えて、なおかつスイッチサイエンスさんやランニングエレクトロニクスさんから開発ボードも出て簡単に開発できる環境が整ってきました。

今回は、ESP8266にオンライン書き込みをする方法を自分がはまったところも含め、解説していきます。

所々で使っているボードは私が個人的に作った開発ボードです。
# オンライン書き込みとは？
通常、ESP8266で書き込む際にはFTDIシリアル変換などを使って書き込みをしますが、オンライン書き込みではそれが必要ありません。
(左下にあるのがFTDIシリアル変換)
![IMG_20151103_085100-min.png](https://qiita-image-store.s3.amazonaws.com/0/97208/a89beafd-1996-bb02-d20e-b271e0d85838.png)

オンライン書き込みではwifiを経由して書き込みを行います。
なので、例えば作品の入り組んだところに組み込んでからでもプログラムの書き換えもできますし、わざわざ書き込みのために作品をケーブルでパソコンと接続する必要が無くなるのです。

#動作環境
windows10　python 2.7.6　
Arduino 1.6.5 ESP8266board version 1.6.5-947-g39819f の環境での動作を確認しています。
#オンライン書き込みをするための準備
**windows10**をベースに説明します。[11/2現在]
macはpython2.7.*がデフォルトで入ってるので準備は不要です。

1.コマンドプロントから"python"と入力した際にpython 2.7.*(見本は2.7.6)と表示された場合準備は不要です。
python3.5.0などが表示された場合はそのバージョンをアンインストールなどを試みてください。
もしくは、”'python'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。”と表示された場合は2番からの準備作業をしてください。![py4.png](https://qiita-image-store.s3.amazonaws.com/0/97208/9ebc1f9b-1b7b-ea7e-5b66-ae0e35ac4674.png)

2.[python](https://www.python.org/downloads/)をインストールします。赤色で囲われている方をダウンロード、インストールしてください。
**注意！version2.7.*でないと動作しません。**
自分は3.5.0をインストールしてはまったので特に注意です。![py1.png](https://qiita-image-store.s3.amazonaws.com/0/97208/577a9d98-016e-ba76-b4fa-6d5fe9225772.png)

3.インストール中に出る赤線の場所を覚えておいてください。
デフォルトで”C:\Python27”にできるはずです。
![py2.png](https://qiita-image-store.s3.amazonaws.com/0/97208/75c20c4f-9f22-22d7-5dc2-1314db852b05.png)

4.Pathに先ほどの座標(C:\Python27)を追加して保存してから再起動してください。
Pathの追加の参考サイト：[http://next.matrix.jp/config-path-win7.html](http://next.matrix.jp/config-path-win7.html)
![py3.png](https://qiita-image-store.s3.amazonaws.com/0/97208/511bdd79-9945-1cbf-0c3b-dc6be1e9b2ff.png)

5.1のコマンドプロントをもう一度試して、インストールが成功しているか確認してください。

#ArduinoIDEの準備
こちらを参考に準備してください。
[技適済み格安高性能Wi-FiモジュールESP8266をArduinoIDEを使ってIoT開発する為の環境準備を10分でやる方法](http://qiita.com/azusa9/items/264165005aefaa3e8d7d)
#ESP8266にプログラムを書こう！
ここまで準備お疲れ様です。
あと一息です！
1.まず、スケッチの例の中にあるESP8266mDNSの中のDNS_SD_Arduino_OTAをクリックしてください。![py6.png](https://qiita-image-store.s3.amazonaws.com/0/97208/6b3e05cf-d840-5c58-4089-6c60435a1d0b.png)

2.DNS_SD_Arduino_OTAのコードの内部にあるSSIDとPASSWORDを接続する無線AP(アクセスポイント)のものを入力してください。
（モバイルwifiなどでwifi内通信できないものでは成功しない可能性があります。）
（APに接続に行くので**別に**APを立てておいてください。）![py7.png](https://qiita-image-store.s3.amazonaws.com/0/97208/288291f5-dde5-dc93-162c-6a342e8a72da.png)

3.オンライン書き込みをしたいESP8266にサンプルプログラムをFTDIシリアル変換などでローカル書き込みします。(書き込み時にGPIO0,2,15のプルアップ、プルダウンをしてください。)
設定は下の図のようにしてください。同じになったらArduinoIDEの”マイコンボードに書き込む”をしてください。

|設定項目|設定値|
|-----------|------------|
| ボード      |         Generic ESP8266 Module|   
| FlashMode   |      qio | 
| FlashFrequency     |        40MHz |   
| Upload Using         |       Serial    |    
| CPU Frequency      |        80MHz  |    
| Flash Size   |     4M (3M SPIFFS) |  
| Upload Speed| 115200|
（接続の見本）
![IMG_20151103_085255-min.png](https://qiita-image-store.s3.amazonaws.com/0/97208/0148473f-3da0-560c-e010-9b1920fa064a.png)

このように書き込めるはず。
![ne1-min.png](https://qiita-image-store.s3.amazonaws.com/0/97208/f603fba7-12ab-5d17-89a0-ea4a739be23b.png)

書き込めるとシリアルモニターにIPアドレスがでるはずです。（もし出ない場合はリセットをすると出る場合があります。）
![ne2-min.png](https://qiita-image-store.s3.amazonaws.com/0/97208/952e7f13-7315-a841-a27b-d514efb065fb.png)


4.書き込みが完了したら、書き込みしたArduinoIDEとは別にもう一つArduinoIDEを起動してください。（起動をしないとオンライン書き込みができません）

5.もう一つのArduinoIDEのツール内のポートを確認するとNetwork portsが増えているはずです。(1分ほど待っても表示されない場合、ESP8266をリセットしてみてください)
**ESP8266と同じネットワーク上で作業すること**

![ne3-min.png](https://qiita-image-store.s3.amazonaws.com/0/97208/076062ff-2fe7-acb9-5990-c6236fec0b49.png)


6.Network Portsを選択して、設定項目を下の表と同じにしてからArduinoIDEの”マイコンボードに書き込む”をクリックするとオンライン書き込みできるようになるはずです！

|設定項目|設定値|
|-----------|------------|
| ボード      |         Generic ESP8266 Module|   
| FlashMode   |      qio | 
| FlashFrequency     |        40MHz |   
| Upload Using         |          OTA |    
| CPU Frequency      |        80MHz  |    
| Flash Size   |     4M (3M SPIFFS) |  
| Upload Speed| 115200|

書き込みが成功すると”Result：OK”と表示されます。ときどき失敗することもあるのでそのときはもう一度書き込みをチャレンジしてみてください。
![ne4-min.png](https://qiita-image-store.s3.amazonaws.com/0/97208/4afdef30-d88f-e600-953c-1ebdde6bab90.png)

書き込み中にシリアルモニターをみると書き込みをしているか確認することができます。
![ne5-min.png](https://qiita-image-store.s3.amazonaws.com/0/97208/e46e4de4-86ae-642e-80ac-5eef8365503f.png)


7.オンライン書き込みをしたら、そのプログラムが実行されます。お疲れ様でした。


OTAのプログラムは上書きされて消えてしまうので、書き込みたいプログラムにサンプルプログラムのDNS_SD_Arduino_OTAを組み込んでおくと繰り返しオンライン書き込みをすることができるようになります。



#応用
Webサイトからプログラムを書き込むことができたり、複数のESP8266に同じプログラムを流し込むのもできるでしょう！
#終わりに
ここまで読んでいただきありがとうございます。初投稿させていただきました。
一応ここに書いた情報はこちらの環境では動作しましたが、すべての環境で動作する保証はありません。コメントなどでさらにこうした方が良いなどあれば教えていただけるとありがたいです。
ESP8266はwifiが付いていることでいろいろなことができます、ぜひオンライン書き込みも活用してみてください。