這是我今年四月以 $180 向露天賣家
XLAN 買的超小型 WiFi 模組 (現已降價為 $145), 採用上海
樂鑫科技 的 ESP8266 晶片, 板子型式是 ESP-01, 這是 Arduino 最經濟的 WiFi 方案, 因為目前買一塊內建 WiFi 的 Arduino Yun 至少都要 2200 元以上. 此款板子有拉出 ESP8260 的兩個 GPIO 埠, 對於只需要兩個輸出入埠以內的應用而言, 可以改燒錄 NodeMCU 韌體, 直接將 ESP-01 卡當作 MCU+WiFi 用, 採用 Lua 作為程式語言, 在簡單應用可取代 Arduino.
關於 ESP8266 與 NodeMCU 簡介參考 :
#
ESP8266 WiFi 模組
#
NodeMCU 物聯網開發平台
#
5美元的WiFi微控器ESP8266已可與Arduino相容
ESP8266 晶片實作 LWIP 的精簡型 TCP/IP 協定堆疊, 成本低效能高, 具有極佳競爭力. 如果是採用 TI 的 CC3000 構建的 WiFi 模組, 大約要 700 元以上 (CC3000 晶片就要 500 元左右) :
#
露天 : CC3000 WiFi IC 晶片 W10 $540
#
露天 : CC3000 Wifi Module for arduino (BB-CC3K) $695
#
CC3000 WiFi Shield for Arduino R3 帶SD卡座 支持 MEGA2560 $950
而採用 W5100 的 WiFi 模組則比 CC3000 便宜些 :
#
<微控科技> W5100 WIZnet 網路晶片 Arduino 8051 AVR ARM PIC 均可用 $185
#
2013最新版 Arduino Ethernet W5100 網路擴展板 板載mini SD 支持Mega328 $225
#
【方塊奇品】新款Arduino Ethernet Shield W5100 R3 附參考資料 網路擴展板 板載TF $380
#
W5100乙太網模塊 網絡模塊紅板 W5100乙太網模塊 電子積木 網絡 W42 (小板) $400
但是論價格, 論體積, CC3000 與 W5100 兩個都不是 ESP8266 的對手, 目前較便宜的 ESP-01 板子如下 :
#
esp8266 esp-01 (含稅) $90
#
ESP8266 ESP-01 串口 WIFI 無線模組 WIFI $145
#
blkbox.me嚴選 ESP8266 大陸製ESP-01 Wifi 無線模組 arduino可用 $150
#
《iCshop2》ESP8266 ESP-01 串口WIFI 無線模組 (陶瓷天線) $165
#
blkbox.me原裝㊣品 虎紋風格 ESP8266 Wifi模組 板載8Mb FLASH (BB-E01) $185
ESP8266 可規劃作為 AP, STA, 或者是 AP+STA 雙模.
AP 模式 : Access Point 模式, 即無線基地台模式, 接受其他 WiFi 終端連入
STA 模式 : Station 模式, 即無線網卡模式, 可連接到 AP, 不接受連入
SSID : Service Set IDentifier, 無線區域網路的名稱, 可由 AP 廣播出來
LWIP 協定 : 精簡化後的 TCP/IP 協定堆疊, 適用於嵌入式系統
#
ESP8266 晶片的規格書 (中文)
#
ESP8266 晶片的規格書 (英文)
以下我參考克里斯與 Proteus 的文章, 利用 PL2303HX 下載線連接電腦的 USB 與 ESP8266 板, 使用 RealTerm 軟體以 AT 指令與 ESP8266 通訊 :
#
【技術教學】打造Wifi遙控車(之一):使用 ESP8266進行 Wifi無線通訊
#
【技術教學】打造Wifi遙控車(之二):整合 ESP8266 與 Arduino
#
如何燒錄 ESP8266 無線模組的韌體
#
ESP8266 control from a PC via USB-serial
克里斯使用 CP2102 USB-UART(TTL) 轉換板來將電腦的 USB 訊號轉成 ESP8206 的 UART 串列訊號, 而我用的是
PL2303HX 下載線, 參考前作 :
# 安裝 PL2303HX USB 轉 TTL 驅動程式
#
關於 PL2303HX 在 win8 無法驅動的問題
此 PL2303HX 下載線電路板被包覆在 USB 塑膠殼內, 拆開來可看到裡面有 3.3V 電源接線孔, 若需要輸出 3.3V 電源需自行焊線拉出去, 但根據克里斯經驗, 因為 EXP8266 會消耗 200~300mA 左右的電流, 而一般下載線即使有 3.3V 電源輸出, 但無法輸出這麼多電流, 所以無法推動 ESP8266.
我查了
PL2303HX 規格 , 在 9.2.1 節提到其最大操作電流是 25mA, 也是不夠的, 所以其 3.3V 輸出不能用 (故不須接出來了), 必須使用麵包板電源模組的 3.3V 電源, 如下圖右上角處, 把跳線帽移到 3.3V 處, 旁邊的接點就是輸出 3.3V 了 :
注意, 雖然 PL2303HX 吃電腦 USB 的 5V 電源, 其信號輸出卻是 3.3V 準位 (實際測量是 3.8V), 所以其 TX/RX 可以直接與 ESP8266 的 UXRD/UXTD 相接 .
PL2303HX 有四條線, 其中紅色的 +5V 不能用 (因 ESP8266 工作電壓 1.7~3.6V) :
PL2303HX
+5V(紅線) - 不可接 ( 會讓 ESP8266 燒毀 )
GND(黑線)- 接 ESP8266 與 3.3V 電源板的 GND (三個 GND 共接)
TXD(綠線) - 接 ESP8266 的 URXD
RXD(白線)- 接 ESP8266 的 UXTD
ESP8266 的接腳圖如下所示, 針腳位於背面, 接線時比較有用 :
正面
背面
連線圖如下, 可見 PL2303HX 與 ESP8266 的 GND 都接到電源模組的 GND (都是黑線), ESP8266 的 CH_PD (黃線) 與 VCC (紅線) 都接到電源模組的 3.3V, 然後 PL2303HX 的 RX (白線) 接 EXP8266 的 UXTD, TX(綠線) 接 ESP8266 的 URXD.
接好後把 PL2303HX 插入電腦 USB 槽, 按下電源模組按鈕送電, 這時 ESP8266 板子晶振旁的藍色 LED 會閃一下 (有資料傳送時藍燈閃, 參考
ESP8266 ), 邊邊的紅色 LED 也會亮起來 (表示有電源) :
VIDEO
打開控制台/裝置管理員/連接埠, 可看到 Prolific USB-to-Serial Comm Port (COM4) 已正常被驅動, 如果出現黃色驚嘆號的三角形, 表示驅動程式有問題, 請參考下文先安裝 :
連接埠沒問題的話, 啟動 Realterm 通訊軟體, 免安裝版可由此下載 :
#
https://dl.dropboxusercontent.com/u/68794214/Realterm.zip
打開 port 頁籤, 設定鮑率 Baud 為 9600, 指定埠號 port 為 4 (因 PL2303HX 為 COM4), 資料格式為 Parity=None, Data Bits 為 8, Stop Bits 為 1 Bit, 這樣應該就可以跟 0.9.2 版韌體順利連線了, 這時上面會出現 ready :
如果是較舊的韌體, 可能預設 Baud rate 不是 9600, 而是115200 或 57600, 要試一下才行.
注意, 每次修改後必須按 "Change" 才會生效 , 如果出現 ready 了, 但伴隨有亂碼, 請切到 Display 頁籤, 勾選 Display As 與 ANSI, 這樣以後下 AT 命令就不會有亂碼了 :
接下來就可以切到 Send 頁籤向 ESP8266 傳送 AT 指令了, 首先須在 EOL 框中勾選 LF 與 CR, 因 Windows 系統以 LFCR 當作跳行符號, 然後就可以輸入 AT, 按 Send ASCII 鈕, 連線順利的話 ESP8266 就會回傳 OK :
各種 AT 指令參考 :
#
ESP8266 AT Command Set (PDF)
#
ESP8266 Reference (PDF)
#
espressif/esp8266_at
#
atproto/commands.md
例如 :
AT+GMR : 取得韌體版本 : AT+GMR 0018000902 -AI03 OK 可見目前版本是 0902.
AT+RST : 重新起始 ESP8266 AT+RST OK 7!aS?'??!G?R?? [Vendor:www.ai-thinker.com Version:0.9.2.4] ready
AT+CIOBAUD? : 查詢鮑率 (位元速率) +CIOBAUD:9600 OK
AT+CIFSR : 查詢 IP 位址 AT+CIFSR 192.168.4.1 OK 注意, 作為 STA 時, 若尚未用 CWJAP 連線基地台, 則預設 IP 為 0.0.0.0, 連線後才會被指派一個 192.168.X.X 的 STA 區域 IP. 如果 ESP8266 是在 AP/BOTH 模式, 則下 CIFSR 會看到兩個 IP , 一個是 STA IP, 另為一個是基地台 SoftAP IP.
AT+CWMODE? : 查詢目前工作模式 AT+CWMODE? +CWMODE:2 OK 可見目前是模式 2 (AP 基地台模式), 1=STA 網卡模式, 3=BOTH (AP+STA). 注意, 下完 CWMODE 最好再用 CWRST 重啟 , 以確認設定有完成.
AT+CWMODE=1 : 修改工作模式為 1 (STA) 網卡模式 AT+CWMODE=1 OK AT+CWMODE? +CWMODE:1 OK 要修改為雙重模式就在等號後面指定為 3 即可. 注意, STA 與 AP 模式有各自的 IP, 在 STA 模式下未連線前 IP 為預設之 0.0.0.0, 連線後基地台會配發一個 192.168.X.X 的 IP; 改為 AP 或 BOTH 模式後, ESP8266 會自行配發 192.168.4.1 的 AP IP, 故 BOTH 模式下會有兩個 IP. AT+CWMODE=3 OK AT+CIFSR 192.168.4.1 (這是 ESP8266 當 AP 的 IP) 192.168.2.105 (這是 ESP8266 當 STA 的 IP)
AT+CWLAP : 列出附近偵測得到的基地台 注意, 此指令只能在 STA (=1) 與 BOTH (=3) 模式下才會回應, 在 AP 模式下會出現 ERROR. AT+CWLAP +CWLAP:(2,"edimax.setup",-71,"74:da:38:15:16:00",1) +CWLAP:(3,"bryan",-90,"78:54:2e:26:66:28",1) +CWLAP:(3,"TP-LINK_33C1",-86,"c4:e9:84:66:33:c1",4) +CWLAP:(4,"ching",-84,"54:b8:0a:84:f4:70",5) +CWLAP:(4,"HOME",-70,"04:8d:38:52:ea:f7",6) +CWLAP:(4,"alex",-85,"fc:75:16:01:26:0c",6) +CWLAP:(4,"andy",-85,"fc:75:16:02:61:60",6) +CWLAP:(1,"JANE-WIRELESS",-94,"00:24:01:ad:a0:65",6) +CWLAP:(4,"RFTQAD",-93,"c8:d3:a3:5f:d8:fd",9) +CWLAP:(3,"TP-LINK_601A04",-73,"e8:de:27:60:1a:04",10) +CWLAP:(4,"EDIMAX-tony ",-44 ,"90:1f:02:2d:5a:9f",11) 我的基地台 +CWLAP:(3,"CHT5668",-89,"d8:fe:e3:5c:c0:fb",11) +CWLAP:(3,"MOTOROLA-5N6F",-89,"f8:35:dd:74:d2:b6",11) +CWLAP:(3,"45-9",-91,"d8:fe:e3:e6:90:87",11) +CWLAP:(3,"family",-89,"6c:19:8f:b7:9a:79",1) OK 回應訊息的格式為 : +CWLAP:(ecn,ssid,rssi,mac,mode) 第一個參數是加密方式 ecn : 0 OPEN (不加密) 1 WEP 2 WPA_PSK 3 WPA2_PSK 4 WPA_WPA2_PSK 第二個參數是服務設定識別碼 SSID (即基地台代號), 第三個是接收的射頻信號強度 (dBm), 均為負值, 越負信號越弱, 最大值是 0. 第四參數是實體位址 MAC, 第五參數據 "More AT Command Information Found " 說是連接模式, 0 為手動 (manual), 1 為自動 (auto). 但上面測試卻有 0, 1 以外的值. 據 "ESP8266 WiFi module " 這篇則說是 channel, 似乎較合理, 因為 CWJAP 指令也無法設定手動或自動啊!
AT+CWJAP="SSID","PWD" : 連線指定之基地台 (Join AP) AT+CWJAP="EDIMAX-tony","123456789111" OK 連線成功後再下 AT+CIFSR 查詢新指派的 IP, 還沒下 CWJAP 連線前為 0.0.0.0 : AT+CIFSR 192.168.2.105 這時可在相同網域的電腦 ping 此 IP, 檢查連線是否可傳送資料 : C:\Users\petertw89>ping 192.168.2.105 Ping 192.168.2.105 (使用 32 位元組的資料): 回覆自 192.168.2.105: 位元組=32 時間=110ms TTL=255 回覆自 192.168.2.105: 位元組=32 時間=18ms TTL=255 回覆自 192.168.2.105: 位元組=32 時間=35ms TTL=255 回覆自 192.168.2.105: 位元組=32 時間=55ms TTL=255 192.168.2.105 的 Ping 統計資料: 封包: 已傳送 = 4,已收到 = 4, 已遺失 = 0 (0% 遺失), 大約的來回時間 (毫秒): 最小值 = 18ms,最大值 = 110ms,平均 = 54ms
AT+CWJAP? : 查詢目前連線到哪一個基地台 AT+CWJAP? +CWJAP:"EDIMAX-tony" OK
AT+CWQAP : 離開目前連線的基地台 AT+CWQAP OK 這時再下 AT+CWJAP? 查詢連線之基地台時就會回應 ERROR : AT+CWJAP? ERROR 這時下 CWFSR 原來指配的 IP 192.168.2.105 會消失, 回到預設 0.0.0.0 AT+CIFSR 0.0.0.0 OK
AT+CIPSTART : 建立 TCP/UDP 連線 AT+CIPSTART="TCP","www.google.com",80 OK Linked 這樣就與遠端主機建立 TCP 連線了. AT+CIPSTART="UDP","192.43.244.18",123 OK 這樣就與遠端主機建立 UDP 連線了.
AT+CIPSTATU S : 查詢目前 IP 連線狀態 AT+CIPSTATUS STATUS:3 +CIPSTATUS:0,"TCP","74.125.203.101",80,0 OK 回應訊息格式 : +CIPSTATUS:id,type,addr,port,tetype id 為連線通道編號, 最後面的 tetype 為 ESP8266 角色, 0 為 client, 1 為 server. 表示目前與 IP 74.125.203.101 的 80 port 已建立了 TCP 連線 (2 表示已取得 IP 尚未連線, 3 表示 Connected, 4 表示 disconnected). 回應中的 0 為 id.
AT+CIPCLOSE : 關閉 IP 連線 AT+CIPCLOSE OK Unlink
AT+CWSAP? : 查詢 SoftAP 的設定 此指令只有當 ESP8266 工作於 AP/BOTH 模式時才有用, 在 STA 模式下此指令會得到 ERROR 回應. AT+CWMODE=3 先改為 BOTH 模式 OK AT+CWSAP? AT+CWSAP:"ESP_9CBD07 ","",6,0 預設 ssid, pwd, ch, ecn OK 回應顯示預設未設密碼, 最後一個參數為加密方式, 預設 0=未加密, 見 CWLAP 指令. 而 ssid 是 ESP8266 作為 AP 的網路識別, 後面是其 MAC 號碼. ecn 是加密方式.
AT+CWSAP="ssid","pwd",ch,ecn : 更改 AP 的設定 (只在 AP/BOTH 模式有效) AT+CWSAP="MYESP","1234567890",6,4 OK
AT+CWLIF : 查詢有哪些 Client 連線至此 AP (只在 AP/BOTH 模式有效) AT+CWLIF 192.168.4.100,74:e1:b6:0e:f5:67 OK
AT+CIPMUX? : 詢問目前 TCP/UDP 連線模式 這是設定 ESP8266 與同一 WiFi 網路中其他裝置的連線模式, 預設為單一連線, 如果要讓 ESP8266 當伺服器用, 必須設為 1=多重連線. AT+CIPMUX? +CIPMUX:0 (多重連線關閉, 即單一連線模式) OK
AT+CIPMUX=1 : 設定 TCP/UDP 連線模式為多重連線 如果要讓 ESP8266 當伺服器, 讓網域中的客戶端進行 TCP/UDP 連線, 必須開啟多重連線. AT+CIPMUX=1 OK 如果要取消 ESP8266 的伺服功能, 恢復單一連線功能, 須將 CIPMUX 設為 0 : AT+CIPMUX=1 OK
AT+CIPSERVER=mode[,port] : 設定是否開啟 ESP8266 為伺服器 用 CIPMUX=1 開啟多重連線後, 就可以用 CIPSERVER 設定 ESP8266 的伺服器功能. mode=1 為開啟伺服器, 必須指定 port; mode=0 為關閉伺服器, 不須指定 port. 在單一連線下開啟伺服器, 會得到 ERROR 回應. AT+CIPSERVER=1,8087 OK 這樣 ESP8266 伺服器就會傾聽 8087 埠, 這時就可在同網域的電腦連線 ESP8266 伺服器了. 我下載克里斯寫的 Connector-Test.air 安裝後選擇當 Client, 連線 ESP8266 的 STA IP, 連線成功且能雙向傳遞訊息. 用書上的 Java Client 網路程式來測試也 OK. 重複開啟伺服器會回應 no change : AT+CIPSERVER=1,8081 no change 關閉伺服器後必須重啟 ESP8266 (AT+RST), 其回應為 : AT+CIPSERVER=0 we must restart
AT+CIPSTO? : 查詢伺服器逾時計時器設定值 (秒) AT+CIPSTO? +CIPSTO:180 OK 預設是 180 秒
AT+CIPSTO=timeout : 設定伺服器逾時計時器 (0~7200 秒) AT+CIPSTO=200 OK 其實不管設定為多少秒, 它都回應 OK, 但實際最多只能計時到 7200 秒.
設定用的 AT 指令 (例如改變工作模式或連線某個 AP) 完成後會寫入 Flash 記憶體, 即使關機也不會消失, 重開機就會回魂了. 所以設定連線哪個 AP 就會一直鎖定該 AP, 無法像筆電那樣會記錄曾經連線過的 AP 資料, 自動找信好強的連線.
ESP8266 的板子工作時摸起來溫溫的, 我拿了體溫計放在板子上測量約 39 度. 另外也接了電壓電流表測量總耗電量, 顯示 0.02A (20mA) 左右 :
以上就是今晚的測試, 終於搞定了!
2015-07-29 補充 :
賣家
blackboxstudio 表示中國製 ESP-01 板不支援 GSLP 休眠指令, 試過 AT+GSLP=10000 (休眠 10 秒) 果真無法執行. 根據 "
Low Power ESP8266 – Sleeping at 78 micro Amps " 這篇得知是因為 ESP-01 板的 XPD_DCDC (8) 腳沒有接到 reset 之故.
2015-11-16 補充 :
今天找到這個網頁, 介紹 AT 指令蠻詳細的, 特別是把 ESP8266 作為伺服器的部分 :
#
WiFi Module ESP8266 – 2. TCP CLIENT /Server mode
2016-05-19 補充 :
注意唷! 上面這些 AT 指令必須恰恰好, 亦即, 不可以在後面傳送多餘空格, 例如 AT+CIPSTO? 總共 10 個字元, 如果在 ? 後面多按了一個空格字元就會發生錯誤.
其他參考資料 :
#
无线网卡AP模式和station模式
#
SSID, BSSID, ESSID
#
lwIP――TCP/IP協議棧的一種實現(1)
#
lwIP――TCP/IP協議棧的一種實現(2)
#
lwIP――TCP/IP協議棧的一種實現(3)
#
New! Arduino Pro Mini 相容 16MHz 8MHz 任選 (BB-NPMx) $145
#
小型抽水機 水泵 抽水馬達 USB arduino 可用 水冷 水循環 過濾 $145
#
超大FLASH 4M的容量 ESP8266 UART WIFI 模組 ESP-12 $180
#
IOT ESP8266 串口WIFI模塊 ESP-12 (附送底板+開發資料+諮詢) $180
#
ESP8266 ESP-12 ESP-07 最小系統 最小測試版 5V直用 $200
#
SP-12 ESP8266串口WIFI 工業級 穩定版 測試板全套 !全IO引出
#
App HTML5 開發板 WF8266R ESP8266 物聯網 IoT 智慧家電 WIFI Arduino $250
#
Arduino教學-使用ESP8266 wifi模組+DHT 溫溼度感測器上傳thingspeak
#
如何用arduino来测试ESP8266 WIFI模块(wifi普及预热中)
#
A Simple IoT Project with the ESP8266 WiFi module
#
5$ Arduino WiFi Module!? ESP8266 mini Tutorial/Review
#
Cheap and Easy WiFi (IoT) Tutorial Part 1 - ESP8266 Setup/Intro
#
ESP8266 的「IoT 創意致富」課程規劃
#
NodeMCU 物聯網開發平台
#
BitBastelei #132 - WLAN-Thermometer mit ESP8266 & DHT22
#
ESP8266: testing deep sleep & interrupts !?
#
Low Power ESP8266 – Sleeping at 78 micro Amps
#
無線基地台 SSID 中文化的設定方法
#
Esp8266 firmware update