ESP-WROOM-02 ✕ myThings = ?


ESP-WROOM-02って何?

サイズも小さく、Wifi通信ができて、Arduinoのプログラムも書き込めるというもジールです。しかも、1個¥950とかなりお買い得です。

今回は、

ESP-WROOM02

WiFi-UARTモジュール ブレークアウトボード実装済み [BB-ESP-WROOM02]

これを購入しました。

ESP-WROOM-02の準備

決死のハンダ付け

これだけでは使えません。
ブレッドボードで使用するためには、ビンヘッダをハンダ付けする必要があります。

必要なもの

  • ピンヘッダ 2.54mmピッチ
  • ピンヘッダ 2mmピッチ
  • ジャンパーピン 2mmピッチ ✕ 4個
  • スイッチ(リセットスイッチ用) ✕ 1個
  • ハンダの技術

ハンダ付け完了
30分奮闘の結果、みごとにガッタガタ・・・

ゆがんでしまった時の修復方法(テクニック)がわからないので、、、とりあえずこのままいきます。

ブードモード

ESP-WROOM-02にはブードモードが2種類あります

モード GPIO15 GPIO2 GPIO0
UART Download Mode(書き込みモード) LOW HIGH LOW
Flash Boot Mode(実行モード) LOW HIGH HIGH

目的のモードに合わせて、2mmピッチのジャンパーピンで接続して下さい。

PCとの接続

Arduinoのプログラムを書き込めるとはいえど、microUSBなどの端子はないので、UART通信で接続しないといけません。たまたまショップで見つけたUSB-シリアル変換モジュールで接続します。

小型USB-シリアル変換モジュール

配線はこんな感じになりました。

PCとの接続確認

PCとESP-WROOM-02の通信テストを行います

小型USB-シリアル変換モジュールのデバイスドライバはProlific社よりダウンロードしてインストールしておきます。

小型USB-シリアル変換モジュールをPCに挿入した状態で、アプリケーション>ユーティリティ>システム情報.app を起動して、ハードウェア>USBをクリックします。
一覧に「USB-Serial Controller」が表示されていたら正常に認識されています。

ターミナルから以下のコマンドを実行します。
ls /dev/tty.usbserial*
/dev/tty.usbserial が見えたらOKです。

認識されない時は何度も何度も抜き差しを繰り返してみてください

動作確認

ArduinoIDEからシリアルモニタを起動します。

改行を「CRおよびLF」、通信速度115200bpsに設定し、入力エリアに「AT」と入力しENTERキーを押すと、図のような応答が返ります。

つぎは、バージョン情報を見てみましょう。
「AT+GMR」と入力して、ENTERを押します。

つぎは、近くのアクセスポイントの一覧を見てみます。
「AT+CWLAP」と入力して、ENTERを押します。おー。リストが返ってきました。

「ERROR」が返ってくる場合は、WiFiモードを確認してみてください。
ESP-WROOM-02には、3つのWiFiモードがあります。

マイクロテクニカのサイトより

本モジュールは、周囲のWi-Fiアクセスポイントに接続するステーションモードと、本モジュールがアクセスポイントとなって他のデバイスを接続させるソフトAPモードを搭載しています。これらのモードは単独で動作させることも、両方どうささせることも可能です。DHCPサーバー搭載ですのでソフトAPモードに接続されたデバイスには自動的にIPアドレスが割り振られます。

「AT+CWMODE?」と入力して、Wifiモードを確認してみてください。

Wifiモード 説明
Station mode 1 周囲のWi-Fiアクセスポイントに接続する
softAP mode 2 本モジュールがアクセスポイントとなって他のデバイスを接続させる
AP + Station mode 3 AP + Station モード

wifiモードを設定するときは、「AT+CWMODE=値」と送信します。

アクセスポイントへの接続

コマンド 説明
AT+CWJAP_CUR=<ssid>,<pwd>[,<bssid>] アクセスポイントの設定。Flashに保存されません
AT+CWJAP_DEF=<ssid>,<pwd>[,<bssid>] アクセスポイントの設定。Flashに保存されます

AT+CWJAPコマンドは非推奨のようです。

IPが取得出来ているか確認してみましょう

