ESP8266是一款超低功耗的UART-WiFi 透傳模塊,擁有業內極富競爭力的封裝尺寸和超低能耗技術,專為移動設備和物聯網應用設計,可將用戶的物理設備連接到Wi-Fi 無線網絡上,進行互聯網或局域網通信,實現聯網功能。
ESP8266是上海樂鑫信息科技設計的低功耗WiFi芯片,集成完整的TCP/IP協議棧和MCU。而ESP8266模塊是深圳安信可公司基於ESP8266芯片研發(增加必要外圍電路、串口flash、板載天線等)的串口WiFi模塊,成本低、使用簡便、功能強大。
硬件與網絡的橋梁
和串口藍牙模塊一樣,串口WiFi模塊也是擴展單片機功能的又一神器。在沒有接觸8266之前,我對單片機如何聯網的問題很是好奇,在書里看過用笨重繁瑣的以太網模塊實現,但一點都不帥好吧。而小巧的 ESP8266 WiFi模塊通過串口AT指令與單片機通訊,實現串口透傳,非常好上手。
透傳,又稱透明傳輸,具體來說就是“輸入即輸出(如從WiFi模塊串口輸入的字符會透傳到服務器端)”,數據不改變,不同協議之間的轉換(如串口到WiFi、藍牙等)由模塊完成。使用者無需關心內部具體實現,因此模塊對於使用者是“透明的”、似乎不存在的(因為可無視中間的實現原理)。一個高度封裝的模塊,應該隱藏內部實現細節,僅對外提供使用接口。
把硬件聯網之后,就再也不是“玩單機”了。配合服務器端的Socket網絡編程,可以玩許多東西。所以我覺得WiFi模塊是連接軟件(網絡編程)與硬件(單片機)的橋梁,把我所學的單片機和Web知識聯系起來了。
而近來“物聯網”或者說“智能硬件”似乎也火了起來,許多強大的芯片和模塊的出現使得聯網設備的開發門檻大大降低。正是有了這些為物聯網大業鋪路的各大廠商們,我等對網絡一竅不通的渣渣也能輕松將硬件聯網、實現網絡通訊。
原理圖及引腳說明
Function | Description |
---|---|
URXD | UART_RXD,接收 |
UTXD | UART_TXD,發送 |
GPIO 16 | 外部Reset信號,低電平復位,高電平工作(默認高) |
GND | GND |
VCC | 3.3V,模塊供電 |
GPIO 0 | 工作模式選擇:懸空:FlashBoot,工作模式;下拉:UARTDownload,下載模式 |
CH_PD | 高電平工作;低電平模塊供電關掉 |
GPIO 2 | (1)開機上電時必須為高電平,禁止硬件下拉;(2)內部默認已拉高 |
模塊的連線
要讓模塊上電正常工作只需三處接線:VCC和CH_PD接3.3電源正極,GND接地。剛好USB-TTL下載模塊上有3.3V的電源。而使用串口調試要再把模塊與下載器的TXD和RXD交叉連接。這樣一來WiFi模塊就能與電腦連接、用串口助手進行測試了。
模塊上電
電腦安裝好USB-TTL模塊的驅動后,USB口插上模塊,在設備管理器查看串口號后,打開串口調試工具sscom,串口號選擇模塊對應的,默認波特率115200,數據-停止-校驗-流控:8-1-None-None,勾選“發送新行”(一定一定要記得勾選“發送新行”,否則WiFi無法識別AT指令),點擊“打開串口”按鈕,然后將CH_PD引腳的3.3V電源斷了重接進行復位,若串口打印亂碼后看到“ready”,說明模塊上電初始化正常。
和某些需要按鍵進入AT指令模式的藍牙模塊不同,ESP8266上電后就運行在AT指令模式下。
免冷啟下載器的坑
記得有一次在實驗室用ESP8266時怎么都不能成功上電初始化顯示“ready”,AT指令也無法工作。最終把固件燒了一遍又一遍,把模塊都“玩壞了”也還是不行,就像見了鬼一樣……最終竟然是因為使用了免冷啟下載器的原因。后來才知道ESP8266電源要求十分苛刻,必須“穩定純凈”,估計這種“高級下載器”內部電路會造成模塊上電時電源不穩定,從而導致上電初始化失敗。如果你也遇到同樣的問題不妨換個USB-TTL下載器試試。
ESP8266的AT指令
AT指令最早在藍牙模塊上接觸過,所謂AT指令實質上就是一些起控制作用的特殊字符串。模塊可以通過AT指令控制使用和用源代碼API函數開發,前者開發速度快,難度非常低(傻瓜化使用)。后者靈活,難度較大。 而我只用過AT指令,所以本文不涉及SDK開發。
AT+RST 重啟
AT+RESTORE 恢復初始化,和手機恢復出廠一樣
AT+GMR 查看版本信息
AT+UART=115200,8,1,0,0 "修改波特率、也叫設置串口配置"8是數據位8字節
AT+CWMODE? 查詢工作模式
AT+CWMODE_DEF=1 配置WiFi工作模式
1.Station (客戶端模式,模塊可以連接到路由器) 2.AP (接入點模式,相當於路由器) 3.Station+AP (兩種模式共存)")
Station:
AT+CWLAP
掃描當前附近WiFi,模塊會返回可用AP列表。
AT+CWJAP="WiFi名稱","WiFi密碼"
連接到指定的路由器, 返回的“WIFI CONNECTED”說明連接成功,“WIFI GOT IP”代表模塊分配到了IP。
AT+CWQAP
斷開當前連接的WiFi。
AT+CWJAP? 查詢當前連接的路由器
AP:
AT+CWSAP="ESP8266","12345678",3,4
設置AP的ssid為“ESP8266”,密碼12345678,最后兩個參數3和4分別表示信道和加密方式。
AT+CWLIF
可查看當前連接到AP的客戶端列表。
AT+CIFSR 查詢IP地址、MAC地址
TCP/IP:
AT+CIPMUX=0
設置單連接
AT+CIPMUX=1 設置成多連接 ,才能開啟TCP服務
AT+CIPSERVER=1,8080 開啟TCP服務
AT+CIPSERVER=0,8080 關閉TCP服務
AT+CIPPORT? 查詢當前的TCP/UDP端口號
AT+CIPSTART="TCP","192.168.4.1",1234
(指令參數分別為連接類型、目標IP地址和端口號)向服務器發起TCP連接請求
AT+CIPMODE=1
開啟透傳模式
AT+CIPSEND
進入透傳模式,此時模塊會把所有串口收到的數據都從TCP端口發送至服務器,同樣的,從服務器收到的數據也會從模塊串口發送出去。這樣WiFi模塊就真正成為了連接硬件與網絡的橋梁,實現了串口到TCP的協議轉換。若要退出透傳模式返回AT指令模式,需發送不帶回車換行的 +++
(取消勾選sscom的“發送新行”再發送指令即可)
AT+CWSMARTSTART 啟動智能配網 (使用微信可以雲服務,安信可平台)
AT+CWSMARTSTOP 停止智能配網 (使用微信可以雲服務,安信可平台)
AT+CLDSTART 開啟雲服務 (使用微信可以雲服務,然后用安卓客戶端)
其他常用指令
除了上面列舉的主要功能指令,ESP8266 模塊還有一些常用的指令:
指令 | 描述 |
---|---|
AT+CIOBAUD | 設置串口波特率 |
AT+SAVETRANSLINK | 保存透傳到 Flash |
AT+CWSTARTSMART | 開啟 SmartConfig |
AT+CWSTOPSMART | 停止 SmartConfig |
AT+CIOBAUD
指令用於設置串口波特率,示例: AT+CIOBAUD=9600
(設置波特率為9600)。 設置好TCP連接信息后通過 AT+SAVETRANSLINK
指令把TCP連接透傳保存到Flash,掉電不丟失。重新上電后模塊會自動聯網建立TCP連接后進入透傳模式,實現了真正意義上的透傳,示例: AT+SAVETRANSLINK=1,"192.168.43.140",1234,"TCP"
。而 AT+CWSTARTSMART
和 AT+CWSTOPSMART
則時用來實現智能配置(Smart Config)的。
注意事項
使用WiFi模塊的一些細節及注意事項
-
模塊使用3.3V供電,一定注意電源的穩定,一些USB轉串口模塊電源不能滿足要求。
-
模塊在連接WiFi后若斷電,則會在下一次上電后自動重連。同理,模塊在透傳模式下斷電后,下次上電仍會進入透傳模式,不響應AT指令,很容易誤以為模塊壞了。
-
如果斷開TCP連接時沒有實現完整的TCP退出流程,ESP8266 會判斷為異常開,對TCP server 進行重連。
-
AT指令一定以回車換行符”\r\n”結尾,但退出透傳模式需發送不帶回車換行的
+++