②ESP8266(Arduino)に簡単なプログラムをアップする


#はじめに
この記事は、電子工作の基礎からESP8266というWifi機能を持ったArduino互換の端末を使って,取得したセンサなどの情報をM2Xという、TEST経由で受け取った情報をグラフ表示してくれるクラウドサービスにセンサ情報をアップするところまでをカバーした記事です。
全部で４つの記事から構成されています。
①から順番にご覧ください。

①かんたんな回路を作って電子工作の基本を習得する 
http://qiita.com/windows222/private/6f11904f30ff540dcc37
②ESP8266(Arduino)に簡単なプログラムをアップする （←本記事）
http://qiita.com/windows222/private/c60d086a5909d2bff39e
③ESP8266で人感センサ情報を取得する 
http://qiita.com/windows222/private/e6bcea0bef795c8cb30c
④ESP8266で取得したセンサ情報をM2xにアップロード 
http://qiita.com/windows222/private/9d77cc3fe0094b78a4db

---
#概要
ここでは、最初にArduinoの開発環境を準備します。
その後、簡単なプログラムを作成し、USBを経由してESP8266にプログラムを書き込みます。

#ESP8266とは
ESP8266とは、Arduinoと互換性があり、wifiの機能も兼ね備えたIoT界隈ではとても人気の高い端末です。とても安価で、800円前後で購入できます。ただし、そのままだと使えないので、プログラムの書き込みを行うにはusb接続コネクタなどをつなげてやる必要があります。これは意外と手間がかかるため、今回は彼らの部品があらかじめ実装されている、ランニングエレクトロニクス社の端末を使います。（3000円）

#環境のセットアップ
##Arduino開発環境のインストール
下記のサイトから、Arduinoの開発環境をダウンロードし、インストールを行います。
画面上のDownloadから、環境にあったソフトウエアをダウンロードし、インストールしてください（Mac、Windows両方対応）
 https://www.arduino.cc/en/Main/Software

##ESP8266開発ライブラリのダウンロード
開発環境のインストールが完了したら、下記の手順に従ってESP8266に必要なライブラリのダウンロードを行います。

**①Arduino開発環境を起動し、Preferencesを開く**
<img width="300" alt="862BDBF2-0BE8-4DFA-8C02-FEDD55F7DC22.png" src="https://qiita-image-store.s3.amazonaws.com/0/77722/c73a981f-4992-54de-9478-aaf5490412aa.png">



**②下記のURLを"追加ボードマネージャのURL"に貼り付ける。**
``http://arduino.esp8266.com/stable/package_esp8266com_index.json``
<img width="400" alt="862BDBF2-0BE8-4DFA-8C02-FEDD55F7DC22.png" src="https://qiita-image-store.s3.amazonaws.com/0/77722/ed777b73-1134-1097-0c61-85f27c41d6ae.png">


**③ダウンロードライブラリの検索、ダウンロード***
ツール＞ボード＞ボードマネージャを開き、ダウンロードライブラリを検索
<img width="300" alt="862BDBF2-0BE8-4DFA-8C02-FEDD55F7DC22.png" src="https://qiita-image-store.s3.amazonaws.com/0/77722/19bd795e-f371-6ef8-c712-b38788cf6100.png">


検索ウインドウにesp8266と検索し、右下に出ているインストールボタンをクリックする。
<img width="400" alt="862BDBF2-0BE8-4DFA-8C02-FEDD55F7DC22.png" src="https://qiita-image-store.s3.amazonaws.com/0/77722/2928b8bf-a1f8-cbdd-ebff-cbf9f469e671.png">
暫く待つと、ライブラリのダウンロード＆インストールが完了する。

###ボードの選択
ライブラリのインストールが完了したら、メニュー＞ツール＞ボードから、Generic ESP8266 Moduleを選択する。
<img width="300" alt="862BDBF2-0BE8-4DFA-8C02-FEDD55F7DC22.png" src="https://qiita-image-store.s3.amazonaws.com/0/77722/7742c6ca-f394-46f1-b621-451265635fb1.png">

###接続確認
ESP8266をパソコンに接続し、メニュー＞ツール＞シリアルポートを確認する。
COM3が表示されていれば、デバイスが正常に認識されているので、それを選択する。
<img width="300" alt="862BDBF2-0BE8-4DFA-8C02-FEDD55F7DC22.png" src="https://qiita-image-store.s3.amazonaws.com/0/77722/73073c11-dd3c-14ac-541f-9f188c11729a.png">


###（オプション）USBシリアル変換ドライバの手動インストール
PCがWindows Updateに接続できる環境の場合、この手順は必要ないが、会社PCなどで接続が制限されている場合、ESP8266が正しく認識されない場合がある。
その場合、下記の手順に従い、ドライバをインストールする。
**USBシリアル変換ドライバ**
http://www.ftdichip.com/Drivers/VCP.htm
<img width="500" alt="862BDBF2-0BE8-4DFA-8C02-FEDD55F7DC22.png" src="https://qiita-image-store.s3.amazonaws.com/0/77722/659857b6-e747-1298-513f-ed6a849908d1.png">


