97久久亚洲,亚洲福利久久,亚洲精品系列,97在线精品

win7系統下載
當前位置: 首頁 > 網絡技術教程 > 詳細頁面

ESP8266使用AT指令連接服務器(回傳判斷思路)

發布時間:2024-04-12 文章來源:深度系統下載 瀏覽:

最近在做一款單片機系統,使用的是AVR128單片機作為上位機,其中使用ESP8266接入互聯網,大體的想法是,上位機通過串口向esp8266發送AT指令,來達到請求服務器接口的目的,服務器上的接口是使用PHP寫的簡單的HTTP接口。

最初的方法

esp8266的AT指令返回的信息非常的不規范,沒有統一的格式,所以對回傳的判斷是有一定的困難的。剛開始使用的是最簡單的方法通過充足的延時和指令的重復發送來確保每一個AT指令的正確執行。
1.上位機在初始化的時候會重啟esp8266,這時候延時5秒的時間(用來esp8266的重啟和自動連接好已連接過的熱點)
2.發送TCP連接指令(AT+CIPSTART=”TCP”,”www.icharm.me”,80),這時候延時2秒(可以縮短為一秒,視服務器情況)
3.發送進入透傳模式指令(AT+CIPMODE=1),延時500ms
4.發送進入透傳發送模式指令(AT+CIPSEND),延時500ms
5.然后發送請求接口的數據(GET http://www.icharm.me/index.php?ac=100002)延時1s等待服務器的返回

如果上面的每一條指令都能正確的執行的話,肯定是可以觸發服務器的接口的。但是經過測試發現,這種方法并不靠譜,經常會出現問題。

有關ESP8266怎么連接服務器的可以參考:

檢查回傳

因為上面的方法穩定性太差,所以哀差悶開始分析esp8266回傳信息,試圖找到一種通用的規則來判斷AT指令的成功執行。

哀差悶的設想是保證每次開機后都順利的進入透傳發送模式,所以怎么保證進入了透傳發送的模式,只有檢查每一條AT指令的回傳。確保每一條指令的成功執行。

首先需要知道的是:每發送一個AT指令,ESP8266會返回一下你發送的指令,接著緊接回車換行(0x0D 0x0A),再返回指令執行的信息,再緊接回車換行(0x0D 0x0A),最后返回指令執行的情況(OK或者ERROR),最后再緊接一個回車換行。

接下來分析下AT+CIPSTART=”TCP”,”www.icharm.me”,80 這條AT指令的回傳信息。發送這條指令的時候esp8266有四種回傳情況:(/n/r 代表回車換行)
•未連接wifi,這時候會返回:no ip /n/r ERROR /n/r 等信息
•已連接wifi,但沒有網絡訪問權限 ,這時候會返回 CONNECT CLOSE /n/r ERROR /n/r
•已經和服務器建立連接,這時候會返回 ALREADY CONNECTED /n/r ERROR /n/r
•成功和服務器建立連接, 返回OK

再來分析下AT+CIPMODE=1 指令的回傳情況,這個比較簡單,成功返回OK, 失敗返回ERROR,重復設置也會返回OK,所以這條指令可以通過判斷是否為OK或ERROR。

指令AT+CIPSEND 的返回信息比較簡單,成功返回 > 失敗返回ERROR。

從上面可以知道,判斷返回是否為OK或者ERROR并不能達到預期的目標,而且在單片機程序中,串口接受緩沖數組長度有限,會出現覆蓋掉前面的一部分信息的情況,甚至出現ERROR這單詞的前一部分在數組的末端,后一部分在數組的前端的情況。

所以哀差悶想了一個辦法,先從串口中斷接收函數入手,弄兩個接收緩沖數組A,B,首先對接收到的字符進行判斷如果為0x0d(即回車)時,則舍棄,同時從A數組中取出0x0d前面的一個字符存入B,如果為0x0a則直接放棄, 否則將存入數組A。

這樣數組B中存放即為每一個回車的前一個字符。后面將通過判斷資格數組中的字符來判斷,從面上面的情況中,可以總結出成功的情況有三種:
•數組B最后一個字符為K (即OK)
•數組B最后一個字符為R (即ERROR),但數組B倒數第二個字符為D,這種情況代表ALREADY CONNECTED /n/r ERROR
•數組B最后一個字符為 >

除了上面的三種情況,其他的都視為失敗。

 

代碼分析

可能經過上面的說明,還是不太明白,可以參考一下哀差悶的代碼。但因為單片機的不同,代碼會不同,請參考著看:

中斷接收函數:

 

 

 

 

 

 


1 //***********************************************************************


2 // USART1中斷接收字符串


3 //***********************************************************************


4 #pragma interrupt_handler uart1_rx_isr:iv_USART1_RXC


5 void uart1_rx_isr(void)


6 {


7 uchar temp = UDR1; //從數據緩沖器中接收數據 放入temp中


8 if(temp == 0x0d ){ //將每一個回車符前面的一個字符串記錄下來,用作判斷的標志


9 if(RxBufWr_wifi == 0){ //RxCharBuf_wifi即為數組A, wifi_flag即為數組B, RxBufWr_wifi為數組A的寫入指針, flagWr為數組B的寫入指針


10 wifi_flag[flagWr] = RxCharBuf_wifi[15];


11 }else{


12 wifi_flag[flagWr] = RxCharBuf_wifi[RxBufWr_wifi-1];


13 }


14 flagWr++;


15 flagWr &= 0x0f; //數組長度為16,當寫入指針為達到16時 自動歸零


16 if(flagWr != 0)


17 wifi_flag[flagWr] = 0x00; //讓接收的字符串求出的長度為正確的


18 return;


19 }


20 if( temp == 0x0a)


21 return;


22 RxCharBuf_wifi[RxBufWr_wifi] = temp;


23 RxBufWr_wifi++;


24 RxBufWr_wifi &= 0x0f; //16->0


25 if(RxBufWr_wifi != 0)


26 RxCharBuf_wifi[RxBufWr_wifi] = 0x00; //讓接收的字符串求出的長度為正確的(加個0x00結尾)


27 }

回傳判斷函數:

 

 

 

 

 

 


1 //***********************************************************************


2 // wifi AT指令返回檢查


3 //***********************************************************************


4 int wifi_checkReturn(uint flag){ //這個flag為你要檢查數組B的倒數第幾個字符,如果為上面分析的那三個字符的話,則檢查成功 返回1,否則返回0


5 uint length;


6 while(flagWr == RxBufRd_wifi) delay_nms(10); //發送AT指令前要手動將三個讀寫指針歸0(flagWr=RxBufWr_wifi=RxBufRd_wifi=0),如果讀寫指針不相等則說明有數據回傳過來,反則延時等待


7 length = strlen(wifi_flag);


8 if(length < flag){


9 return 0;


10 }


11 if(wifi_flag[length-flag] == 'K')


12 return 1;


13 if(wifi_flag[length-flag] == 0x3E) //判斷是否為 >


14 return 1;


15 if(wifi_flag[length-flag] == 'D')


16 return 1;


17 return 0;


18 }

接下來給一個使用的函數:

連接服務器函數,這個函數確保ESP8266通電后進入透傳發送模式

 

 

 

 

 

 


1 //***********************************************************************


2 // 連接服務器


3 //***********************************************************************


4 void wifi_ConnectServer(void)


5 {


6 DisplayCgrom(0x88, "連接服務器中。。"); //在LCD顯示信息


7 delay_nms(2);


8 do{


9 wifi_TCPConnect(); //這個函數即為發送AT+CIPSTART="TCP","www.icharm.me",80 的函數


10 if(wifi_checkReturn(1) == 1) //如果數組B的最后一個字符檢查通過的話 則退出循環


11 break;


12 if(wifi_checkReturn(2) == 1) //如果數組B的倒數第二個字符檢查通過的 則退出循環


13 break;


14 }while(1);


15 do{


16 wifi_CIPMODE(); //這個函數發送指令AT+CIPMODE=1


17 }while(wifi_checkReturn(1) == 0);


18 do{


19 wifi_CIPSEND(); //這個函數發送指令AT+CIPSEND


20 }while(wifi_checkReturn(1) == 0);


21 DisplayCgrom(0x88, "服務器連接成功");


22


23 }

上面的那個回傳判斷函數還有待優化,如果最后一個字符為R的話自動判斷倒數第二個字符是否為D 這樣更好,可以節省flag變量。

本文章關鍵詞: ESP8266 AT指令 連接服務器 
97久久亚洲,亚洲福利久久,亚洲精品系列,97在线精品
日产精品一区二区| 国产高清不卡| 一区二区自拍| 亚洲精品电影| 亚洲午夜在线| 一区二区视频欧美| 视频在线观看91| 青草综合视频| 欧美激情久久久久久久久久久| 久久影视三级福利片| 国产精品蜜芽在线观看| 99tv成人| 日本 国产 欧美色综合| 青青草91久久久久久久久| 国产精品三p一区二区| 久久久久久色| 精品国产黄a∨片高清在线| 日韩在线观看| 久热精品在线| 日韩av一级片| 麻豆91小视频| 日韩欧美一区二区三区免费观看| 欧美1区免费| 亚洲欧美在线专区| 精品日产乱码久久久久久仙踪林| 88xx成人免费观看视频库| 黑丝一区二区三区| 国产亚洲精品美女久久| 国产福利电影在线播放| 91久久亚洲| 久久99精品久久久野外观看| 色吊丝一区二区| 亚洲va久久久噜噜噜久久| 粉嫩av一区二区三区四区五区 | 女主播福利一区| 91麻豆精品激情在线观看最新| 97精品国产福利一区二区三区| 久久大逼视频| 精品一区二区男人吃奶| 99在线精品视频在线观看| 国产乱论精品| 欧美日韩激情| 欧美极品中文字幕| 在线视频日韩| 美女性感视频久久| 99成人在线| 精品久久一区| 亚洲综合小说| 亚洲深夜视频| 久久国际精品| 欧美日韩黑人| 91日韩欧美| 日韩欧美在线精品| 激情婷婷久久| 精品国产精品久久一区免费式| 在线一区二区三区视频| 欧美一级鲁丝片| 国产亚洲精品美女久久久久久久久久| 久久亚洲国产| 嫩呦国产一区二区三区av| 视频一区二区三区中文字幕| 麻豆视频在线看| 日韩精品亚洲aⅴ在线影院| 国精品一区二区三区| 精品国产午夜| 欧美日韩18| 视频在线在亚洲| 极品日韩av| 色婷婷色综合| 久久激情综合网| 色综合视频一区二区三区日韩| 久久久久免费av| а√天堂中文在线资源8| 国产精品三级| 69堂精品视频在线播放| 日韩精品一二三区| 欧美日韩视频| 欧美日韩精品免费观看视欧美高清免费大片 | 国产精品麻豆成人av电影艾秋| 久久亚洲一区| 国产精品美女久久久| 欧美日韩在线观看视频小说| 高清一区二区三区| 久久精品国产99国产| 久久精品99国产精品| 涩涩涩久久久成人精品| 综合国产在线| 久久国产福利| 亚洲二区视频| 亚洲天堂一区二区| 日韩av福利| 日韩久久精品| 欧美男人天堂| 国语精品一区| 卡一卡二国产精品| 激情综合婷婷| 欧美国产一级| 综合日韩av| 日韩一区亚洲二区| 久久久久国产一区二区| 欧美日韩色图| 欧美日韩国产精品一区二区亚洲| 久久精品免费一区二区三区 | 蜜臀av一区二区三区| 性欧美长视频| 美国三级日本三级久久99| 中文一区一区三区免费在线观 | 99久久激情| 久久蜜桃精品| 91精品99| 日韩中文字幕一区二区三区| 男女激情视频一区| 日韩免费精品| 麻豆视频久久| 日韩在线不卡| 天堂网在线观看国产精品| 国产亚洲精品自拍| 免费人成黄页网站在线一区二区| 亚洲精品在线a| 日韩高清国产一区在线| 欧美一区在线观看视频| 欧美国产日韩电影| 四虎国产精品免费观看| 久久精品一区二区不卡| 蘑菇福利视频一区播放| 欧美日韩1区| 福利精品在线| 亚洲精品午夜av福利久久蜜桃| 亚洲毛片在线| 欧美激情 亚洲a∨综合| 色婷婷精品视频| 蜜臀91精品一区二区三区| 国产日韩欧美一区在线| 激情视频网站在线播放色| 91精品一区二区三区综合| 久久午夜视频| 美腿丝袜亚洲一区| 激情欧美一区二区三区| 午夜性色一区二区三区免费视频| 久久只有精品| 伊人久久成人| 国产精品tv| av亚洲免费| 日本午夜精品| 欧洲av一区二区| 日韩区欧美区| 色爱综合av| 久久国产日韩欧美精品| 欧美性感美女一区二区| 中文字幕一区二区三区四区久久| 欧美国产专区| 亚洲自拍另类| 麻豆一区二区在线| 在线综合视频| 麻豆91精品视频| 中文亚洲免费| 精品香蕉视频| 男女性色大片免费观看一区二区| 麻豆国产精品视频| 香蕉视频成人在线观看| 精品日本视频| 亚洲ww精品| 日韩精品一卡| 国产精品白丝av嫩草影院| 香蕉成人久久| 久久久久观看| 亚洲97av| 欧美特黄一区| 91一区二区三区四区| 日韩av一级片| 午夜宅男久久久| 免费观看亚洲| 国产激情欧美| 日韩美女精品| 成人av动漫在线观看| 国内在线观看一区二区三区| 综合亚洲视频| 黑丝一区二区三区| 日韩免费久久| 久久精品毛片| 亚洲精品观看| 国产农村妇女精品一二区| 亚洲爱爱视频| 精品国产黄a∨片高清在线| 91成人精品观看| 六月婷婷一区| 亚洲午夜黄色| 日本美女一区| 福利一区和二区| 国产精品久久久久77777丨| 日韩亚洲精品在线观看| 中文一区二区| 亚洲免费高清| 激情丁香综合| 日韩欧美精品一区| 久久精品免视看国产成人| 97se亚洲| 日韩精品国产欧美| 丝袜脚交一区二区| 一区二区亚洲精品|