0.字串捕捉與處理

寫在這個系列之前,把ESP8266當作網路卡,必須要略懂序列埠傳資料的方法,

Arduino對ESP8266傳回的資料作判讀,再決定下一步要處理的動作

才能有效率的減少等待時間

AT指令

1.輸入  AT 

2.輸入  AT+RST

3. AT+CWMODE=1   //設定成STA模式

4. AT+CWJAP="SSID","PASSWORD"   //設定成STA模式

5. AT+CIPMUX=1  //開啟多重連結模式(網站伺服器需要)

6. AT+CIPSERVER=1,80  //開啟SERVER

7. AT+CIFSR       //查詢IP

8.瀏覽器向ESP8266發出檢索命令

9.此時應該輸入  AT+CIPSEND=0,3   //其中0代表編號0的連線者,3代表傳送字數

10.輸入兩個字OK

11.輸入 AT+CIPCLOSE=0   //關閉編號0的連結

【第一階段】序列埠簡單處理

本段程式碼基於loop迴圈內可以反覆檢索ESP8266是否從序列埠傳來資料,並顯示在Arduino IDE序列埠視窗中

此程式碼對於測試AT指令有很好的效果,但是若要做一個網站伺服器,這樣的程式碼則需要改進

#include <SoftwareSerial.h>

#define RX 3   //ESP8266 的 TX接3

#define TX 2  //ESP8266 RX接2

SoftwareSerial ESP8266(RX,TX); 

void setup()

{

  Serial.begin(9600);

  ESP8266.begin(9600);  

}

void loop(){

  if (ESP8266.available()){

    Serial.write(ESP8266.read());

  }

  if (Serial.available()){

    ESP8266.write(Serial.read());

}

}

【第二階段】抓取序列埠傳來資料

response則是抓回來回傳的資料

String response = "";

while(esp8266.available()){

char c = esp8266.read();

response += c;

}

Serial.println(response);

【第三階段】從抓回來的資料中辨識關鍵字,並做出回應

 m=response.length();

  for(int i=0 ; i<=m ;i++){

  if(message.charAt(i)=='O'&&message.charAt(i+1)=='K'){

   debug=1;

   }}

  Serial.println(debug);

【第四階段】以抓取IP位址為例

下圖為KEY入 AT+CIFSR 之後的回應

【因應方法】

1.先把整個回應字串抓下來成為IP

2.在IP中尋找IP的I在第幾個字元(head),因為回應的格式是固定的,因此head+4 即為IP的第一個有效字

3.在IP中尋找第二個"在第幾個字元(foot),因此foot-1 即為IP最後一個有效字

4.知道有效字在第幾個到第幾個,那就可以依序顯示出來

void getip(){

int head=0,foot=0;  

String ip = "";

esp8266.println(F("AT+CIFSR"));

esp8266.flush();

while(!esp8266.available()){}

while(esp8266.available()){

  char c = esp8266.read(); 

   ip += c; 

   delay(5);}

for(int i=15 ; i<30 ; i++){

  if(ip.charAt(i)=='I'&&ip.charAt(i+1)=='P'){head=i;}}

for(int i=28 ; i<45 ; i++){

  if(ip.charAt(i)=='"'){foot=i;}}

for(int i=0 ; i<foot-head-4 ; i++){

lcd.setCursor(i,1); 

lcd.print(ip.charAt(head+i+4)); 

}}

【第五階段】網頁伺服器的工作法則

首先要觀察命令是如何往來的

8.瀏覽器向ESP8266發出檢索命令

9.此時應該輸入  AT+CIPSEND=0,3   //其中0代表編號0的連線者,3代表傳送字數

10.輸入兩個字OK

11.輸入 AT+CIPCLOSE=0   //關閉編號0的連結

觀察上圖,發現步驟是這樣的

(1)瀏覽器發出檢索命令

(2) AT+CIPSEND=編號,字數

     回應 OK   與  >

(3) 輸入回傳html

     回應Recv 字數 byte   與  SEND OK

(4)AT+CIPCLOSE=編號

      回應 編號CLOSED  與  OK