ESP-WROOM-02をATモードで使う方法・および周辺情報の解説
スイッチサイエンスも販売している、日本で利用できるESP-WROOM-02モジュールは、 上海のESPRESSIF社が開発したESP8266EXというコントローラに32Mbit(=4MByte)のSPIフラッシュメモリが搭載されたものです。 追記 現在は16Mbit(2MByte)に変更になっています。(2017/09/25)
ArduinoIDE以外の環境で開発する際は、ESPRESSIF社のドキュメントなどをよく参照する必要があります。 逆に言えば、ArduinoIDEでの開発は、あまり細かいところは気にせず使いはじめることができます。
以下の記事は、2016/09/04現在ものものです。最新版ではリンクやドキュメントが変更されている可能性があります。
資料
ESP-WROOM-02 Wi-Fiシールド
ESP-WROOM-02 Wi-FiシールドはWi-Fi通信機能のないArduinoボード(その他Arduinoピン互換のボード)にWi-Fi通信機能を付加するボードです。
Arduinoボードからシリアル通信でATコマンドを送信することでESP-WROOM-02 Wi-Fiシールドを制御します。
ESP-WROOM-02 Wi-Fiシールド上のスライドスイッチを切り替えることで、Arduinoとのシリアル通信をハードウェアシリアルで行うか、ソフトウェアシリアルで行うか選択することができます。
また、シリアル通信の電圧がJP2のジャンパソケットで切り替えられるようになっていますので、5V系・3.3V系どちらのArduinoボードとも接続可能です。
ATコマンドを使ってWiFIアクセスポイントにアクセスする
以下に、アクセスポイントに接続する再のATコマンドの利用例を示します。
また、実際に利用したコマンドの説明も軽く行います。
内容は、公式ドキュメントAT Instruction Set
のver 2.0.0に即しています。
AT+CWMODE_CUR=1
の送信- レスポンス:
OK
- この設定はフラッシュに書き込まれません。設定を保存したい場合は
AT+CWMODE_DEF
を使ってください。
- レスポンス:
AT+CWLAP
の送信- アクセス可能なアクセスポイントをリストアップします。
- レスポンス
+CWLAP:<ecn>, <ssid>, <rssi>, <mac>, <ch>, <freq offset>, <freq calibration>
- OK
- パラーメータの意味
- <ecn> : 認証方式
- 0 : OPEN
- 1 : WEP
- 2 : WPA_PSK
- 3 : WPA2_PSK
- 4 : WPA_WPA2_PSK
- 5 : WPA2_Enterprise (ATコマンドからでは接続できません)
- <ssid> : 文字列, アクセスポイントのSSID
- <rssi> : 信号強度
- <mac> : 文字列, アクセスポイントのMACアドレス
- <freq offset> : アクセスポイントの周波数オフセット(いわゆるチャンネル)
- <freq calibration> : 周波数オフセット用のキャリブレーション
- <ecn> : 認証方式
AT+CWDHCP_CUR=1,1
の送信- モジュールのモードおよびDHCPによるIPアドレス振り当てを有効にします。
- コマンド :
AT+CWDHCP_CUR=<mode>, <en>
- パラメーターの意味
- <mode>
- 0 : softAPモード
- 1 : クライアント(satation)モード
- 2 : 両方
- <en>
- 0 : DHCP無効
- 1 : DHCP有効
- <mode>
- レスポンス
- OK
- この設定はフラッシュに書き込まれません。設定を保存したい場合は
AT+CWDHCP_DEF
を使ってください。
AT+CWJAP_CUR="ssid","password"
の送信- 接続先アクセスポイントのSSIDとパスワードを設定し、接続します。
- コマンド :
AT+CWJAP_CUR=<ssid>, <pwd>[, <bssid>]
- パラメータの意味
- <ssid> : 文字列, AP’s アクセスポイントのSSID
- <pwd> : 文字列, 最大64byteのASCII
- [<bssid>] : 文字列, アクセスポイントのSSID, 幾つかのAPが同じSSDIの場合
- レスポンス
- OK
- レスポンスまでの間に以下のメッセージが流れます
- WIFI CONNECTED
- WIFI GOT IP
- この設定はフラッシュに書き込まれません。設定を保存したい場合は
AT+CWJAP_DEFF
を使ってください。
AT+CIPSTA_CUR?
の送信- ESP-WROOM-O2に割り当てられたIPアドレスを確認します。
- レスポンス(例)
+CIPSTA:ip:"192.168.11.27"
+CIPSTA:gateway:"192.168.11.1"
+CIPSTA:netmask:"255.255.255.0"
- OK
以上の流れを、例えばSSIDがmyAP、パスワードがmypasswordのアクセスポイントに対して接続する場合で示すと以下のようになります。
ready AT OK AT+CWMODE_CUR=1 OK AT+CWLAP +CWLAP:(3,"myAP",-37,"02:1a:11:f6:e2:68",11,26,0) OK AT+CWDHCP_CUR=1,1 OK AT+CWJAP_CUR="myAP","mypassword" WIFI CONNECTED WIFI GOT IP OK AT+CIPSTA_CUR? +CIPSTA_CUR:ip:"192.168.43.40" +CIPSTA_CUR:gateway:"192.168.43.1" +CIPSTA_CUR:netmask:"255.255.255.0" OK
最小限のコマンドは、
- AT+CWMODEでモードを変更する
- AT+CWJAPでアクセス先を指定する
の二段階です。
ATコマンドでIP通信ができることを確認する
せっかくなのでHTTPプロトコルにのっとってWEBページのデータを持ってこようと思います。今回はパソコンにpythonで簡易HTTPサーバーを立てて、そこにESP-WROOM-02でアクセスします。
パソコンに入っているPythonが2.7系であれば、pyhton -m SimpleHTTPServer
を利用しHTTPサーバーを立てます。3系や他の言語の場合、それに従ってください。
今回は、ポート8000、パソコンのローカルIPアドレスは192.168.0.9とします。また、シリアルモニタはArduinoIDE付属のものを利用しています。通信速度は115200bps、改行はCR+LF。
もし自分の管理外のサーバーに対してアクセスをする際は最大限の注意を払ってください。以下の情報を利用することで発生したいかなる損害等に対しても責任を負いません。
AT+CWMODE_CUR=1
を送信し、クライアントモードを有効にします。AT+CWJAP_DEF="ssid","pass"
を送信し、アクセスポイントにアクセスします。AT+CIPSTART="TCP","192.168.0.9",8000
を送信し、192.168.0.9:8000にTCP接続します。AT+CIPSEND=21
を送信し、送信するデータの準備に入ります。GET / HTTP/1.1
を送信- 空白のままEnterを押します。5.と合わせて送信データが合計18文字になるので、自動的に送信されます。
ここまでが正しく行われている場合、サーバー側に以下のデータが送られます。
GET / HTTP/1.1<CR><LF> <CR><LF>よって、サーバー側のアプリケーション(今回はpyhtonのSimpleHTTPServer)は所定の動作を行うはずです。今回は以下の様な応答がありました。
HTTP/1.0 200 OK Server: SimpleHTTP/0.6 Python/2.7.12 Date: Thu, 15 Sep 2016 08:16:14 GMT Content-type: text/html; charset=mbcs Content-Length: 3170 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html> <title>Directory listing for /</title> <body> <h2>Directory listing for /</h2> <hr> <ul> (中略) </ul> <hr> </body> </html> CLOSED簡素な通信内容ですが、TCP/IP関連の動作が確認できます。
ATモード用にFlashを書き直す
ArduinoIDEやLuaScprit用にESP-WROOM-02モージュールを設定すると、以降は基本的にその使い方をする他ありません。
ここでは、ESP-WROOM-02にATコマンド用のファームウエアを書き込む方法を解説します。
これにより、ATコマンド用ファームウェアのアップデートや、一旦Arduinoとして使ったモジュールのATコマンド用の変更ができます。
追記 現行のESP-WROOM-02ではSPI Flashの容量が2MByteになっています。以下の記述は記事執筆時点のものですので、2MByte版をお使いでファームウェアを書き換える際には各項の追記をご参照ください。(2017/09/25)
必要なもの
- ESP8266 NONOS SDK(ESPRESSIF社のESP8266EXリファレンスサイト参照)
- 記事作成時最新版はv2.0.0です
- ESP8266 Flash Download Tools(ESPRESSIF社のESP8266EXリファレンスサイト参照)
- 記事作成時最新版はv3.3.6dです
- FTDI USBシリアル変換アダプター
- USBケーブル(A-microBタイプ)
手順
- ESP8266 DOWNLOAD TOOLを開き、DonwloadPathConfigに書き込むbinファイルと書き込み先アドレスを指定してください。
ESP-WROOM-02には、
(NON OS SDKのディレクトリ)\bin\at\readme.txt
に記載されている設定の中の32Mbit-C1
の項目を利用します。 ※32Mbit
と32Mbit-C1
の違いについて:espressif BBS
追記 Flash 2MB版では16Mbit-C1
を選択し、アドレスもドキュメントを参照して合わせてください (2017/09/25)
\bin\boot_v1.6.bin
- 0x00000
\bin\at\1024*1024\user1.2048.new.5.bin
- 0x01000
\bin\esp_init_data_default.bin
- 0x3fc000
\bin\blank.bin
- 0xfe000
\bin\blank.bin
- 0x3fe000
- 左のチェックボックスをチェックし、パスとアドレスが緑になっていることを確認してください。
- SpiFlashConfigは、以下のように設定してください。
- CrystalFreq : 26M
- SPI SPEED : 40MHz
- SPI MODE : QIO
- FLASH SIZE : 32Mbit-C1 (Flash 2MB版では
16Mbit-C1
を選択してください)
- FTDI USBシリアル変換アダプターでPCとシリアル接続します。 ESP-WROOM-02 Wi-Fi シールドを使用している場合はJP1にピンソケットを取り付けると直接FTDI USBシリアル変換アダプターと接続が可能です。
START
を押し、書き込みを開始します。 当モジュールは書き込みの際は書き込みモードで起動しなければなりません。 IO0をLOWにしておくことで、書き込みモードで起動することができます。
ESP-WROOM-02 Wi-Fi シールドを使用している場合は, 基板上のFLASHボタンを押すことでIO0はLOWになります。 基板上のRESETボタンを押すことでモジュールが再起動しますので、FLASHボタンを押したままの状態でRESETボタンを押して放すと、 当モジュールは書き込みモードで起動します。後はSTARTを押して書き込みを開始します。
- 下部のプログレスバーがいっぱいになり、FINISHと緑色の画像が表示されれば書き込みは終了です。
- ArduinoIDEなどシリアルモニタから
AT
と送信しOK
と返答があれば書き込みは正常に行われています。- 改行コードは
CR*LF
、レートは115200bps
にしてください。
- 改行コードは