惠為君
鹽城工學(xué)院 江蘇 鹽城 224051
ESP8266是一種面向物聯(lián)網(wǎng)應(yīng)用的Wi-Fi器件。其成本低廉、體積小巧、使用方便,在物聯(lián)網(wǎng)應(yīng)用設(shè)計中,獲得廣泛的使用。
ESP8266只有在配網(wǎng)成功后,才可以正常使用。配網(wǎng)時,需要設(shè)置ESP8266的工作模式。其模式有三種:客戶端模式(station)、服務(wù)器模式(AP)、混合模式。連接路由器時,工作于客戶端模式;作為手機熱點時,工作于服務(wù)器模式。工程實踐中,通過單片機串口或PC機串口助手發(fā)送AT指令設(shè)置ESP8266的工作模式。由于路由器信號強弱不同,如果時延不準(zhǔn)確,設(shè)置ESP8266智能配網(wǎng)不容易成功。
AT指令是終端與設(shè)備的通信指令,其特征是指令以字符串AT引導(dǎo)。ESP8266的AT指令分為四種,即測試指令、查詢指令、設(shè)置指令、執(zhí)行指令。配網(wǎng)所需的相關(guān)AT指令如表1所示[1]。

表1 AT指令
在工程實踐中,一般單片機通過串口給ESP8266發(fā)送AT指令。在配置的時候,單片機除了向ESP8266發(fā)送AT命令,還要接收ESP8266的回傳信號。一般根據(jù)回傳信號,判斷ESP8266的工作狀態(tài)。本文采用51兼容單片機STC15F2K60S2的串口二傳輸AT指令,程序中通過串口中斷服務(wù)程序?qū)崿F(xiàn)單片機與ESP8266的通信。在此基礎(chǔ)上,設(shè)計發(fā)送和接受函數(shù),用來完成AT指令的發(fā)送和回傳信號的接收。其中,發(fā)送函數(shù)部分程序如下:
while (*s) //檢測字符串結(jié)束標(biāo)志
{
uart2_SendData(*s++); //發(fā)送當(dāng)前字符
Delay1ms();
}
uart2_SendData(‘ ’); //回車
Delay1ms();
uart2_SendData(‘ ’); //換行
程序中,指針s指向要發(fā)送的AT指令,AT指令的結(jié)束標(biāo)記是回車和換行兩個標(biāo)記[2]。
由于Wi-Fi信號的強弱不同和ESP8266處理命令及回傳命令的時延,智能配網(wǎng)ESP8266比較困難。在設(shè)計配網(wǎng)程序的時候,根據(jù)具體的配網(wǎng)狀況,需要添加適當(dāng)?shù)臅r延,然后執(zhí)行響應(yīng)的AT 指令。其配網(wǎng)流程流程如圖1所示。

圖1 配網(wǎng)流程圖

圖2 手機智能配置流程圖
ESP8266啟動時,要檢測連接的Wi-Fi,并獲取ID。如果沒有獲取ID,說明是第一次配置或Wi-Fi已經(jīng)改變,此時,需要啟動手機智能配置。其配置流程如圖2所示。手機智能配網(wǎng)的時候,先要確定ESP8266的工作模式,即station模式和AP模式,然后設(shè)置ESP8266是否上電自動連接Wi-Fi,最后開啟智能配置,即手機智能配置[3]。智能配置的核心程序如下:
if(Send_Wi-Fi_CMD(“AT+CWSTARTSMART=3”,”O(jiān)K”))
{
Uart1_SendString(“SmartConfig Command is sended successfully ”) ;
}
//等待手機配置Wi-Fi....
while(1)
{ if(Send_Wi-Fi_CMD(“AT+CIPSTATUS”,”STATUS:2”))
{
Uart1_SendString(“ESP8266 is successed to config by phone ”);
Wi-Fi_config = 1;
break;
}
實現(xiàn)智能配網(wǎng),主要有兩條指令完成。 AT+CWMODE=1,設(shè)置ESP8266單station模式,AT+CWSTARTSMART=3,設(shè)置ESP8266配置類型為AirKisss或Esp_touch。AirKiss通過關(guān)注安信可公眾號的微信配網(wǎng)來實現(xiàn)。
啟動智能配置以后,死循環(huán)等待手機配置,一旦手機配網(wǎng)成功,退出死循環(huán)。
基于STC15F2K60S2完成某個項目,該單片機具有兩個全雙工串口。項目中用U2口實現(xiàn)ESP8266與單片機通信,U1口通過轉(zhuǎn)接口接PC機USB口,可以在串口助手觀察配網(wǎng)的過程。配網(wǎng)成功時的信息如圖3所示。

圖3 智能配網(wǎng)信息
配網(wǎng)成功后,ESP8266作為站點連接TCP或UDP服務(wù)器。如下片段代碼,實現(xiàn)ESP8266連接TCP服務(wù)器。
if(Send_Wi-Fi_CMD(“AT+CIPSTART=”TCP”,”192.1 68.1.3”,8082”,”O(jiān)K”)) //
{
Delay200ms();
server_connect_flag = 1;
Uart1_SendString(“ESP8266 has connected to TCP server ”);
}
指令A(yù)T+CIPSTART用于建立ESP8266與TCP或UDP服務(wù)器連接。服務(wù)器連接成功后,ESP8266就可以向服務(wù)器發(fā)送數(shù)據(jù)了[4]。
Wi-Fi信號的強弱、ESP8266的安裝位置都能影響配網(wǎng)結(jié)果。手機智能配網(wǎng)并不能100%保證成功,在使用的時候需要注意這一點。