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


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

Espruinoに接続してプログラムを実行

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

準備するもの

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

手順

USBドライバインストール

ここから対応するものを落としてきて入れる

配線の準備

  • ESP-WROOM-02のモジュールに、ピンヘッダをハンダ付け。

  • USBシリアル変換モジュールのジャンパピンを、3.3V側に移動。

配線

  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接続
    これで完了です!

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

家のWiFiに接続

USBでシリアル接続するのに、CoolTermというターミナルソフトを使用します。
Windowsなら、TeraTermが良さそうです。
CoolTermの設定はこちらが参考になりました!

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

接続確認

AT

「OK」と表示されれば、ESP-WROOM-02と接続OK!

WiFiモードを設定

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

AT+CWMODE=1

アクセスポイントに接続

AT+SWJAP="SSID","password"

「OK」が表示されたら、IPがどうなったか確認。

AT+CIFSR

IPとMacアドレスが表示されました!
繋がった!

dweet.io経由でHello World

dweet.ioという、IoT開発者向けのプラットフォームを利用します。

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

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に接続。

AT+CIPSTART="TCP","dweet.io",80

Enterを押すとOKが返ってきます。

CONNECT
OK

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

AT+CIPSEND=89

Enterを押すと

>

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

POST https://dweet.io/dweet/for/esptest_momoham_0811?val=HelloWorld!
Host: dweet.io

最後はEnterを2回入力してください。
成功すると、dweet.ioから返ってきたレスポンスが表示されます。

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ライトを光らせてみようと思います。