ESP32 建立WEB服务器并使用POST数据读取示例

在上一篇主要简单介绍了用ESP32搭建WEB服务器和在URL中带参数访问并获取,这次主要介绍使用网页POST的方式提交数据。这样参数或者数据就不会暴露在URL中。

上一篇参考:

ESP32 简单的WEB Server和GET参数读取示例

安装所需的库

接下来,安装所需的库。在Arduino IDE中,转到“工具”>“管理库”,然后搜索并安装以下库:

  • ESPAsyncWebSrv

  • AsyncTCP(仅适用于ESP32)

  • ESPAsyncTCP(仅试用于ESP8266)

程序代码

// welcome to lingshunlab.com

#include <Arduino.h>
#ifdef ESP32
  #include <WiFi.h>
  #include <AsyncTCP.h>
#else
  #include <ESP8266WiFi.h>
  #include <ESPAsyncTCP.h>
#endif
#include <ESPAsyncWebSrv.h>

AsyncWebServer server(80);

// REPLACE WITH YOUR NETWORK CREDENTIALS
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

// HTML web page to handle input fields
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html><head>
  <title>ESP Input Form</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  </head><body>
  <form action="/get" method="GET">
    Get Input value: <input type="text" name="getInput">
    <input type="submit" value="Submit">
  </form><br>
  <form action="/post" method="POST">
    Post Input value: <input type="text" name="postInput">
    <input type="submit" value="Submit">
  </form><br>
</body></html>)rawliteral";

void notFound(AsyncWebServerRequest *request) {
  request->send(404, "text/plain", "Not found");
}

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  if (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("WiFi Failed!");
    return;
  }
  Serial.println();
  Serial.print("IP Address: ");
  Serial.println(WiFi.localIP());

  // Send web page with input fields to client
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html);
  });

  // GET request to <ESP_IP>/post?xxx=yyy
  server.on("/get", HTTP_GET, [] (AsyncWebServerRequest *request) {
    int params = request->params();
    for(int i=0;i<params;i++){
      AsyncWebParameter* p = request->getParam(i);
      Serial.printf("GET[%s]: %s\n", p->name().c_str(), p->value().c_str());
    }

    request->send(200, "text/html", "HTTP GET request sent to your ESP on input");
  });

  // POST request to <ESP_IP>/post
  server.on("/post", HTTP_POST, [](AsyncWebServerRequest *request){
    int params = request->params();
    for(int i=0;i<params;i++){
      AsyncWebParameter* p = request->getParam(i);
      Serial.printf("POST[%s]: %s\n", p->name().c_str(), p->value().c_str());
    }
    request->send(200, "text/html", "HTTP POST request sent to your ESP on input");
  });

  server.onNotFound(notFound);
  server.begin();
}

void loop() {

}

说明提点

1,修改代码中的YOUR_SSID和YOUR_PASSWORD,将其替换为您的Wi-Fi网络凭据。

2,将ESP32连接到计算机,然后在Arduino IDE中选择正确的端口和开发板。

3,上传代码到ESP32。

4,代码上传成功后,打开串行监视器。在串行监视器,您应该会看到ESP32连接到Wi-Fi网络的消息。一旦连接成功,它将显示“IP Address:xxx.xxx.xxx.xxx”。

klhj34lk5h3h3l;

5,在浏览器中输入ESP32的IP地址

可用看到如下输入框,在POST Input中输入需要提交的数据,按「Submit」后,即可在串口监视器中ESP32返回刚才提交的数据。

1687758078039

以下是GET数据的用法,与POST类似。

1687758816123