ESP-WROOM-02からWiFi接続してIoTなHello World

電子工作知識ゼロのWeb系エンジニアがIoTに挑戦。
とりあえず、Espuruino（JavaScriptで動くマイコン）とESP WROOM-02（WiFiモジュール）を繋げて、外出先からセンサの情報を取得するようなことを目指しています。

[Espruinoに接続してプログラムを実行](http://qiita.com/momoham/items/7b957bba9fbbfb043237)

今回は、マイコンなしでインターネット接続して、プチIoTをしてみます。

##準備するもの
- ESP-WROOM-02ピッチ変換済みモジュール《シンプル版》
    - [スイッチサイエンス](https://www.switch-science.com/catalog/2341/)で買える
- USBシリアル変換モジュール：USB Serial FTDI(3.3v/5.0V切り替え機能付き)
- 10kΩの抵抗（1/2Wでも1/4Wでも）
- ブレッドボード
- ジャンパワイヤ（オス-オス)
- ブレッドボード用ジャンパワイヤ（オス-オス）
    - ↑なくてもいいけどあるとキレイに配線できる
- ピンヘッダ（オス-オス）
- USBケーブル(A-B)
- はんだごて

##手順
###USBドライバインストール
[ここ](http://www.ftdichip.com/Drivers/VCP.htm)から対応するものを落としてきて入れる

###配線の準備
- ESP-WROOM-02のモジュールに、ピンヘッダをハンダ付け。
![image6.JPG](https://qiita-image-store.s3.amazonaws.com/0/135266/5aa03344-850a-8993-9c07-ae1299965a5a.jpeg)

- USBシリアル変換モジュールのジャンパピンを、3.3V側に移動。
![image5.JPG](https://qiita-image-store.s3.amazonaws.com/0/135266/2f8ed68c-476f-8a1b-5c25-543e27f39c41.jpeg)


###配線
1. ESP-WROOM-02のピンヘッダを、ブレッドボードの適当なところに、ピンが縦に並ぶように挿す
2. USBシリアル変換モジュールとブレッドボードを、ジャンパワイヤで接続する
    - RX
        - ESP-WROOM-02のTXD(と並んだどこか)
    - TX
        - ESP-WROOM-02のTXD(と並んだどこか)
    - VCC
        - +列のどこか
    - GND
        - -列のどこか
　
3. ブレッドボード上で配線する
    - ESP-WROOM-02の3V3(と並んだどこか)と、+列
    - ESP-WROOM-02のGND(と並んだどこか)と、-列
    - ESP-WROOM-02のEN(と並んだどこか)と、+列を**10kΩ抵抗で**
    - ESP-WROOM-02のRST(と並んだどこか)と、+列を**10kΩ抵抗で**
    
4. USBシリアル変換モジュールとPCをUSB接続
これで完了です！
![image3.JPG](https://qiita-image-store.s3.amazonaws.com/0/135266/0d68a4eb-1171-bbf7-336e-edf920bfeadd.jpeg)
![image4.JPG](https://qiita-image-store.s3.amazonaws.com/0/135266/15d65ce5-a2f9-9953-ae80-c9fbfb061242.jpeg)

私はこうなりました。
10kΩ抵抗が手に入らなかったので、20kΩを並列に。ゴチャゴチャしちゃいましたね。
（物理の知識が完全に抜けた私には、並列にすると半分になる理屈がピンと来ないのですが、そういうものらしいです）
10kΩ抵抗があれば、↑で書いたように、+とモジュール側を抵抗で直接接続して良いはず。

###家のWiFiに接続
USBでシリアル接続するのに、CoolTermというターミナルソフトを使用します。
Windowsなら、TeraTermが良さそうです。
CoolTermの設定は[こちら](http://qiita.com/masato/items/a3b71f8a17b876be8f76)が参考になりました！

以降はコマンドで操作します。
各コマンドを入力したら、Enterで確定してください。
####接続確認

```shell-session
AT
```
「OK」と表示されれば、ESP-WROOM-02と接続OK！

####WiFiモードを設定
アクセスポイントに接続するステーションモードにしておきます。

```shell-session
AT+CWMODE=1
```

####アクセスポイントに接続

```shell-session
AT+SWJAP="SSID","password"
```
「OK」が表示されたら、IPがどうなったか確認。

```shell-session
AT+CIFSR
```
IPとMacアドレスが表示されました！
繋がった！

###dweet.io経由でHello World
[dweet.io](https://dweet.io)という、IoT開発者向けのプラットフォームを利用します。

まずは、画面表示する簡単なhtmlを準備。
thingNameのところはユニークになりそうな値を設定してください。
作成後はブラウザで開いておきます。

```html:esptest.html
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ESP TEST</title>
<script src="http://dweet.io/client/dweet.io.min.js"></script>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script>
  $(function(){
    var thingName = "esptest_momoham_0811";  //ユニークなthingNameを指定
    dweetio.listen_for(thingName, function(dweet) {
      $('#dweet_val').text(dweet.content.val);
    });
  });
</script>
</head>
<body>
  <div id="dweet_val"></div>
</body>
</html>
```

ESP WROOM-02をdweet.ioに接続。

```shell-session
AT+CIPSTART="TCP","dweet.io",80
```
Enterを押すとOKが返ってきます。

```shell-session
CONNECT
OK
```
次に、送信するデータのバイト数を指定。
テキストエディタなどに先に下に記載のPOSTコマンドを書いて、文字数をカウントしておくと良いです。
改行コードは¥r¥nが3つ入るので、6バイト足してください。

```shell-session
AT+CIPSEND=89
```
Enterを押すと

```shell-session
>
```
が表示され、リクエスト入力待ちの状態になります。
いよいよ、データを送信します。


```shell-session
POST https://dweet.io/dweet/for/esptest_momoham_0811?val=HelloWorld!
Host: dweet.io
```
最後はEnterを２回入力してください。
成功すると、dweet.ioから返ってきたレスポンスが表示されます。

```shell-session
Recv 85 bytes

SEND OK

+IPD,369:HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json
Content-Length: 213
Date: Thu, 11 Aug 2016 03:01:12 GMT
Connection: close

{"this":"succeeded","by":"dweeting","the":"dweet","with":{"thing":"esptest_momoham_0811","created":"2016-08-11T03:01:12.040Z","content":{"val":"HelloWorld!"},"transaction":"e236ddb6-c764-4899-b808-058815ac5eca"}}CLOSED
```

先ほどのhtmlにHelloWorld!が表示されました！

次回は、インターネット経由でLEDライトを光らせてみようと思います。