ESP32通过HTTP请求获取API或者网页源码

在本教程中,我们将学习如何使用ESP32开发板连接WiFi网络并向指定的URL发送HTTP GET请求。
类似实现读取到请求的html源码或者内容,这样的作用是我们使用ESP32开发一些API项目的时候,会使用到。

我们将逐步讲解代码中的每个部分,以帮助您理解其工作原理。

1. 引入必要的库

首先,我们需要引入两个库:WiFi.hHTTPClient.hWiFi.h库用于连接WiFi网络,而HTTPClient.h库用于发送HTTP请求。

#include <WiFi.h> // 引入WiFi库,用于连接WiFi网络
#include <HTTPClient.h> // 引入HTTPClient库,用于HTTP请求

2. 设置WiFi网络信息

接下来,我们定义WiFi网络的名称(SSID)和密码。这些信息将用于连接到您的WiFi网络。

const char* ssid = "your_ssid"; // WiFi网络名称
const char* password = "your_password"; // WiFi网络密码

3. 初始化串口通信

setup()函数中,我们首先初始化串口通信,以便在串口监视器中查看调试信息。

void setup() {
  Serial.begin(115200); // 初始化串口通信,波特率为115200

4. 连接WiFi

使用WiFi.begin()函数开始连接WiFi网络,并使用while循环等待连接成功。在连接过程中,我们每秒打印一次连接状态。

  WiFi.begin(ssid, password); // 开始连接WiFi

  // 等待WiFi连接成功
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000); // 每隔1秒检查一次连接状态
    Serial.println("Connecting to WiFi..."); // 打印连接状态
  }

  Serial.println("Connected to WiFi"); // 打印连接成功信息

5. 发送HTTP请求

一旦WiFi连接成功,我们使用HTTPClient对象发送HTTP GET请求。首先,使用http.begin()函数初始化请求,并指定目标URL。然后,使用http.GET()函数发送请求并获取HTTP状态码。

  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http; // 创建HTTPClient对象
    http.begin("http://example.com/"); // 初始化HTTP请求,指定目标网址

    int httpCode = http.GET(); // 发起GET请求,并获取返回的HTTP状态码

6. 处理HTTP响应

检查HTTP请求是否成功。如果成功,我们打印HTTP状态码和响应内容;如果失败,打印错误信息。最后,使用http.end()函数结束请求并释放资源。

    // 检查HTTP请求是否成功
    if (httpCode > 0) { 
      Serial.println("Success"); // 打印成功信息
      Serial.println(httpCode); // 打印HTTP状态码
      Serial.println("--------------------------------");
      String payload = http.getString(); // 获取返回的响应内容
      Serial.println(payload.length()); // 打印响应内容的长度
      Serial.println("--------------------------------");
      Serial.println(payload); // 打印响应内容
    } else {
      Serial.println("Error on HTTP request"); // 打印请求失败信息
    }

    http.end(); // 结束HTTP请求,释放资源
  }
}

7. 循环函数

loop()函数中,我们不需要执行任何操作,因为所有的工作都在setup()函数中完成。

void loop() {
  // loop函数中不需要执行任何操作
}

心得

  • 调试信息:使用串口监视器查看调试信息是非常有用的,特别是在连接WiFi和发送HTTP请求时。
  • 错误处理:在处理HTTP请求时,检查返回的状态码可以帮助我们了解请求是否成功。
  • 资源管理:在结束HTTP请求时,记得释放资源以避免内存泄漏。

完整代码

#include <WiFi.h> // 引入WiFi库,用于连接WiFi网络
#include <HTTPClient.h> // 引入HTTPClient库,用于HTTP请求

const char* ssid = "your_ssid"; // WiFi网络名称
const char* password = "your_password"; // WiFi网络密码

void setup() {
  Serial.begin(115200); // 初始化串口通信,波特率为115200
  WiFi.begin(ssid, password); // 开始连接WiFi

  // 等待WiFi连接成功
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000); // 每隔1秒检查一次连接状态
    Serial.println("Connecting to WiFi..."); // 打印连接状态
  }

  Serial.println("Connected to WiFi"); // 打印连接成功信息

  // 检查WiFi是否已连接
  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http; // 创建HTTPClient对象
    http.begin("http://example.com/"); // 初始化HTTP请求,指定目标网址

    int httpCode = http.GET(); // 发起GET请求,并获取返回的HTTP状态码

    // 检查HTTP请求是否成功
    if (httpCode > 0) { 
      Serial.println("Success"); // 打印成功信息
      Serial.println(httpCode); // 打印HTTP状态码
      Serial.println("--------------------------------");
      String payload = http.getString(); // 获取返回的响应内容
      Serial.println(payload.length()); // 打印响应内容的长度
      Serial.println("--------------------------------");
      Serial.println(payload); // 打印响应内容
    } else {
      Serial.println("Error on HTTP request"); // 打印请求失败信息
    }

    http.end(); // 结束HTTP请求,释放资源
  }
}

void loop() {
  // loop函数中不需要执行任何操作
}

通过本教程,您应该能够理解如何使用ESP32连接WiFi并进行HTTP请求。希望这能为您的物联网项目提供一个良好的起点!