2015年7月29日 星期三

★ ESP8266 WiFi 模組 AT command 測試

這是我今年四月以 $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 也會亮起來 (表示有電源) :


 

打開控制台/裝置管理員/連接埠, 可看到 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

例如 :
  1. AT+GMR : 取得韌體版本 :
    AT+GMR                                                                         
    0018000902-AI03                                                               
                                                                                   
    OK 
    可見目前版本是 0902.
  2. AT+RST : 重新起始 ESP8266
    AT+RST                                                                         
                                                                                   
    OK                                                                             
    7!aS?'??!G?R??                                                           
    [Vendor:www.ai-thinker.com Version:0.9.2.4]                                    
                                                                                   
    ready  
  3. AT+CIOBAUD?  : 查詢鮑率 (位元速率)
    +CIOBAUD:9600

    OK
  4. 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. 
  5. AT+CWMODE? : 查詢目前工作模式
    AT+CWMODE?                                                                     
    +CWMODE:2                                                                      
                                                                                   
    OK     
    可見目前是模式 2 (AP 基地台模式), 1=STA 網卡模式, 3=BOTH (AP+STA).
    注意, 下完 CWMODE 最好再用 CWRST 重啟, 以確認設定有完成.  
  6. 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)
  7. 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 指令也無法設定手動或自動啊!
  8. 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   
  9. AT+CWJAP? : 查詢目前連線到哪一個基地台
    AT+CWJAP?
    +CWJAP:"EDIMAX-tony"

    OK
  10. 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
  11. AT+CIPSTART : 建立 TCP/UDP 連線
    AT+CIPSTART="TCP","www.google.com",80

    OK
    Linked
    這樣就與遠端主機建立 TCP 連線了.
    AT+CIPSTART="UDP","192.43.244.18",123

    OK
    這樣就與遠端主機建立 UDP 連線了.
  12. AT+CIPSTATUS : 查詢目前 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. 
  13. AT+CIPCLOSE : 關閉 IP 連線
    AT+CIPCLOSE

    OK
    Unlink
  14. 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 是加密方式.
  15. AT+CWSAP="ssid","pwd",ch,ecn : 更改 AP 的設定 (只在 AP/BOTH 模式有效)

    AT+CWSAP="MYESP","1234567890",6,4

    OK
  16. AT+CWLIF : 查詢有哪些 Client 連線至此 AP (只在 AP/BOTH 模式有效)
    AT+CWLIF
    192.168.4.100,74:e1:b6:0e:f5:67

    OK
  17. AT+CIPMUX? : 詢問目前 TCP/UDP 連線模式
    這是設定 ESP8266 與同一 WiFi 網路中其他裝置的連線模式, 預設為單一連線, 如果要讓 ESP8266 當伺服器用, 必須設為 1=多重連線.

    AT+CIPMUX?
    +CIPMUX:0       (多重連線關閉, 即單一連線模式)

    OK
  18. AT+CIPMUX=1 : 設定 TCP/UDP 連線模式為多重連線
    如果要讓 ESP8266 當伺服器, 讓網域中的客戶端進行 TCP/UDP 連線, 必須開啟多重連線.

    AT+CIPMUX=1

    OK
    如果要取消 ESP8266 的伺服功能, 恢復單一連線功能, 須將 CIPMUX 設為 0 :
    AT+CIPMUX=1

    OK
  19. 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
  20. AT+CIPSTO? : 查詢伺服器逾時計時器設定值 (秒)

    AT+CIPSTO?
    +CIPSTO:180

    OK

    預設是 180 秒
  21. 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

34 則留言 :

低調學長 提到...

小狐狸晚安:

我參考以下的文章:
http://code.unumobile.com/wf8266r/tutorials/esp8266/00_FM

燒新最新 at command V0.20

但我卻無法改變 baudrate
我發現下列的網站似乎已經將
AT+CIOBAUD=115200
這改變baudrate 的命令拿掉
想再跟您確認一下,使用 V0.20 的 at commadn 是否無法再修改 baudrate

