巷で話題の超小型 Wi-Fi モジュール ESP8266 で遊んでみる

(更新

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 コマンドの情報が錯綜している感じなので、私の作業内容を備忘録としてメモしておきます。

2015-05-09 11.36.20

まず最初にピン配置です。(ここのサイトを参考にしました。)

esp8266_pins

特にピンに公式な番号は付いていない(情報が見つからない)ようなので、仮に上のように番号を振ってみました。

電源と 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 版)などを繋いで制御できるでしょう。いちおう動作しましたので、今日はここまで。