コマンド 説明
AT+CIPSTA_CUR? IPの情報を表示します。
AT+CIPSTA_CUR=[,,] 静的IPを設定します。Flashに保存されません
AT+CIPSTA_CUR? Flashに保存されているIPの情報を表示します。
AT+CIPSTA_CUR=[,,] 静的IPを設定します。Flashに保存されます

wifiに接続できているかPINGしてみます。

繋がった。

ESP-WROOM-02 プログラム

やっと使える準備ができたので、つぎはArduinoIDEからプログラムを作成し動かしてみたいと思います。
今回は単純に、ESP-WROOM-02をHTTPクライアントにし、APIにアクセスしてデータ取得すろところを試みたいと思います。

ArduinoIDEの準備

ESP-WROOM-02にプログラムを転送するには、マイコンボード にESP8266を追加しなければいけません。

環境設定

まず、ArduinoIDEの環境設定(Arduino>Preferences…)を開き、「Additional Boards Manager URLsの欄に、以下のURLを登録します。

マイコンボードの追加

ツール>マイコンボード>ボードマネージャー を起動します
ESP8226 CommunityをクリックするとInstallボタンがでてくるので押します。

インストールが終わって、再び、ツール>マイコンボード>ボードマネージャー を開くと「ESP8266 Modules」が追加されています。その中から「Generic ESP8266 Module」を選択します。

プログラムの書き込み

早速ハマる

ESP-WROOM-02をクライアントにしたかったので、ファイル>スケッチの例>ESP8266WiFi>WiFiClientの例をロードし、SSIDなどを環境に合わせて変更して、「マイコンボードに書き込む」をクリックします。
すると・・・

error: failed reading byte
warning: espcomm_send_command: cant receive slip payload data
warning: espcomm_send_command(FLASH_DOWNLOAD_BEGIN) failed

なんしかエラー。

先人の方々のページを探し、こちらのブログが大変参考になりました。
http://qiita.com/ksyundo/items/2ea2e846463aba004534
http://hpclab.blogspot.jp/2015/06/esp8266-arduino-ide-on-mac-os-x.html

ポイント
「Step 3: Modify platform.txt file」 Change it like this wayの部分は、esptool.pyのバージョンによってパラメータの指定方法が異なるようなので、注意して下さい。
今回はこのように変更しました。

#tools.espota.upload.pattern="{cmd}" "{path}/espota.py" -i "{serial.port}" -p 8266 -f "{build.path}/{build.project_name}.bin"
tools.esptool.upload.pattern="/usr/local/bin/esptool.py" -p "{serial.port}" write_flash 0x00000 "{build.path}/{build.project_name}.bin"

書き込み

再び書き込みを行うと・・・

最大499,696バイトのフラッシュメモリのうち、スケッチが226,362バイト(45%)を使っています。
最大81,920バイトのRAMのうち、グローバル変数が31,749バイト(38%)を使っていて、ローカル変数で50,171バイト使うことができます。
esptool.py v1.0.2-dev
Connecting...
Running Cesanta flasher stub...
Flash params set to 0x0000
Writing 233472 @ 0x0... 0 (0 %)1024 (0 %)2048 (0 %)3072 (1 %)4096 ・・・省略・・・ (99 %)233472 (100 %)

Wrote 233472 bytes at 0x0 in 20.6 seconds (90.9 kbit/s)...
Leaving...

USBシリアル変換モジュールも煌々と輝き出しました

プログラムの実行確認

書き込んだプログラムが正しく動いているかどうかを確認します。
AWSを使って、ダミーのJSONを返すAPIを作っておきます。

ダミーJSON
{
    "foo": "esp8266",
    "baz": [
        1,
        50,
        219
    ],
    "empty": null
}

ジャンパーピンを「Flash Boot Mode(実行モード)」に差し替えて、電源を投入します。
すると

やりました!!

まとめ

今回は、ESP-WROOM-02の準備から、Arduinoとしてプログラムを実行するまでを試してみました。一番ハマったところはプログラムの書き込みのところでした、
もっと手軽に試してみたい人は
PIC32MX534F064H搭載 PIC CLICKERベースボード [CLICK-32MX]
素敵なボードも購入できますので、こちらでも試してみてはいかがでしょうか。
次回は、myThingsのIDCFチャンネルとの連携の仕方などを試してみます。