https://github.com/espressif/ESP8266_AT/wiki/AT_Description

Tony Huang 提到...

您好, 我沒有用過 AT 版本 0.20 的韌體, 但用過 0.21 版的, 不同韌體所支援的指令有些差異, 例如我目前使用的 AT v0.18 SDK 0.9.2 的韌體可以用 AT+CIOBAUD? 查詢速率; 但不能使用 AT+UART=9600,8,1,0,0 來更改速率. 而 AT v0.21 SDK 0.9.5 的版本卻相反, AT+CIOBAUD? 不行, AT+UART 則可. 您可以嘗試用 AT V0.21 的 AT+UART 試試看. 參考 :

http://wiki.aprbrother.com/wiki/Firmware_For_ESP8266
http://www.xess.com/blog/esp8266-reflash/
https://drive.google.com/file/d/0B3dUKfqzZnlwdUJUc2hkZDUyVjA/view?usp=sharing

註 : 韌體裡面有兩個版本訊息, 一個是 AT 版本, 一個是 SDK 版本. 我幾乎都使用 AT v0.18 SDK 0.9.2 的韌體, 因為此版較穩定.

低調學長 提到...

回饋一下
新版的命令還在實作中
可以使用 AT+IPR=9600 設定
但有些還沒實作完成,如
AT+IPR?

Tony Huang 提到...

感謝您, 我找時間試試看.

Hsu Booker 提到...

好精闢的文章~
ESP8266 算是WIFI 一個便宜的解決方案。
研究研究~


匿名 提到...

您好
因為學校專題,我有關於esp8266的問題想問你可以嗎?
可以跟你要聯絡方式嗎?
謝謝

cyut 提到...

您好我是上面那位

shsps60510 提到...

你好!
我們是使用這塊板子
http://www.playrobot.com/wifi-enthnet/1134-esp8266-arduino-uno-r3-web-severwifi.html
然後輸入AT時會跑AT出來!而不是OK!
感謝!

Tony Huang 提到...

謝謝您, 讓我又多見識了一塊新板子. ESP8266 的回應取決於內部所燒錄的韌體, 我個人使用 0018000902 這個版本的韌體, 覺得期回應簡單且穩定, 參考這篇 :

http://yhhuang1966.blogspot.tw/2015/08/esp8266.html

提到...

你好~我知道可以用 app inventor 2 來控制 ESP8266 , 如何連線控制多個 ESP8266 可行嗎? 就是 可以單獨控制也可以一次作 群控 這樣,謝謝!

Tony Huang 提到...

感謝留言, 群控是一個不錯的點子, 例如一個按鍵同時控制多處灑水器等. App Inventor 2 我很久前就想學習了, 但後來看到 Blynk 這軟體就暫時打住了. 我還沒試過用 Blynk 做群控, 您可以先去了解看看, 參考 :

http://yhhuang1966.blogspot.tw/2016/08/blynk.html

我最近有空會試試看, 結果如何我會記錄下來. 歡迎多交流!

Unknown 提到...

我買了一顆 esp-01
因為懶 我沒有更新韌體 (結果是可以正常使用)
參考很多文章多說要另行供電給 8266
但是我參考其中其他文章的方式,嘗試用 2顆3號電池串聯供電給8266,卻是不行的 。
反而我直接用 arduino供電給 8266 ,可以正常使用,

可以連上家裡 wi-fi AP 可以取得ip 可以連到外部網站。

感謝您的文章,受益良多。

Tony Huang 提到...

ESP8266 啟動時吃電較大, 乾電池可能力有未逮. 感謝留言.

嚴章益 提到...
作者已經移除這則留言。
嚴章益 提到...

作者您好
請問可以關閉伺服器逾時的功能嗎?
預設是180s
雖然可以把伺服器逾時時間變長
但我想直接關掉,永遠不要逾時,請問有這樣的指令嗎?
另外謝謝您的文章,受益良多

Tony Huang 提到...

