目錄
1、ESP8266 的 AP 模式
1.1、查詢 ESP8266 的wifi應用模式
1.2、設(shè)置 ESP8266 模塊的wifi信息
1.3、查詢已經(jīng)接入的設(shè)備
2、ESP8266 的Station 模式
2.1、設(shè)置ESP8266為station模式
2.2、ESP8266接入到wifi熱點
2.3、ESP8266斷開接入的熱點
3、ESP8266 的 AP+STA 模式
4、理解 ESP8266 在局域網(wǎng)內(nèi)的單連接通信
4.1、指令模式發(fā)送數(shù)據(jù)
4.2、透傳模式發(fā)送數(shù)據(jù)
5、理解 ESP8266 在局域網(wǎng)內(nèi)的多連接通信
WIFI模式有三種,一種叫AP模式,一種叫Station模式,另外一種是 AP+STA 模式。下面分別介紹這兩種模式區(qū)別和使用方法。
1、ESP8266 的 AP 模式
AP模式說的是我們平常使用的熱點,比如wifi路由器,手機開的熱點、或者公共場所開放的共享熱點等。這些熱點是允許其他設(shè)備接入的,比如手機、電腦、打印機等設(shè)備只要正確輸入熱點名和密碼就可以接入(最多支持4臺station設(shè)備接入)。
ESP8266的 AP 模式指的就是ESP8266充當路由器的角色,可以產(chǎn)生熱點由其他設(shè)備查詢到并可以接入。這個過程如下圖所示:
1.1、查詢 ESP8266 的wifi應用模式
如果不清楚當前模塊是什么模式,可以使用AT指令查詢當前的wifi應用模式,指令如下:
指令:AT+CWMODE?
響應:返回當前模塊的模式
+CWMODE:<mode>
OK
參數(shù)說明
<mode>
1 Station 模式
2 AP 模式
3 AP 兼 Station 模式
如下示意圖:
1.2、設(shè)置 ESP8266 模塊的wifi信息
(1)wifi模塊是可以通過AT指令對wifi的信息進行查詢的,使用的指令如下:
查詢命令:AT+ CWSAP?
響應:返回當前 AP 參數(shù)
+ CWSAP:<ssid>,<pwd>,<chl>,<ecn>
<ssid>字符串參數(shù),接入點名稱
<pwd>字符串參數(shù),密碼最長 64 字節(jié) ASCII
<chl>通道號
< ecn >0 OPEN
2 WPA_PSK
3 WPA2_PSK
4 WPA_WPA2_PSK
如下所示:
(2)如果需要更改wifi的信息,也是可以設(shè)置的,指令如下:
AT+ CWSAP=<ssid>,<pwd>,<chl>,<ecn>
<ssid>字符串參數(shù),接入點名稱
<pwd>字符串參數(shù),密碼最長 64 字節(jié) ASCII
<chl>通道號
< ecn >0 OPEN
2 WPA_PSK
3 WPA2_PSK
4 WPA_WPA2_PSK
示例:AT+CWSAP="ESP8266-WJL","12345678",5,3
比如我下面的操作:
1.3、查詢已經(jīng)接入的設(shè)備
wifi信息設(shè)置好并且模塊的AP模式=2,這個時候就可以用其他的設(shè)備接入這個熱點信息,查看已經(jīng)介入的熱點指令如下:
指令:AT+CWLIF
響應:
<ip addr>,<mac>
OK
參數(shù)說明
<ip addr> 已接入設(shè)備的 IP 地址
<mac> 已接入設(shè)備的 MAC 地址
如下示例:
圖中可以看到,我的wifi模塊已經(jīng)被其他的一個設(shè)備接入了。
2、ESP8266 的Station 模式
station模式簡單而言就是:wifi模塊不再產(chǎn)生熱點,它只作為一個可以接入其他熱點的設(shè)備,通過輸入熱點的用戶名和密碼,ESP8266就能夠接入到其他的熱點網(wǎng)絡(luò)中。
示意如下圖所示:
2.1、設(shè)置ESP8266為station模式
老樣子使用 AT+CWMODE?查詢模塊當前處于哪一種模式,然后我們發(fā)送 AT+CWMODE=1,讓模塊處于Station 模式下。如下所示:
2.2、ESP8266接入到wifi熱點
讓ESP8266連接到已知的熱點,只要使用AT指令,并正確輸入用戶名和密碼即可。
(1)首先查詢當前是否有接入熱點,指令如下:
AT+ CWJAP?
響應返回當前選擇的AP
+ CWJAP:<ssid>
OK
如果沒有接入,則返回 “NO AP”,如下所示:
(2)接著輸入正確的熱點信息,即可以完成接入AP,指令如下:
AT+ CWJAP =<ssid>,< password>
參數(shù)說明
<ssid>字符串參數(shù),接入點名稱
<pwd>字符串參數(shù),密碼最長 64 字節(jié) ASCII 參數(shù)設(shè)置需要開啟 Station 模式,
若 SSID 或者 password 中含有’,’、’“’和’\’時,需要進行轉(zhuǎn)義,其它字符轉(zhuǎn)義無效
成功接入的示意如下:
(3)查詢接入的設(shè)備情況如下:
AT+CWJAP?
(4)查詢路由器分配給ESP8266的IP,如下所示:
AT+CIPSTA?
響應:
+ CIPSTA:<ip>
OK
參數(shù)說明:
< ip>字符串變量,標準 ip 地址
2.3、ESP8266斷開接入的熱點
斷開接入熱點的指令如下:
AT+CWQAP
3、ESP8266 的 AP+STA 模式
AP+STA模式共存的意思是:ESP8266模塊可以作為AP產(chǎn)生熱點,同時又可以作為一個STA模式接入其他的熱點。
例如:WiFi模塊作為AP時,可以讓其他設(shè)備接入,如手機或者計算機接入;同時該模塊又可以作為一個STA接入到其他熱點,如路由器或者手機的熱點。這樣可以實現(xiàn)組網(wǎng)將下位機的數(shù)據(jù)通過ESP8266模塊上傳到服務器。
注意:模塊在AP+STA模式時,AP 和 STA 的MAC地址是不同的,在模塊內(nèi)部看到模塊做AP時的MAC地址與模塊作為STA時的MAC地址不同,這點是需要注意的!
4、理解 ESP8266 在局域網(wǎng)內(nèi)的單連接通信
單連接指的是在局域網(wǎng)內(nèi),服務器和客戶端之間是點對點的連接,連接的對象只有一個客戶端和一個服務器,通信在這兩方之間互相進行。
本次的演示使用一個手機產(chǎn)生熱點充當路由器,esp8266模塊作為客戶端(client),TCP調(diào)試助手充當服務器(server),客戶端和服務器都使用無線分配的ip。示意圖如下所示:
實現(xiàn) esp8266 模塊連接到服務器的操作過程如下:
(1)使用指令 AT+CWMODE=1 將WIFI模式設(shè)置為Station。因為esp8266模塊要作為客戶端接入到手機熱點,所以要將esp8266的模塊設(shè)置為Station模式,用來連接熱點。
(2)使用?AT+CWJAP="SSID","password"?來連接 WiFi 熱點。操作示意如下:
接入熱點成功之后,使用AT+CIFSR可以查詢到分配給 esp8266 模塊的 IP 地址信息,如下:
(3)使用TCP調(diào)試助手創(chuàng)建一個服務器,用于調(diào)試收發(fā),主要是能夠直觀看到數(shù)據(jù)的交互。如下所示:
協(xié)議類型選擇 TCP Server,本地主機地址因為我用的是wifi,所以要選擇無線局域網(wǎng)的IPv4地址,端口號隨便選一個即可。
(4)建立通信連接。發(fā)送?AT+CIPSTART="TCP","192.168.165.146",8080?,將作為客戶端的 ESP8266 連接到 TCP 服務器,IP 地址和端口號都是上一步設(shè)置 TCP 服務器時的參數(shù)。連接成功之后的示意圖如下:
4.1、指令模式發(fā)送數(shù)據(jù)
發(fā)送數(shù)據(jù)是在服務器和客戶端之間進行的。
(1)服務器(TCP調(diào)試助手)發(fā)送數(shù)據(jù)給客戶端(ESP8266),直接發(fā)送給客戶端即可。因為esp8266通過usb線連接到了串口助手,所以服務器發(fā)送過來的數(shù)據(jù)都能在串口助手上看到,如下:
服務器發(fā)送給客戶端的數(shù)據(jù),在串口助手上可以看到是帶有前綴 “+IPD,14:” 字樣的,后面就是服務器發(fā)送過來的數(shù)據(jù)。
(2)客戶端(ESP8266)發(fā)送數(shù)據(jù)給服務器(TCP調(diào)試),需要esp8266這邊先發(fā)送AT指令,之后再發(fā)送數(shù)據(jù),指令如下:
(1)單路連接。
AT+CIPSEND=<length>
<length>數(shù)據(jù)長度,表明發(fā)送數(shù)據(jù)的長度,最大長度為2048
注意:這個指令需要 (+CIPMUX=0)
(2)多路連接。
AT+CIPSEND=<id>,<length>
<id>需要用于傳輸連接的 id 號
<length>數(shù)字參數(shù),表明發(fā)送數(shù)據(jù)的長度,最大長度為2048
注意:這個指令需要 (+CIPMUX=1)
(3)透傳傳輸。
AT+CIPSEND
收到此命令后先換行返回”>”
然后就進入了透傳模式,每包數(shù)據(jù)以 20ms 間隔區(qū)分,每包最大 2048 字節(jié)。
當輸入單獨一包”+++”返回指令模式。
特別注意:該指令必須在開啟透傳模式以及單連接模式下使用。
單路連接使用 AT+CIPSEND=<length> ,發(fā)送成功之后先換行返回 ”>”,然后開始接收串口數(shù)據(jù),當數(shù)據(jù)長度滿 length 時發(fā)送數(shù)據(jù)。示意如下:
這樣客戶端的數(shù)據(jù)就發(fā)送給了服務器,通信過程也就完成了。
4.2、透傳模式發(fā)送數(shù)據(jù)
上面演示了使用指令的方式進行數(shù)據(jù)的發(fā)送,但是這樣有一個很麻煩的地方,就是每次ESP8266 想要發(fā)送數(shù)據(jù)給客戶端時,都需要先發(fā)送一次 AT+CIPSEND=<length> 然后才能發(fā)送數(shù)據(jù),有點麻煩。
為了省去這個步驟,可以將ESP8266設(shè)置為單路連接,然后開啟透傳模式,這樣就可以直接發(fā)送數(shù)據(jù)了,而不需要每次發(fā)數(shù)據(jù)之前都要先發(fā)一次 AT+CIPSEND=<length>,就方便多了。設(shè)置如下:
(1)設(shè)置為單連接:AT+CIPMUX=0
(2)設(shè)置為透傳模式:AT+CIPMODE=1
(3)發(fā)送指令:AT+CIPSEND
之后就可以直接發(fā)送數(shù)據(jù)了!?。?/span>
說明:透傳,即透明傳輸,指的是在通訊中不管傳輸?shù)膬?nèi)容是什么只負責將傳輸?shù)膬?nèi)容由源地址傳輸?shù)侥康牡刂?,而不對?shù)據(jù)內(nèi)容做任何改變。
如下圖示例:
注意:如果需要退出透傳傳輸返回到指令傳輸模式的話,單獨發(fā)送一串 “+++”,則退出透傳發(fā)送。這個過程至少間隔1秒,才能發(fā)送下一條AT指令,不然容易導致失敗。
5、理解 ESP8266 在局域網(wǎng)內(nèi)的多連接通信
多連接是指網(wǎng)絡(luò)中有多個客戶端可以連接到一個服務器上,服務器與各個客戶端之間都可以互相通信。
本次演示使用ESP8266的STA+AP模式,ESP8266的AP產(chǎn)生熱點,STA允許其他的客戶端接入到ESP8266。這個過程ESP8266作為客戶端,多個TCP調(diào)試助手作為客戶端。相應操作如下面的步驟:
(1)設(shè)置ESP8266模塊的模式為AP+STA,指令 AT+CWMODE=3。
(2)設(shè)置ESP8266模塊為多連接,指令 AT+CIPMUX=1,指令說明如下:
AT+ CIPMUX=<mode>
參數(shù)說明:
<mode> 0 單路連接模式,1 多路連接模式
注意:
1) 只有在非透傳模式下,才能設(shè)置為多路連接;
2.)只有在關(guān)閉服務器模式,并且沒有鏈路建立的情況下,才能設(shè)置為單連接
(3)設(shè)置ESP8266為TCP服務器,指令 AT+ CIPSERVER=<mode>[,<port>],指令說明如下:
AT+CIPSERVER=<mode>,<port>
參數(shù)說明:
<mode> 0 關(guān)閉 server 模式,1 開啟 server 模式
<port> 端口號,缺省值為 333
注意:
1)開啟 server 后自動建立 TCP server 監(jiān)聽。
2)當有 client 接入會自動按順序占用一個連接。
3)只有在AT+CIPMUX=1 時才能開啟 TCP 服務器。
(4)PC連接ESP8266的熱點,如下:
首先設(shè)置esp8266的AP熱點的信息,比如我的設(shè)置如下:
在PC電腦上的wifi列表上就可以看到esp8266的熱點,輸入用戶和密碼接入,如下圖:
(5)打開TCP調(diào)試助手,創(chuàng)建客戶端,并接入esp8266服務器。我這里創(chuàng)建了3個TCP客戶端,并輸入服務器的IP地址和端口號連接到服務器,如下:
如果不知道服務器的IP地址,可以使用下面的指令查詢,如下:
AT+ CIFSR
響應
+ CIFSR:<IP address>
+ CIFSR:<IP address>
接入之后,esp8266會返回接入的客戶端的數(shù)量,如下圖所示:
圖中的0、1、2就是接入的客戶端的 id 號,這個很重要,之后的很多地方都要使用到它。
(6)客戶端發(fā)送數(shù)據(jù)到esp8266服務器,如下操作所示,在三個TCP客戶端分別發(fā)送三句話,如下圖:
服務器上收到的數(shù)據(jù)如下:
其中 +IPD 是指接收到網(wǎng)絡(luò)數(shù)據(jù),后面的0、1、2是指客戶端的id號,8是指數(shù)據(jù)的長度。+IPD的解釋如下:
1)單路連接時
(+CIPMUX=0)
+IPD,<len>:<data>
1)多路連接時
(+CIPMUX=1)
+IPD,<id>,<len>:<data>
參數(shù):
<id>收到連接的 id 號
<len>數(shù)據(jù)長度
<data>收到的數(shù)據(jù)
(7)ESP8266服務器發(fā)送數(shù)據(jù)到客戶端,需要使用 AT+CIPSEND 指令進行,指令如下:
多路連接時
(+CIPMUX=1)
AT+CIPSEND=<id>,<length>
參數(shù):
<id>需要用于傳輸連接的 id 號
<length>數(shù)字參數(shù),表明發(fā)送數(shù)據(jù)的長度,最大長度為2048。
比如我這里通過串口助手給三個客戶端各發(fā)送一句話,如下:
從上圖中可以看到,服務器要發(fā)數(shù)據(jù)到客戶端時需要知道客戶端的id號的,通過id號就能將數(shù)據(jù)發(fā)送到對應已經(jīng)連接的客戶端上。
到此,esp8266的 AT 指令組網(wǎng)通信已經(jīng)演示了一遍了,總體上來說還是比較簡單的,只是需要理解組網(wǎng)這個過程的邏輯,只要理解了這一點,其他的按部就班配置操作基本就可以理解網(wǎng)絡(luò)搭建的原理了。文章來源:http://www.zghlxwxcb.cn/news/detail-842459.html
對嵌入式技術(shù)感興趣的,歡迎關(guān)注微信公眾號“嵌入式之入坑筆記”,一起學習討論??!文章來源地址http://www.zghlxwxcb.cn/news/detail-842459.html
到了這里,關(guān)于ESP8266 教程3 — 通過TCP組建局域網(wǎng)并通信的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!