Arduinoと無線LANで通信する(ESP8266 1)


Arduino+ESP8266モジュールでRaspberryとの無線通信に成功しましたので紹介します。
ESP8266にはいくつかモデルがありますが、今 回使用したのは通信専用モジュールのESP-05モデルです。
こちらこちらにモデルごとの機能の違 いが紹介されています。

なお、ESP-05は技術基準適合証明等のマーク(通称技適マーク)が交付されていませんので

あくまでも実験レベルと考えてください。
技適マークが交付されているのは2015年11月時点で、ESP-13(ESP-WROOM-02)のモデルだけです。

<余談>
ESP-13(ESP-WROOM-02)の技適が通りました。
ESP8266全モデルに適用してくれるとうれしいです。
</余談>

ESP8266 で良く使われるのは ESP-01 ですが、ESP-05 は通信専用のモジュールなので
自由にファームを書き換えることはできません。

まずは、CoolTerm+USB-TTLシリアル変換を使って初期設定を行います。
ESP8266は300mA必要です。
ものすごく供給電源にシビアです。少しでも電流が足りないと正しく動きません。

USB-TTLモジュールやUNOの3.3Vでは電流が不足して正しく動きません。

こ ちらに3.3Vの電源を安定して供給する方法がいくつか紹介されています。
私は以下の様にNANOの5Vをこちらで紹介してい る AMS1117レギュ レータ を使って3.3Vに変換して給電しています。
ただし、この場合でも100μF(程度)のバイパスコンデンサーは必須です。コンデンサーが無いと安定しません。
それでも時々動作が不安定になります。専用の電源を確保して供給するのが一番安定します。

なお、ESP-05は以下の様に5本のピンホールが有りますが、パーツ図のESP-05は4本しかピンがありませんでしたので
RSTピンは省略しています。






・RX(ESP8266)    -> TXD(USB-TTL)
・TX(ESP8266)    -> RXD(USB-TTL)
・VCC(ESP8266)   -> 3.3V(NANOの5Vからレギュレータ経由で3.3Vに変換して給電)
・GND(ESP8266)   -> GND(USB-TTL)

CoolTermを起動します。
BaudRateは115200(最近のモジュールの工場出荷時のデフォルト)


Terminal ModeはLine Modeにしておいたほうが楽です。



接続開始


以下の手順で初期設定を行います。

@AT+RST:モジュールリセット
AT+RST
OK

 ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x40100000, len 1396, room 16
tail 4
chksum 0x89
load 0x3ffe8000, len 776, room 4
tail 4
chksum 0xe8
load 0x3ffe8308, len 540, room 4
tail 8
chksum 0xc0
csum 0xc0

2nd boot version : 1.4(b1)
  SPI Speed      : 40MHz
  SPI Mode       : QIO
  SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000

AAT+GMR:バージョン表示
AT+GMR AT version:0.25.0.0(Jun  5 2015 16:27:16)
SDK version:1.1.1
Ai-Thinker Technology Co. Ltd.
Jun 23 2015 23:23:50

OK

BAT+CIPSTAMAC?:MACアドレス表示
AT+CIPSTAMAC? +CIPSTAMAC:"18:fe:34:db:08:d1"

OK

CAT+CMODE?:現在のWifiモード表示(初期値は2のStationMode)
AT+CWMODE? +CWMODE:2

OK

DAT+CWMODE=3:SoftAP+Station Modeへ変更
AT+CWMODE=3
OK

EAT+CWLAP:アクセスポイントの一覧を表示
AT+CWLAP +CWLAP:(3,"ap-wpsG-a8bf10",-38,"00:22:cf:a8:bf:10",1)
+CWLAP:(3,"inumber",-83,"34:12:98:08:48:18",1)
+CWLAP:(3,"Picking",-86,"34:12:98:08:4b:4a",1)
+CWLAP:(4,"0024A5B6C1E6",-72,"00:24:a5:b6:c1:e6",9)
+CWLAP:(3,"au_Wi-Fi",-90,"58:93:96:25:10:48",11)
+CWLAP:(4,"Wi2premium_club",-86,"58:93:96:a5:10:48",11)
+CWLAP:(0,"au_Wi-Fi2",-88,"58:93:96:e5:10:48",11)
+CWLAP:(4,"logitecuser",-52,"00:01:8e:58:b6:e2",13)
+CWLAP:(1,"logitecgameuser",-51,"00:e0:4c:81:96:c2",13)

OK

FAT+CWJAP="SSID","Password":アクセスポイントへ接続
AT+CWJAP="ap-wpsG-a8bf10","XXXXXXXXXX" WIFI CONNECTED
WIFI GOT IP

OK

GAT+CIPSTA?:IPアドレス表示
AT+CIPSTA? +CIPSTA:ip:"192.168.111.116"
+CIPSTA:gateway:"192.168.111.1"
+CIPSTA:netmask:"255.255.255.0"

OK

HAT+CWQAP:アクセスポイント切断
AT+CWQAP
OK
WIFI DISCONNECT

ArduinoとESP-05の間をシリアルで通信しますが、ハードウェアシリアルで接続すると、デバッグが何かと厄介です。
そこで、ESP-05とはソフトウェアシリアルで通信することにします。
ソフトウェアシリアルのボーレートは安全を見て4800Bpsに変更します。

IAT+UART_DEF:UARTのフレーミング(通信速度など)設定(頻繁にコマンドが変わります)
AT+UART_DEF=4800,8,1,0,0
OK

ESP8266の設定については、以下のページを大いに参考にさせていただきました。ありがとうございます。
ESP8266 (ESP-WROOM-02)を使う
ESP-WROOM-02の通信速度の設定
ESP-WROOM-02とArduino UNOでhttp通信

ATコマンドリファレンス(Version 0.30)は、こ ちらにありますが結構頻繁に更新されています。
最新版は「ESP8266 AT Instruction Set」で検索してください。

続く....