ESP8266是一款超低功耗的UART-WiFi 透?jìng)髂K,擁有業(yè)內(nèi)極富競(jìng)爭(zhēng)力的封裝尺寸和超低能耗技術(shù),專為移動(dòng)設(shè)備和物聯(lián)網(wǎng)應(yīng)用設(shè)計(jì),可將用戶的物理設(shè)備連接到Wi-Fi 無(wú)線網(wǎng)絡(luò)上,進(jìn)行互聯(lián)網(wǎng)或局域網(wǎng)通信,實(shí)現(xiàn)聯(lián)網(wǎng)功能。
雖然“WiFi門鎖”一直拖著還沒(méi)弄好,但WiFi模塊卻玩了很久。是時(shí)候介紹下ESP8266的基本使用和配置了。
內(nèi)容簡(jiǎn)介
讓硬件聯(lián)網(wǎng)一直以來(lái)都是比較麻煩的事情,而通過(guò)使用 ESP8266 這款WiFi模塊,僅需要通過(guò)串口使用AT指令控制,就能滿足大部分的網(wǎng)絡(luò)功能需求。本文通過(guò)簡(jiǎn)單介紹及應(yīng)用實(shí)例,讓剛接觸WiFi模塊的讀者了解模塊的大致使用方法。
ESP8266簡(jiǎn)介
ESP8266是上海樂(lè)鑫信息科技設(shè)計(jì)的低功耗WiFi芯片,集成完整的TCP/IP協(xié)議棧和MCU。而ESP8266模塊是深圳安信可公司基于ESP8266芯片研發(fā)(增加必要外圍電路、串口flash、板載天線等)的串口WiFi模塊,成本低、使用簡(jiǎn)便、功能強(qiáng)大。
硬件與網(wǎng)絡(luò)的橋梁
和串口藍(lán)牙模塊一樣,串口WiFi模塊也是擴(kuò)展單片機(jī)功能的又一神器。在沒(méi)有接觸8266之前,我對(duì)單片機(jī)如何聯(lián)網(wǎng)的問(wèn)題很是好奇,在書里看過(guò)用笨重繁瑣的以太網(wǎng)模塊實(shí)現(xiàn),但一點(diǎn)都不帥好吧。而小巧的 ESP8266 WiFi模塊通過(guò)串口AT指令與單片機(jī)通訊,實(shí)現(xiàn)串口透?jìng)鳎浅:蒙鲜帧?/p>
透?jìng)鳎址Q透明傳輸,具體來(lái)說(shuō)就是“輸入即輸出(如從WiFi模塊串口輸入的字符會(huì)透?jìng)鞯椒?wù)器端)”,數(shù)據(jù)不改變,不同協(xié)議之間的轉(zhuǎn)換(如串口到WiFi、藍(lán)牙等)由模塊完成。使用者無(wú)需關(guān)心內(nèi)部具體實(shí)現(xiàn),因此模塊對(duì)于使用者是“透明的”、似乎不存在的(因?yàn)榭蔁o(wú)視中間的實(shí)現(xiàn)原理)。一個(gè)高度封裝的模塊,應(yīng)該隱藏內(nèi)部實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外提供使用接口。
把硬件聯(lián)網(wǎng)之后,就再也不是“玩單機(jī)”了。配合服務(wù)器端的Socket網(wǎng)絡(luò)編程,可以玩許多東西。所以我覺(jué)得WiFi模塊是連接軟件(網(wǎng)絡(luò)編程)與硬件(單片機(jī))的橋梁,把我所學(xué)的單片機(jī)和Web知識(shí)聯(lián)系起來(lái)了。
而近來(lái)“物聯(lián)網(wǎng)”或者說(shuō)“智能硬件”似乎也火了起來(lái),許多強(qiáng)大的芯片和模塊的出現(xiàn)使得聯(lián)網(wǎng)設(shè)備的開發(fā)門檻大大降低。正是有了這些為物聯(lián)網(wǎng)大業(yè)鋪路的各大廠商們,我等對(duì)網(wǎng)絡(luò)一竅不通的渣渣也能輕松將硬件聯(lián)網(wǎng)、實(shí)現(xiàn)網(wǎng)絡(luò)通訊。
模塊資料大全
在某寶買模塊一般都會(huì)有相應(yīng)的資料文檔,涵蓋使用方法與常見的問(wèn)題。
開始前的準(zhǔn)備
原理圖及引腳說(shuō)明
URXD | UART_RXD,接收 |
UTXD | UART_TXD,發(fā)送 |
GPIO 16 | 外部Reset信號(hào),低電平復(fù)位,高電平工作(默認(rèn)高) |
GND | GND |
VCC | 3.3V,模塊供電 |
GPIO 0 | 工作模式選擇:懸空:FlashBoot,工作模式;下拉:UARTDownload,下載模式 |
CH_PD | 高電平工作;低電平模塊供電關(guān)掉 |
GPIO 2 | (1)開機(jī)上電時(shí)必須為高電平,禁止硬件下拉;(2)內(nèi)部默認(rèn)已拉高 |
Function | Description |
---|
模塊的連線
要讓模塊上電正常工作只需三處接線:VCC和CH_PD接3.3電源正極,GND接地。剛好USB-TTL下載模塊上有3.3V的電源。而使用串口調(diào)試要再把模塊與下載器的TXD和RXD交叉連接。這樣一來(lái)WiFi模塊就能與電腦連接、用串口助手進(jìn)行測(cè)試了。
模塊上電
電腦安裝好USB-TTL模塊的驅(qū)動(dòng)后,USB口插上模塊,在設(shè)備管理器查看串口號(hào)后,打開串口調(diào)試工具sscom,串口號(hào)選擇模塊對(duì)應(yīng)的,默認(rèn)波特率115200,數(shù)據(jù)-停止-校驗(yàn)-流控:8-1-None-None,勾選“發(fā)送新行”(一定一定要記得勾選“發(fā)送新行”,否則WiFi無(wú)法識(shí)別AT指令),點(diǎn)擊“打開串口”按鈕,然后將CH_PD引腳的3.3V電源斷了重接進(jìn)行復(fù)位,若串口打印亂碼后看到“ready”,說(shuō)明模塊上電初始化正常。
和某些需要按鍵進(jìn)入AT指令模式的藍(lán)牙模塊不同,ESP8266上電后就運(yùn)行在AT指令模式下。
免冷啟下載器的坑
記得有一次在實(shí)驗(yàn)室用ESP8266時(shí)怎么都不能成功上電初始化顯示“ready”,AT指令也無(wú)法工作。最終把固件燒了一遍又一遍,把模塊都“玩壞了”也還是不行,就像見了鬼一樣……最終竟然是因?yàn)槭褂昧嗣饫鋯⑾螺d器的原因。后來(lái)才知道ESP8266電源要求十分苛刻,必須“穩(wěn)定純凈”,估計(jì)這種“高級(jí)下載器”內(nèi)部電路會(huì)造成模塊上電時(shí)電源不穩(wěn)定,從而導(dǎo)致上電初始化失敗。如果你也遇到同樣的問(wèn)題不妨換個(gè)USB-TTL下載器試試。
別不信邪,一些詭異的bug很可能是由某個(gè)不起眼的硬件引起的,這很“玄學(xué)”。
ESP8266的AT指令
AT指令最早在藍(lán)牙模塊上接觸過(guò),所謂AT指令實(shí)質(zhì)上就是一些起控制作用的特殊字符串。模塊可以通過(guò)AT指令控制使用和用源代碼API函數(shù)開發(fā),前者開發(fā)速度快,難度非常低(傻瓜化使用)。后者靈活,難度較大。而我只用過(guò)AT指令,所以本文不涉及SDK開發(fā)。
說(shuō)明:下面僅列舉一些最常用的AT指令及用法,指令的詳細(xì)參數(shù)及使用說(shuō)明請(qǐng)參考官方文檔:ESP8266 AT指令集。
基礎(chǔ)AT指令
AT | 測(cè)試AT啟動(dòng) |
AT+RST | 重啟模塊 |
AT+GMR | 查看版本信息 |
指令 | 描述 |
---|
AT是最常用的指令,用于測(cè)試模塊能否正常接受指令。在sscom中向串口發(fā)送指令A(yù)T,若收到模塊返回的OK則說(shuō)明模塊的AT指令可正常工作。發(fā)送AT+GMR可查看AT指令及SDK的版本號(hào),我當(dāng)前使用的AT指令是V1.1.0.0的最新版,一般最新版指令會(huì)增加一些新功能,可隨時(shí)關(guān)注官方的更新。
WiFi功能AT指令
WiFi是讓硬件聯(lián)網(wǎng)的基礎(chǔ),和其他功能一樣,這里僅列舉所需的常用指令,更詳細(xì)指令說(shuō)明還得查閱文檔。
AT+CWMODE | 設(shè)置WiFi模式(sta/AP/sta+AP) |
AT+CWLAP | 掃描附近的AP信息 |
AT+CWJAP | 連接AP |
AT+CWQAP | 與AP斷開連接 |
AT+CWSAP | 設(shè)置ESP8266 softAP配置 |
AT+CWLIF | 獲取連接到 ESP8266 softAP 的 station 的信息 |
指令 | 描述 |
---|
關(guān)于WiFi模式這里要說(shuō)明一下,sta模式下模塊相當(dāng)于客戶端,像我們手機(jī)平板一樣是要去連接路由器的,而AP模式下模塊相當(dāng)于路由器,是發(fā)射WiFi被別人連的。ESP8266支持兩種模式并存(模塊出廠默認(rèn)的是AP模式) 。另外,掃描WiFi指令A(yù)T+CWLAP只能在sta模式下使用,否則會(huì)報(bào)ERRO錯(cuò)誤,AT+CWJAP和AT+CWQAP指令也同理。
sta模式連接WiFi演示
那如何讓模塊連接到路由器呢?下面簡(jiǎn)單列舉了一下步驟:
發(fā)送AT+CWMODE=1指令配置模塊為sta模式(參數(shù)1,2,3分別對(duì)應(yīng)模式sta,AP和sta/AP)。
發(fā)送AT+CWLAP指令掃描當(dāng)前附近WiFi,模塊會(huì)返回可用AP列表。
使用AT+CWJAP="WiFi名稱","WiFi密碼"連接到指定的路由器,比如我在圖書館的WiFi是 “l(fā)ib-free-wlan01”,密碼是“zhku-lib”,實(shí)際連接WiFi發(fā)送的指令就是AT+CWJAP="lib-free-wlan01","zhku-lib"。
返回的“WIFI CONNECTED”說(shuō)明連接成功,“WIFI GOT IP”代表模塊分配到了IP。
最后可使用AT+CWQAP斷開當(dāng)前連接的WiFi。
AP模式參數(shù)設(shè)置演示
連完WiFi那接下來(lái)就“開WiFi”吧!AP模式和手機(jī)開熱點(diǎn)一樣,只需設(shè)置WiFi名稱和密碼即可。同樣的先使用AT+CWMODE=2指令配置模塊為AP模式,然后發(fā)送AT+CWSAP="ESP8266","12345678",3,4設(shè)置AP的ssid為“ESP8266”,密碼12345678,最后兩個(gè)參數(shù)3和4分別表示信道和加密方式。手機(jī)連上模塊的WiFi,使用AT+CWLIF可查看當(dāng)前連接到AP的客戶端列表。
TCP/IP相關(guān)AT指令
傳輸控制協(xié)議(英語(yǔ):Transmission Control Protocol,縮寫為 TCP)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC 793定義。在簡(jiǎn)化的計(jì)算機(jī)網(wǎng)絡(luò)OSI模型中,它完成第四層傳輸層所指定的功能,用戶數(shù)據(jù)報(bào)協(xié)議(UDP)是同一層內(nèi)另一個(gè)重要的傳輸協(xié)議。
在因特網(wǎng)協(xié)議族(Internet protocol suite)中,TCP層是位于IP層之上,應(yīng)用層之下的中間層。不同主機(jī)的應(yīng)用層之間經(jīng)常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機(jī)制,而是提供不可靠的包交換。——維基百科
我們常說(shuō)互聯(lián)網(wǎng)互聯(lián)網(wǎng),那兩個(gè)連接到互聯(lián)網(wǎng)的設(shè)備該如何相互“交流”呢?TCP連接就是其中一種最常用的方式。TCP是面向連接的傳輸層協(xié)議,通信雙方都要實(shí)現(xiàn)TCP協(xié)議,其中一方只需目標(biāo)ip地址和端口號(hào)就能發(fā)起連接,連接一旦建立,就像在雙方之間拉了一條管子,管子兩端可進(jìn)行全雙工(雙向同時(shí)收發(fā))通信。
TCP是傳輸層協(xié)議,是在網(wǎng)絡(luò)層IP協(xié)議的基礎(chǔ)上封裝而來(lái)。而這些封裝的實(shí)現(xiàn)細(xì)節(jié)也是與我們無(wú)關(guān),我們只需使用系統(tǒng)所提供的相關(guān)接口“拿來(lái)即用”,比如網(wǎng)絡(luò)編程中的Socket。ESP8266模塊中也實(shí)現(xiàn)了TCP/IP協(xié)議棧,模塊作為客戶端可輕松使用AT指令向服務(wù)端發(fā)起TCP連接。連接TCP服務(wù)器并開啟透?jìng)髂J胶螅K串口收到的數(shù)據(jù)就會(huì)通過(guò)TCP連接透?jìng)鞯椒?wù)端,這樣就完成了數(shù)據(jù)從硬件串口通過(guò)網(wǎng)絡(luò)到程序進(jìn)程的傳輸,實(shí)現(xiàn)軟硬結(jié)合。
AT+CIPSTATUS | 查詢網(wǎng)絡(luò)連接信息 |
AT+CIPMUX | 設(shè)置多連接模式 |
AT+CIPSTART | 建立TCP連接UDP傳輸或者SSL連接 |
AT+CIPCLOSE | 關(guān)閉TCP/UDP/SSL傳輸 |
AT+CIPMODE | 設(shè)置透?jìng)髂J?/td> |
AT+CIPSEND | 發(fā)送數(shù)據(jù) |
指令 | 描述 |
---|
透?jìng)髂J较耊iFi模塊與服務(wù)器TCP網(wǎng)絡(luò)通訊演示
講的再多,還不如親手體驗(yàn)一下如何用WiFi模塊連接TCP服務(wù)器,體會(huì)TCP/IP相關(guān)AT指令的具體使用。首先我們需要一個(gè)TCP服務(wù)器,利用調(diào)試工具“網(wǎng)絡(luò)調(diào)試助手”(軟件在資料包中)即可創(chuàng)建一個(gè)TCP服務(wù)器,實(shí)現(xiàn)服務(wù)端對(duì)指定端口監(jiān)聽TCP連接請(qǐng)求,當(dāng)然也可以自己寫程序?qū)崿F(xiàn),為了簡(jiǎn)便這里用現(xiàn)成的就好。
打開“網(wǎng)絡(luò)調(diào)試助手”,左側(cè)選擇“TCP服務(wù)器”,輸入自定的端口號(hào)(1024-65535),點(diǎn)擊“連接”按鈕開始監(jiān)聽本機(jī)TCP連接請(qǐng)求。在進(jìn)行下一步之前,請(qǐng)確保電腦和WiFi模塊連接到同一個(gè)路由器。
把WiFi模塊和電腦連接,在sscom確定AT指令能正常使用后,就可以開始配置TCP連接了,具體步驟如下:
根據(jù)上面“sta模式連接WiFi演示”一節(jié)把模塊連上WiFi
輸入指令A(yù)T+CIPMUX=0設(shè)置單連接
從“網(wǎng)絡(luò)調(diào)試助手”得知本機(jī)IP和端口,輸入指令A(yù)T+CIPSTART="TCP","192.168.43.140",1234(指令參數(shù)分別為連接類型、目標(biāo)IP地址和端口號(hào))向服務(wù)器發(fā)起TCP連接請(qǐng)求,握手成功并建立連接后,服務(wù)器端的“網(wǎng)絡(luò)調(diào)試助手”就會(huì)顯示客戶端IP和端口信息,此時(shí)雙方已做好收發(fā)數(shù)據(jù)的準(zhǔn)備
輸入指令A(yù)T+CIPMODE=1開啟透?jìng)髂J?/p>
輸入命令A(yù)T+CIPSEND進(jìn)入透?jìng)髂J剑藭r(shí)模塊會(huì)把所有串口收到的數(shù)據(jù)都從TCP端口發(fā)送至服務(wù)器,同樣的,從服務(wù)器收到的數(shù)據(jù)也會(huì)從模塊串口發(fā)送出去打印到sscom上。這樣WiFi模塊就真正成為了連接硬件與網(wǎng)絡(luò)的橋梁,實(shí)現(xiàn)了串口到TCP的協(xié)議轉(zhuǎn)換
若要退出透?jìng)髂J椒祷谹T指令模式,需發(fā)送不帶回車換行的+++(取消勾選sscom的“發(fā)送新行”再發(fā)送指令即可)
見識(shí)了TCP透?jìng)鞯膹?qiáng)大,只要再稍微學(xué)習(xí)一下socket網(wǎng)絡(luò)編程,那么對(duì)于通過(guò)單片機(jī)串口收發(fā)數(shù)據(jù)實(shí)現(xiàn)的功能,現(xiàn)在都可以通過(guò)自己編寫服務(wù)器上的TCP程序來(lái)實(shí)現(xiàn)。當(dāng)我第一次在命令行看到打印的串口數(shù)據(jù)、體驗(yàn)到網(wǎng)絡(luò)互通的魅力時(shí),我就知道——我的“WiFi門鎖”有戲了!
其他常用指令
除了上面列舉的主要功能指令,ESP8266 模塊還有一些常用的指令:
AT+CIOBAUD | 設(shè)置串口波特率 |
AT+SAVETRANSLINK | 保存透?jìng)鞯?Flash |
AT+CWSTARTSMART | 開啟 SmartConfig |
AT+CWSTOPSMART | 停止 SmartConfig |
指令 | 描述 |
---|
AT+CIOBAUD指令用于設(shè)置串口波特率,示例:AT+CIOBAUD=9600(設(shè)置波特率為9600)。設(shè)置好TCP連接信息后通過(guò)AT+SAVETRANSLINK指令把TCP連接透?jìng)鞅4娴紽lash,掉電不丟失。重新上電后模塊會(huì)自動(dòng)聯(lián)網(wǎng)建立TCP連接后進(jìn)入透?jìng)髂J剑瑢?shí)現(xiàn)了真正意義上的透?jìng)鳎纠篈T+SAVETRANSLINK=1,"192.168.43.140",1234,"TCP"。而AT+CWSTARTSMART和AT+CWSTOPSMART則時(shí)用來(lái)實(shí)現(xiàn)智能配置(Smart Config)的。
注意事項(xiàng)
使用WiFi模塊的一些細(xì)節(jié)及注意事項(xiàng)
模塊使用3.3V供電,一定注意電源的穩(wěn)定,一些USB轉(zhuǎn)串口模塊電源不能滿足要求。
模塊在連接WiFi后若斷電,則會(huì)在下一次上電后自動(dòng)重連。同理,模塊在透?jìng)髂J较聰嚯姾螅麓紊想娙詴?huì)進(jìn)入透?jìng)髂J剑豁憫?yīng)AT指令,很容易誤以為模塊壞了。
如果斷開TCP連接時(shí)沒(méi)有實(shí)現(xiàn)完整的TCP退出流程,ESP8266 會(huì)判斷為異常開,對(duì)TCP server 進(jìn)行重連。
AT指令一定以回車換行符” ”結(jié)尾,但退出透?jìng)髂J叫璋l(fā)送不帶回車換行的+++
關(guān)于WiFi模塊要寫的也就這么多了。把以上的AT指令都自己試一遍、觀察效果后,那么ESP8266這個(gè)模塊的AT指令使用是基本沒(méi)問(wèn)題了,然后就可以發(fā)揮想象力用模塊著手開發(fā)更好玩的東西啦~~~
責(zé)任編輯:xj
原文標(biāo)題:ESP8266串口WiFi模塊的基本使用
文章出處:【微信公眾號(hào):開源嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
WIFI
+關(guān)注
關(guān)注
81文章
5310瀏覽量
204940 -
串口
+關(guān)注
關(guān)注
14文章
1559瀏覽量
77137 -
wifi模塊
+關(guān)注
關(guān)注
60文章
380瀏覽量
73788 -
ESP8266
+關(guān)注
關(guān)注
50文章
962瀏覽量
45367
原文標(biāo)題:ESP8266串口WiFi模塊的基本使用
文章出處:【微信號(hào):KY_QRS,微信公眾號(hào):開源嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
基于ESP8266串口WiFi擴(kuò)展板上傳數(shù)據(jù)到服務(wù)器和反向控制
ESP8266串口WIFI遠(yuǎn)距離無(wú)線模塊
esp8266串口wifi實(shí)例
esp8266中文資料匯總(esp8266引腳圖_與單片機(jī)連接_串口wifi實(shí)例)
![<b class='flag-5'>esp8266</b>中文資料匯總(<b class='flag-5'>esp8266</b>引腳圖_與單片機(jī)連接_<b class='flag-5'>串口</b><b class='flag-5'>wifi</b>實(shí)例)](https://file.elecfans.com/web1/M00/51/4D/o4YBAFsGCWOAPNfiAACOpRX2OZo524.jpg)
ESP8266串口WiFi模塊的模塊庫(kù)文件資料合集免費(fèi)下載
![<b class='flag-5'>ESP8266</b><b class='flag-5'>串口</b><b class='flag-5'>WiFi</b><b class='flag-5'>模塊</b>的<b class='flag-5'>模塊</b>庫(kù)文件資料合集免費(fèi)下載](https://file.elecfans.com/web1/M00/C0/E2/pIYBAF8H2E-AaZVyAAOUWGeys0k980.png)
ESP8266 wifi模塊開發(fā)匯總
![<b class='flag-5'>ESP8266</b> <b class='flag-5'>wifi</b><b class='flag-5'>模塊</b>開發(fā)匯總](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32-ESP8266wifi模塊實(shí)現(xiàn)
![STM32-<b class='flag-5'>ESP8266wifi</b><b class='flag-5'>模塊</b>實(shí)現(xiàn)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ESP8266 WIFI模塊 與PC機(jī)聯(lián)機(jī)通信
![<b class='flag-5'>ESP8266</b> <b class='flag-5'>WIFI</b><b class='flag-5'>模塊</b> 與PC機(jī)聯(lián)機(jī)通信](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ESP8266串口WiFi模塊基本使用方法和配置教程
![<b class='flag-5'>ESP8266</b><b class='flag-5'>串口</b><b class='flag-5'>WiFi</b><b class='flag-5'>模塊</b>基本使用方法和<b class='flag-5'>配置</b>教程](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論