Sorry, 我沒用過這樣的功能. 不過根據 stackoverflow, 似乎可以用 ini_set('max_execution_time', 0) 或 set_time_limit(0) 來關閉逾時功能, 您可以試試看. 參考 :

http://stackoverflow.com/questions/15776400/make-script-execution-to-unlimited

陳體平 提到...

Hello 前輩您好

我用 RealTime 2.0.0.70 版對 ESP8266 下 AT 指令都成功, 唯讀 BaudRate 查詢及修改指令都報 Error, 這讓我買回的 BaudRate 115200 無法改成 9600, 應用 SoftwareSerial 在Blynk 就此路不通, 請問您有什麼 good idea 嗎.....

AT+GMR
AT version:1.2.0.0(Jul 1 2016 20:04:45)
SDK version:1.5.4.1(39cb9a32)
Ai-Thinker Technology Co. Ltd.
Dec 2 2016 14:21:16
OK
prlrl
Ai-Thinker Technology Co. Ltd.

ready
WIFI CONNECTED
WIFI GOT IP
AT+CIOBAUD?

ERROR

Tony Huang 提到...

特定版本的韌體才可以改 BAUD RATE 喔!

叉燒包 提到...

作者您好,想請教一個問題,當我用sscom32e在做AT+CIPSTART這部份時,會顯示出這樣的情形
AT+CIPSTART=3,"TCP","192.168.1.109",8080

ERROR
3,CLOSED
在網路上查詢了很久,不知道id這邊是從哪裡來的呢?
我有設置好了這部分,上面ip也成功取得也可以發送wifi了
AT+CIPMUX=1


OK
謝謝。

Tony Huang 提到...

這個 id 是連線通道編號, 應該是 TCP/IP 協定堆疊給出的. TCP WEB 伺服器須開啟多重連線 (AT+CIPMUX=1) 否則會 ERROR. 參考 :

http://yhhuang1966.blogspot.tw/2015/11/esp8266-at.html

叉燒包 提到...

謝謝作者,但我早已設定好為多重連線(AT+CIPMUX=1) 還是出現上面的情形,請問有解決方法嗎?

Tony Huang 提到...

我以前測試時偶而也會出現這樣的問題, 有時候似乎是 TCP 拆線不良, 照理每次連線結束後都有 close, 但下一次連線卻往 channel 2, 3, ...5 前進, 顯然 channel 1 還被占著不放. 原因必須深入了解 AT Firmware 以及其實作之 TCP/IP 棧才能追蹤, 我並無此功夫深究. 其實用 AT 操作 ESP8266 挺彆扭, 現在 Arduino IDE 直接支援 ESP8266, 可直用. 或者可用 MicroPython.

嚴章益 提到...

您好
我想請問
我現在在做兩個esp8266的傳輸
我一開始是使用TCP的傳輸方式
但是TCP有MTU.MSS的限制,導致接收端單筆最多只能收到1460Bytes,超過會被拆開
例如:
發送端:
AT+CIPSTART=4,"TCP","192.168.4.2",8088
4,CONNECT

OK
AT+CIPSEND=4,1982

OK
>
Recv 1982 bytes

接收端:
4,CONNECT

OK

+IPD,0,1460=XXXXXX...XXXXX
+IPD,0,522=XXXX..XX

後來我改成UDP的方式
一樣先連結
發送端:
AT+CIPSTART=4,"UDP","192.168.4.2",8088
4,CONNECT

OK
AT+CIPSEND=4,1982

OK
>
Recv 1982 bytes

但是發送端收不到任何東西,確定有連結到,但沒辦法收到從發送端的任何資料
我把單筆資料調小也沒辦法
請問我使用UDP的方式有哪裡錯了呢?
TCP跟UDP的發送的AT指令應該是一樣的吧
還是需要多設定什麼嗎?

還是有什麼方法可以解決MTU.MSS的問題
像是把MSS的寬度變大,我在AT指令集完全沒看到任何相關的