##動作確認
###超シンプルなプログラムのアップロード
下記のプログラムをコピー＆ペーストし、コンパイルを行う。その後、プログラムをESP8266に接続する。
（ここでは、ESP8266には何も接続しない）

###プログラムの選択
スケッチの例から、Wifiをスキャンするプログラムのサンプルを選択する。
<img width="300" alt="862BDBF2-0BE8-4DFA-8C02-FEDD55F7DC22.png" src="https://qiita-image-store.s3.amazonaws.com/0/77722/af187590-4a6e-08a4-b971-83a46056ad4c.png">

###プログラムのアップロード
**①ESP8266のスイッチ切り替え**
ESP8266をパソコンに接続し、スイッチをDL側に切替えてリセットボタンを押す。
作ったプログラムを動かしたい場合、スイッチをBoot側に切り替えて実行する。
（リセットボタンを押したときにスイッチがDL側になっているとプログラムが動作しないので注意！）
<img width="200" alt="862BDBF2-0BE8-4DFA-8C02-FEDD55F7DC22.png" src="https://qiita-image-store.s3.amazonaws.com/0/77722/414ac8ba-36be-af33-9bdd-e2ea67b6205c.png">
**②プログラムのアップロード**
上の方にある矢印ボタンを押し、プログラムをボードへ書き込む。
<img width="300" alt="862BDBF2-0BE8-4DFA-8C02-FEDD55F7DC22.png" src="https://qiita-image-store.s3.amazonaws.com/0/77722/f5bba704-99c5-e08c-a954-79886ce75a28.png">

**③完了確認**
プログラムの書き込みが完了すると、メッセージに”プログラムの書き込みが完了しました”と表示される。書き込み完了後、すぐにプログラムが起動するため、右上の”シリアルモニタ”を開いて、ボードから出力されるメッセージを確認する。
<img width="300" alt="862BDBF2-0BE8-4DFA-8C02-FEDD55F7DC22.png" src="https://qiita-image-store.s3.amazonaws.com/0/77722/522a3b3e-1107-0a3f-44bb-66dd2e5beafc.png">


###コンソール確認
プログラムが正常にどうさしていると、ESP8266が拾ったWifiの一覧情報をコンソールに出力します。
下記の様な文字列が出力され続けていれば成功です。

<img width="400" alt="C5200941-8CC1-4B8A-9CED-32EB6D64D368.png" src="https://qiita-image-store.s3.amazonaws.com/0/77722/2c5f043c-a401-aa8a-1516-9033d756aeef.png">
↑ウインドウの右下の115200 baudが、プログラムに定義されている通信速度とあっていないと文字化けしてしまう為、プログラム上（Serial.begin(115200)）で指定した数字と一致させてください。

#プログラムでLEDを点滅させる
次に、LEDを接続し、プログラムでそれを点滅させてみます。
###回路の作成
ブレッドボード上に、下記の回路を作成します。
<img width="500" alt="862BDBF2-0BE8-4DFA-8C02-FEDD55F7DC22.png" src="https://qiita-image-store.s3.amazonaws.com/0/77722/c4244d53-c1dd-bec1-158d-bcd22e83c664.png">

###プログラムの作成、書き込み
回路ができたら、下記のプログラムをESP8266に書き込みます。

```c:blink.ino
/**
 * 赤と緑のLEDを点滅させます。
 * 赤のLEDはON／OFFの２段階、
 * 緑のLEDは多段階で点滅します。
 */
 #define RED_LED 15
 #define GREEN_LED  12
// the setup function runs once when you press reset or power the board
void setup() {
 //シリアルポートを通信速度115200で開始
 Serial.begin(115200);
 //RED LED
  pinMode(15, OUTPUT);
  //GREEN LED
  pinMode(12, OUTPUT);
}

void loop() {
  Serial.println("start.");
  digitalWrite(RED_LED, HIGH);   //赤のLEDを点灯
  delay(500);           // 500ミリ秒停止
  digitalWrite(RED_LED, LOW);    //赤のLEDを消灯
  delay(500);              // 500ミリ秒停止

  //緑のLEDを点滅させる。
  blinkGreenLED();
}

/**
 * 緑のLEDを多段階で点滅させる
 */
void blinkGreenLED(){
  Serial.println("green LED");
   //kは点滅させる回数
  for(int k=0;k<2;k++){
    for(int i=0;i<=200;i++){
      analogWrite(12,i);
      delay(5); //5ミリ秒待つ
    }
     for(int i=200;i>=0;i--){
      analogWrite(12,i);
      delay(5);
    }
  }
}
```
###プログラムのポイント
実行後、プログラムは下記の順序で呼ばれる。
setup() -> loop() -> loop() -> loop() ...


###動作確認
接続したLEDが両方点滅すれば成功。

###応用編
・緑と赤のLEDの点滅の仕方を入れ替えてみましょう。
・点滅の速度をゆっくりにしたり、早くしてみたりしてみましょう。


次の記事：
③ESP8266で人感センサ情報を取得する 
http://qiita.com/windows222/private/e6bcea0bef795c8cb30c