抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

ESP8266-Arduino库中有两个库用于控制ESP8266与网络服务器进行通讯。他们是WiFiClient库和ESP8266HTTPClient库。

【注意】

  • WiFiClient 被声明在 <ESP8266WiFi.h> 中(这种方式实现Client更复杂,但灵活)

  • ESP8266HTTPClient被单独声明在 <ESP8266HTTPClient.h>(这种方式实现Client更简单,但很多功能不能根据自己意愿来定制实现)

1、ESP8266HTTPClient 实现

  1. 连接WiFi,具体实现看第一篇文章

  2. 连接WiFi后,写一个函数来访问服务器

  3. 函数设计,五个步骤:

    • 创建客户端对象
    • 配置访问地址url
    • 发送get(post)请求
      • 请求成功:处理返回信息
      • 请求失败:(任意)
    • 结束请求
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // 发送HTTP请求并且将服务器响应通过串口输出
    void httpClientRequest(){

    //1 创建 HTTPClient 对象
    HTTPClient httpClient;

    //2 通过begin函数配置请求地址
    httpClient.begin(URL);

    //3 通过GET函数启动连接并发送HTTP请求
    int httpCode = httpClient.GET();

    //4 处理服务器返回信息
    if (httpCode == HTTP_CODE_OK) {
    // 使用getString函数获取服务器响应体内容
    String responsePayload = httpClient.getString();
    //...
    } else {
    //...
    }

    //5 关闭ESP8266与服务器连接
    httpClient.end();
    }

完整code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

void setup() {
String url = "http://www.example.com";

Serial.begin(115200);

WiFi.mode(WIFI_STA);
WiFi.begin("RBook", "17191719");

for(int i=0; WiFi.status() != WL_CONNECTED; i++){
delay(1000);
Serial.printf("%d ", i);
}
Serial.print("\r\nwifi is connected\r\n");

getResponse(url);

}

void loop() {
// put your main code here, to run repeatedly:

}

//五个步骤进行发送请求并获取数据
void getResponse(String url){

HTTPClient httpClient; // 1

httpClient.begin(url); // 2

int httpCode = httpClient.GET(); // 3

// 4
if(httpCode == HTTP_CODE_OK){
Serial.printf("httpCode: %d Success......\n", httpCode);
String res = httpClient.getString();
Serial.println("======================");
Serial.println(res);
Serial.println("======================");
}
else {
Serial.printf("httpCode: %d Failed......\n", httpCode);
}

// 5
httpClient.end();

}

【注意】

转义字符 \r 表示将光标移动到本行开头(继续输出会覆盖本行内容)

\r\n 表示将光标移到开头再换行(不会覆盖本行内容),一般与 \n 效果相同

2、WiFiClient 实现

  1. 创建对象
  2. 连接服务器
    • 连接成功:(1)发送请求(2)获取并处理服务器响应的数据(3)断开与服务器的连接
    • 连接失败:断开连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void wifiClientRequest(String url){
// 建立WiFi客户端对象
WiFiClient client;

// 建立字符串,用于HTTP请求
String httpRequest = String("GET /") + " HTTP/1.1\r\n" +
"url: " + url + "\r\n" +
"Connection: close\r\n" +
"\r\n";

// 连接网络服务器
if (client.connect(url, httpPort)){ //连接成功connect会返回true

client.print(httpRequest); // 向服务器发送HTTP请求

// 通过串口输出网络服务器响应信息
while (client.connected() || client.available()){
if (client.available()){
String line = client.readStringUntil('\n'); //一行一行读取
Serial.println(line);
}
}

client.stop(); // 断开与服务器的连接

} else{
client.stop(); // 如果连接不成功则断开连接
}

评论