本教程的目的是解释如何使用 ESP32 和 Arduino 环境支持发出 HTTP POST 请求。我们将使用 HTTPClient.h 库来实现。
目录
介绍
本教程的目的是解释如何使用 ESP32 和 Arduino 环境支持发出 HTTP POST 请求。我们将使用 HTTPClient.h库来实现。
因此,我们不必担心在套接字连接之上构建 HTTP 协议,因为我们将有可用的方法来处理它。要使用相同的库发送 HTTP GET 请求,请查看之前的教程。
重要提示:在编写本教程时,HTTPClient.h 库刚刚合并到 Arduino 环境的 ESP32 库中。因此,您很可能需要更新到可用的最新代码。在此处查看如何操作。
编写代码
代码的初始部分将与使用 ESP32 的 HTTP GET 请求所需的相同。因此,我们将首先包含所需的库,声明一些全局变量来保存 WiFi 网络凭据,并在 Arduino undefined函数中连接到 WiFi 网络。如果您需要有关如何使用 ESP32 连接到 WiFi 网络的详细指南,请查看之前的教程。
重要提示:在撰写本文时,需要在调用WiFi.begin函数之前稍作undefined,以连接到 WiFi 网络。在更新 ESP32 库之前,不需要此undefined。尽管如此,当您测试代码时,最终可能不再需要此undefined,因此您可以使用此undefined并检查 ESP32 是否可以在没有它的情况下连接到 WiFi 网络。如果您遇到连接问题,您可能还需要增加它。
#include <WiFi.h>
#include <HTTPClient.h>
const char* ssid = "yourNetworkName";
const char* password = "yourNetworkPassword";
void setup() {
Serial.begin(115200);
delay(4000); //Delay needed before calling the WiFi.begin
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { //Check for the connection
delay(1000);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
}
在初始化代码之后,我们将进入主循环,我们将在其中编写发出 HTTP POST 请求所需的代码。我们将声明一个HTTPClient类的对象,它提供了处理 HTTP 协议所需的方法。
然后,我们在先前声明的对象上调用begin方法,并将我们要发出 POST 请求的网站的 URL 作为输入传递。我们将使用一个虚假的在线 REST API 网站,适合测试。你可以在这里查看。
HTTPClient http;
http.begin("http://jsonplaceholder.typicode.com/posts"); //Specify destination for HTTP request
之后,我们将调用addHeader方法,这将允许我们指定 HTTP 请求标头。 在这种情况下,我们将定义content-type标头,它指定我们将发送的请求正文的媒体类型。我们将其指定为“ text/plain ”,因为我们只发送一个简单的文本消息,没有任何特定的格式。
如下所述,此方法接收我们要指定的标头作为第一个输入,第二个输入是它的值。
http.addHeader("Content-Type", "text/plain"); //Specify content-type header
现在,要发送实际的 HTTP 请求,我们调用POST方法,将请求的正文内容作为输入传递。我们将发送一条简单的消息,仅用于说明目的。由于我们正在联系一个虚假的 API,它总是会接受输出的内容。
此方法将返回 HTTP 响应代码,我们将其存储在一个变量中。请注意,如果返回的值小于零,则连接上发生错误。如果它大于零,那么它是一个标准的 HTTP 代码。
int httpResponseCode = http.POST("POSTING from ESP32"); //Send the actual POST request
由于我们存储了 HTTP 响应代码,我们将使用它来处理错误,如下面的代码所示。如果我们的请求发送成功,我们将通过调用getString方法获得 HTTP 应答。然后,我们将打印答案和 HTTP 代码。如果出现错误,我们将打印一条信息性消息。
if(httpResponseCode>0){
String response = http.getString(); //Get the response to the request
Serial.println(httpResponseCode); //Print return code
Serial.println(response); //Print request answer
}else{
Serial.print("Error on sending POST: ");
Serial.println(httpResponseCode);
}
最后,我们将调用 http 对象的end方法来释放资源,这个很重要,不能忘记。检查下面的完整源代码,其中已经包含此调用。它还包括每个请求之间的undefined,以及在发送请求之前检查我们是否仍连接到 WiFi 网络:
lookslikeuseful
1
LOOK
看看
1
1
1xuexile
前来学习,
1
look
感谢分享
LOOK LOOK
lookslikeuseful
1