還有AT+CIPSEND這個指令可以有辦法傳送超過2048Bytes的方法嗎?
因為我看AT指令集,這個指令最多只能傳2048Bytes
還是我其他的方法可以傳超過2048Bytes的方法嗎?

謝謝樓主
我的問題有點多

Tony Huang 提到...

顏兄您好, 我的應用都是傳送小資料, 沒傳送過這麼大的資料量, 您測試的比我還深入. UDP 的 AT 指令與 TCP 並無不同, 不過如您所知 UDP 是非連接性協定, 用來傳遞的資料是不可靠的, 我對 UDP 的測試也僅止於 NTP 應用而已, 抱歉無法給您完整答覆. 由於使用 AT 相當麻煩, 需接觸底層細節, 所以現在我幾乎沒再用 AT 韌體了, 改用 MicroPython 來操作 ESP8266, 細節就交給 MicroPython 韌體處理, 我只要專注應用層就好. 等我測到這部分時倒要看看是否有此問題. 請問您用兩個 ESP8266 通訊是獨立運作還是搭配 Arduino 呢?

嚴章益 提到...

目前我ESP8266是在FPGA環境下運作,兩個算是獨立運作
Python目前也有在研究,但還沒應用在ESP8266上

嚴章益 提到...

請問一個小問題
我ESP8266Reset後(AT+RST)
但是回傳的東西有時候會有Ready 有時候不會回傳Ready
因為我程式需要判斷有收到Ready才完成reset
但是有時候會收不到Ready,請問是什麼問題呢?

Tony Huang 提到...

以前我也有觀察到此現象, 原因不清楚, 因為沒有需要讀取 ready 所以就不深究了. 是否可改為偵測 'OK'?

嚴章益 提到...

可以改成偵測"OK",但是我偵測"ready"的目的是為了準確判斷esp8266已經確實reset完成,如果只判斷到"OK"可能還沒reset完成

嚴章益 提到...

作者您好
我現在下AT+CIPSEND的指令
在某個特定情況會出現"busy s....."
但有時候是"busy p....."
請問這兩個差在哪呢?

Tony Huang 提到...

是的, 以前測試時有時候會出現這兩個 busy, 我都直接重開機也沒去探究原因. 根據下面這篇, 'busy p ...' 表示 AT 指令正在執行; 'busy s ...' 表示指令正在傳送中, 停留很久顯示有問題 :

http://bbs.espressif.com/viewtopic.php?t=116

匿名 提到...

您好
如果我想要讓ESP8266間隔一定時間掃一次WIFI
該如何改寫程式

Tony Huang 提到...

那就在 loop() 迴圈裡定時下 AT+CWLAP 指令即可.

匿名 提到...

您好,我是之前上面那位,我之前試過在loop與setup
都試過加while迴圈跑esp8266.println("AT+CWLAP")
可是仍然沒有成功
請問是不是原本loop這兩個判斷是也要跟著修改??
if (esp8266.available()) {//若軟體序列埠 Rx 收到資料 (來自 ESP8266)
Serial.write(esp8266.read());//讀取後寫入硬體序列埠 Tx (PC)
}
if (Serial.available()) {//若硬體序列埠 Rx 收到資料 (來自 PC)
esp8266.write(Serial.read());//讀取後寫入軟體序列埠 Tx (ESP8266)

Jia Wei Cai 提到...

您好,我是上面那位
我將程式改寫成下面這樣
但是掃出來的wifi與mac address都是只有一個
而且部分內容都是亂碼
但是如果更改delay時間 輸出又會變得很慢
想請教一下這邊該如何更改

void loop() {
if (esp8266.available()) { //若軟體串列埠 RX 有收到來自 ESP8266 的回應字元
unsigned long start = millis();
while (millis() - start < 500) {
at();
}
while (esp8266.available()) {
Serial.write(esp8266.read()); //在串列埠監控視窗顯示 ESP8266 的回應字元
}
}

}

void at()
{
esp8266.println("AT+CWLAP");delay(500);
}