ESP8266是一款超低功耗的UART-WiFi 透傳模塊,擁有業內極富競爭力的封裝尺寸和超低能耗技術,專為移動設備和物聯網應用設計,可將用戶的物理設備連接到Wi-Fi 無線網絡上,進行互聯網或局域網通信,實現聯網功能。
雖然“WiFi門鎖”一直拖著還沒弄好,但WiFi模塊卻玩了很久。是時候介紹下ESP8266的基本使用和配置了。
內容簡介
讓硬件聯網一直以來都是比較麻煩的事情,而通過使用 ESP8266 這款WiFi模塊,僅需要通過串口使用AT指令控制,就能滿足大部分的網絡功能需求。本文通過簡單介紹及應用實例,讓剛接觸WiFi模塊的讀者了解模塊的大致使用方法。
ESP8266簡介
ESP8266是上海樂鑫信息科技設計的低功耗WiFi芯片,集成完整的TCP/IP協議棧和MCU。而ESP8266模塊是深圳安信可公司基于ESP8266芯片研發(增加必要外圍電路、串口flash、板載天線等)的串口WiFi模塊,成本低、使用簡便、功能強大。
硬件與網絡的橋梁
和串口藍牙模塊一樣,串口WiFi模塊也是擴展單片機功能的又一神器。在沒有接觸8266之前,我對單片機如何聯網的問題很是好奇,在書里看過用笨重繁瑣的以太網模塊實現,但一點都不帥好吧。而小巧的 ESP8266 WiFi模塊通過串口AT指令與單片機通訊,實現串口透傳,非常好上手。
透傳,又稱透明傳輸,具體來說就是“輸入即輸出(如從WiFi模塊串口輸入的字符會透傳到服務器端)”,數據不改變,不同協議之間的轉換(如串口到WiFi、藍牙等)由模塊完成。使用者無需關心內部具體實現,因此模塊對于使用者是“透明的”、似乎不存在的(因為可無視中間的實現原理)。一個高度封裝的模塊,應該隱藏內部實現細節,僅對外提供使用接口。
把硬件聯網之后,就再也不是“玩單機”了。配合服務器端的Socket網絡編程,可以玩許多東西。所以我覺得WiFi模塊是連接軟件(網絡編程)與硬件(單片機)的橋梁,把我所學的單片機和Web知識聯系起來了。
而近來“物聯網”或者說“智能硬件”似乎也火了起來,許多強大的芯片和模塊的出現使得聯網設備的開發門檻大大降低。正是有了這些為物聯網大業鋪路的各大廠商們,我等對網絡一竅不通的渣渣也能輕松將硬件聯網、實現網絡通訊。
模塊資料大全
在某寶買模塊一般都會有相應的資料文檔,涵蓋使用方法與常見的問題。
開始前的準備
原理圖及引腳說明
URXD | UART_RXD,接收 |
UTXD | UART_TXD,發送 |
GPIO 16 | 外部Reset信號,低電平復位,高電平工作(默認高) |
GND | GND |
VCC | 3.3V,模塊供電 |
GPIO 0 | 工作模式選擇:懸空:FlashBoot,工作模式;下拉:UARTDownload,下載模式 |
CH_PD | 高電平工作;低電平模塊供電關掉 |
GPIO 2 | (1)開機上電時必須為高電平,禁止硬件下拉;(2)內部默認已拉高 |
Function | Description |
---|
模塊的連線
要讓模塊上電正常工作只需三處接線: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下載器試試。
別不信邪,一些詭異的bug很可能是由某個不起眼的硬件引起的,這很“玄學”。
ESP8266的AT指令
AT指令最早在藍牙模塊上接觸過,所謂AT指令實質上就是一些起控制作用的特殊字符串。模塊可以通過AT指令控制使用和用源代碼API函數開發,前者開發速度快,難度非常低(傻瓜化使用)。后者靈活,難度較大。而我只用過AT指令,所以本文不涉及SDK開發。
說明:下面僅列舉一些最常用的AT指令及用法,指令的詳細參數及使用說明請參考官方文檔:ESP8266 AT指令集。
基礎AT指令
AT | 測試AT啟動 |
AT+RST | 重啟模塊 |
AT+GMR | 查看版本信息 |
指令 | 描述 |
---|
AT是最常用的指令,用于測試模塊能否正常接受指令。在sscom中向串口發送指令AT,若收到模塊返回的OK則說明模塊的AT指令可正常工作。發送AT+GMR可查看AT指令及SDK的版本號,我當前使用的AT指令是V1.1.0.0的最新版,一般最新版指令會增加一些新功能,可隨時關注官方的更新。
WiFi功能AT指令
WiFi是讓硬件聯網的基礎,和其他功能一樣,這里僅列舉所需的常用指令,更詳細指令說明還得查閱文檔。
AT+CWMODE | 設置WiFi模式(sta/AP/sta+AP) |
AT+CWLAP | 掃描附近的AP信息 |
AT+CWJAP | 連接AP |
AT+CWQAP | 與AP斷開連接 |
AT+CWSAP | 設置ESP8266 softAP配置 |
AT+CWLIF | 獲取連接到 ESP8266 softAP 的 station 的信息 |
指令 | 描述 |
---|
關于WiFi模式這里要說明一下,sta模式下模塊相當于客戶端,像我們手機平板一樣是要去連接路由器的,而AP模式下模塊相當于路由器,是發射WiFi被別人連的。ESP8266支持兩種模式并存(模塊出廠默認的是AP模式) 。另外,掃描WiFi指令AT+CWLAP只能在sta模式下使用,否則會報ERRO錯誤,AT+CWJAP和AT+CWQAP指令也同理。
sta模式連接WiFi演示
那如何讓模塊連接到路由器呢?下面簡單列舉了一下步驟:
發送AT+CWMODE=1指令配置模塊為sta模式(參數1,2,3分別對應模式sta,AP和sta/AP)。
發送AT+CWLAP指令掃描當前附近WiFi,模塊會返回可用AP列表。
使用AT+CWJAP="WiFi名稱","WiFi密碼"連接到指定的路由器,比如我在圖書館的WiFi是 “lib-free-wlan01”,密碼是“zhku-lib”,實際連接WiFi發送的指令就是AT+CWJAP="lib-free-wlan01","zhku-lib"。
返回的“WIFI CONNECTED”說明連接成功,“WIFI GOT IP”代表模塊分配到了IP。
最后可使用AT+CWQAP斷開當前連接的WiFi。
AP模式參數設置演示
連完WiFi那接下來就“開WiFi”吧!AP模式和手機開熱點一樣,只需設置WiFi名稱和密碼即可。同樣的先使用AT+CWMODE=2指令配置模塊為AP模式,然后發送AT+CWSAP="ESP8266","12345678",3,4設置AP的ssid為“ESP8266”,密碼12345678,最后兩個參數3和4分別表示信道和加密方式。手機連上模塊的WiFi,使用AT+CWLIF可查看當前連接到AP的客戶端列表。
TCP/IP相關AT指令
傳輸控制協議(英語:Transmission Control Protocol,縮寫為 TCP)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議,由IETF的RFC 793定義。在簡化的計算機網絡OSI模型中,它完成第四層傳輸層所指定的功能,用戶數據報協議(UDP)是同一層內另一個重要的傳輸協議。
在因特網協議族(Internet protocol suite)中,TCP層是位于IP層之上,應用層之下的中間層。不同主機的應用層之間經常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。——維基百科
我們常說互聯網互聯網,那兩個連接到互聯網的設備該如何相互“交流”呢?TCP連接就是其中一種最常用的方式。TCP是面向連接的傳輸層協議,通信雙方都要實現TCP協議,其中一方只需目標ip地址和端口號就能發起連接,連接一旦建立,就像在雙方之間拉了一條管子,管子兩端可進行全雙工(雙向同時收發)通信。
TCP是傳輸層協議,是在網絡層IP協議的基礎上封裝而來。而這些封裝的實現細節也是與我們無關,我們只需使用系統所提供的相關接口“拿來即用”,比如網絡編程中的Socket。ESP8266模塊中也實現了TCP/IP協議棧,模塊作為客戶端可輕松使用AT指令向服務端發起TCP連接。連接TCP服務器并開啟透傳模式后,模塊串口收到的數據就會通過TCP連接透傳到服務端,這樣就完成了數據從硬件串口通過網絡到程序進程的傳輸,實現軟硬結合。
AT+CIPSTATUS | 查詢網絡連接信息 |
AT+CIPMUX | 設置多連接模式 |
AT+CIPSTART | 建立TCP連接UDP傳輸或者SSL連接 |
AT+CIPCLOSE | 關閉TCP/UDP/SSL傳輸 |
AT+CIPMODE | 設置透傳模式 |
AT+CIPSEND | 發送數據 |
指令 | 描述 |
---|
透傳模式下WiFi模塊與服務器TCP網絡通訊演示
講的再多,還不如親手體驗一下如何用WiFi模塊連接TCP服務器,體會TCP/IP相關AT指令的具體使用。首先我們需要一個TCP服務器,利用調試工具“網絡調試助手”(軟件在資料包中)即可創建一個TCP服務器,實現服務端對指定端口監聽TCP連接請求,當然也可以自己寫程序實現,為了簡便這里用現成的就好。
打開“網絡調試助手”,左側選擇“TCP服務器”,輸入自定的端口號(1024-65535),點擊“連接”按鈕開始監聽本機TCP連接請求。在進行下一步之前,請確保電腦和WiFi模塊連接到同一個路由器。
把WiFi模塊和電腦連接,在sscom確定AT指令能正常使用后,就可以開始配置TCP連接了,具體步驟如下:
根據上面“sta模式連接WiFi演示”一節把模塊連上WiFi
輸入指令AT+CIPMUX=0設置單連接
從“網絡調試助手”得知本機IP和端口,輸入指令AT+CIPSTART="TCP","192.168.43.140",1234(指令參數分別為連接類型、目標IP地址和端口號)向服務器發起TCP連接請求,握手成功并建立連接后,服務器端的“網絡調試助手”就會顯示客戶端IP和端口信息,此時雙方已做好收發數據的準備
輸入指令AT+CIPMODE=1開啟透傳模式
輸入命令AT+CIPSEND進入透傳模式,此時模塊會把所有串口收到的數據都從TCP端口發送至服務器,同樣的,從服務器收到的數據也會從模塊串口發送出去打印到sscom上。這樣WiFi模塊就真正成為了連接硬件與網絡的橋梁,實現了串口到TCP的協議轉換
若要退出透傳模式返回AT指令模式,需發送不帶回車換行的+++(取消勾選sscom的“發送新行”再發送指令即可)
見識了TCP透傳的強大,只要再稍微學習一下socket網絡編程,那么對于通過單片機串口收發數據實現的功能,現在都可以通過自己編寫服務器上的TCP程序來實現。當我第一次在命令行看到打印的串口數據、體驗到網絡互通的魅力時,我就知道——我的“WiFi門鎖”有戲了!
其他常用指令
除了上面列舉的主要功能指令,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指令一定以回車換行符” ”結尾,但退出透傳模式需發送不帶回車換行的+++
關于WiFi模塊要寫的也就這么多了。把以上的AT指令都自己試一遍、觀察效果后,那么ESP8266這個模塊的AT指令使用是基本沒問題了,然后就可以發揮想象力用模塊著手開發更好玩的東西啦~~~
責任編輯:xj
原文標題:ESP8266串口WiFi模塊的基本使用
文章出處:【微信公眾號:開源嵌入式】歡迎添加關注!文章轉載請注明出處。
-
WIFI
+關注
關注
81文章
5296瀏覽量
203575 -
串口
+關注
關注
14文章
1551瀏覽量
76422 -
wifi模塊
+關注
關注
60文章
379瀏覽量
73471 -
ESP8266
+關注
關注
50文章
962瀏覽量
44962
原文標題:ESP8266串口WiFi模塊的基本使用
文章出處:【微信號:KY_QRS,微信公眾號:開源嵌入式】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論