Following the ESP8266 community, I have evaluated the small footprint Wi-Fi module too.
P.S. I have reported a prototyping which runs ESP8266 with one CR2032 coin cell on Sep. 17, 2016.
今日は仕事のことは忘れて(Wi-Fi も業務分野ではありますが)、巷で話題の小型 Wi-Fi モジュール ESP8266 で遊んでみました。まだファームウェアのバージョンが「生きて」いるらしく、AT コマンドの情報が錯綜している感じなので、私の作業内容を備忘録としてメモしておきます。
まず最初にピン配置です。(ここのサイトを参考にしました。)
特にピンに公式な番号は付いていない(情報が見つからない)ようなので、仮に上のように番号を振ってみました。
電源と UART の接続
以下のように接続します。
- ピン 1 : UTXD。これを、3.3V レベルの UART の RXD に繋ぎます。私は TTL-232R-RPi という Raspberry Pi 用のケーブルを流用しました。このケーブルだと、黄色のワイヤに該当します。
- ピン 2: CH_PD。私の持っている版では、このピンを VCC に繋がないと起動しませんでした。
- ピン 4: VCC = 3.3V
- ピン 5: URXD。これを、3.3V レベルの UART の TXD に繋ぎます。TTL-232R-RPi だとオレンジのワイヤに該当します。
- ピン 8: GND
なお、データシートを見ると無線送信時に数百ミリアンペア流れるそうなので、CR2032 のようなボタン電池ではピーク電流に耐えられず、動作しないと思います。対策として低 ESR で大容量のコンデンサを並列に繋ぐ方法が考えられますが、まだ未評価です。私はとりあえず、ズル(?)をして実験用電源装置を使いました。
後記(2016/9/17): コイン電池 CR2032 ひとつで ESP8266 を動かす試作をしてみました。
起動
電源を投入すると赤い LED が常時点灯し、青色の LED が一瞬チカチカします。青色 LED が点滅しない場合、上記 CH_PD ピンを VCC にプルアップしているかどうか確認してください。
コマンド操作
コマンドについても上記ウェブサイトが参考になりますが、以下に実例を示しておきます。
まず、シリアルターミナルソフトを起動したら、ビットレートを 115200bps に設定します。ただし、これもボードの版により異なることがあるそうなので、9600, 57600, 115200 等を試してみてください。
そして AT と入力してリターンキーを押すと、OK というプロンプトが返ると思います。さらに AT+RST と入力してリターンキーを押すと(以下リターンキーは省略)、次のような起動メッセージが出ます。なお、「AT+RST」ですが文字通りです。プラス文字も含みます。これも以下同様です。
ets Jan 8 2013,rst cause:4, boot mode:(3,0) wdt reset load 0x40100000, len 816, room 16 tail 0 chksum 0x8d load 0x3ffe8000, len 788, room 8 tail 12 chksum 0xcf ho 0 tail 12 room 4 load 0x3ffe8314, len 288, room 12 tail 4 chksum 0xcf csum 0xcf 2nd boot version : 1.2 SPI Speed : 40MHz SPI Mode : QIO SPI Flash Size : 4Mbit jump to run user1 r...Ñ Ai-Thinker Technology Co. Ltd. invalid
ちょっと文字が化けていたり混乱がありますが、ファームウェアのバージョンが古いのかも知れません。
なお、コマンド操作についてはこのサイトが参考になります。
Wi-Fi クライアントとしての設定
ここでは Wi-Fi クライアントに設定してみます。まず、AT+CWMODE=1 とコマンドします。これにより、Wi-Fi の station (クライアント)になります。次に、接続したい Wi-Fi アクセスポイント(AP)を用意します。ここでは SSID を foo、パスワードを bar としますと、次のようにコマンドします。なお、ネットの中に DHCP サーバーがあったほうが良いかも知れません。(ない場合は未検証。)
AT+CWJAP="foo","bar"
私の場合、ダブルクオート “” で囲まないとエラーになりました。
少し時間がかかりますが、うまく AP に接続できると OK プロンプトが返ります。そうしたら、AT+CIFSR コマンドを実行します。すると、DHCP サーバーから割り当てられた IP アドレスが表示されるはずです。ここまでできたら、Wi-Fi AP に正しく接続できています。
実際に HTTP プロトコルを投げてみる
実際に何かアプリを書こうとした場合、おそらく HTTP の GET メソッドを使うことになりそうですので、それを試してみました。いろいろ方法があるようですが、以下は unvarnished transmission モードというものを使う例です。ここでは、手元に 10.0.0.1 という HTTP サーバーが標準ポート 80 で動いているとしましょう。
まず、multiple connection モードをオフにしておきます。
AT+CIPMUX=0
続けて、サーバーに TCP コネクションを張ります。
AT+CIPSTART="TCP","10.0.0.1",80
すると、CONNECT と OK というプロンプトが返ります。そうしたら、
AT+CIPSEND
とコマンドします。OK いう文字と「>」(不等号)のプロンプトが表示されますので、GET メソッドを発行してみます。もちろんここでも改行が必要です。
GET /
すると、サーバーの設定にもよりますが、例えば次のように表示されます。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>なんちゃら</title> </head><body> かんちゃら </body></html> CLOSED
ここまで表示されれば、HTTP サーバーと正しく通信できています。
なお、unvarnished transmission モードから抜ける方法ですが、エスケープシーケンス +++(プラス文字を 3つ)送ります。ただし、どうも連続して送らないと(連打しないと)ダメのようなので、何かテキストエディタで +++ という文字を入力しておき、それをシリアルターミナルソフトにコピペすると良いでしょう。+++ を送ればコマンドモードに戻っていますので、例えば AT と叩いてリターンキーを押せば、OK というプロンプトが返ってきます。
ここまでできれば、あとは適当なマイコン(Arduino 3.3V 版)などを繋いで制御できるでしょう。いちおう動作しましたので、今日はここまで。