ESP8266與NodeMCU開發(三)客戶端
阿新 • • 發佈:2019-02-04
這一節將講解如何將ESP8266程式設計設定為一個網頁客戶端,訪問www.example.com,傳送請求並獲取返回資料,通過串列埠打印出來
流程如下:
1.首先需要連線上路由器或者任意AP,從而獲得能訪問外網的途徑,這一點在上一章節中已經說明。
相關程式碼:
#define WIFINAME "wifi名稱"
#define WIFIPW "wifi密碼"
WiFi.begin(WIFINAME, WIFIPW);
等待ESP8266連線上AP
while (WiFi.status() != WL_CONNECTED)//try link to router { delay(500); Serial.print("."); }
2.例項化一個客戶端,用以建立http連線,併發送請求
設定請求網址
const char* host = "www.example.com";
例項化
WiFiClient client;
與服務端建立連線
client.connect(host, 80)
向服務端傳送請求
client.print(String("GET /") + "HTTP/1.1\r\n" + "Host:" + host + "\r\n" +
"Connection: close\r\n" + "\r\n"
);
3.如果連線建立並且請求傳送成功,然後就可以收到由服務端傳送的回覆,使用一個字串來儲存
String line = client.readStringUntil('\n');
4.列印獲取的回覆訊息
Serial.println(line);
從列印結果可以看到,網頁頭部和主體都提示“HTTP Version Not Supported”,因為HTTP版本較低因此服務端未傳送網頁佈局檔案到ESP8266上,但整個通訊過程是成功的。
在實際的程式設計中需要追加連線成功才傳送請求的判斷,以防止ESP8266因錯誤的指令而重啟。
程式整體原始碼:
#include <Arduino.h> #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> #include <ESP8266HTTPClient.h> #define WIFINAME "ChinaMobile-45012" #define WIFIPW "wangjinxuan" const char* host = "www.example.com"; void setup() { pinMode(BUILTIN_LED, OUTPUT); Serial.begin(115200); Serial.println(""); WiFi.begin(WIFINAME, WIFIPW);//link to router Serial.print("Connecting.."); while (WiFi.status() != WL_CONNECTED)//try link to router { delay(500); Serial.print("."); } Serial.println(); Serial.print("Connected,IP Address:");//connecting succeed Serial.println(WiFi.localIP()); } void loop() { // put your main code here, to run repeatedly: WiFiClient client; Serial.printf("\r\nConnectint to %s ..", host); Serial.println(""); if (client.connect(host, 80)) { Serial.println("Connected!"); Serial.println("Send a request"); client.print(String("GET /") + "HTTP/1.1\r\n" + "Host:" + host + "\r\n" + "Connection: close\r\n" + "\r\n" ); Serial.println("\r\n[Response:]"); while (client.connected()) { while (client.connected()) { if (client.available()) { String line = client.readStringUntil('\n'); Serial.println(line); } } client.stop(); Serial.println("\nClient stop, disconnected"); } } else { Serial.println("connecting failed!"); client.stop(); } delay(8000); }
參考:https://github.com/esp8266/Arduino/blob/master/doc/esp8266wifi/client-examples.md#select-a-server