【问题标题】:ESP32 Web Server periodic updating problemESP32 Web Server 周期性更新问题
【发布时间】:2020-10-30 14:24:55
【问题描述】:

我正在尝试将使用 UART 传输从嵌入式平台获得的一些数据发布到使用 ESP32 的 Web 服务器上。这是我正在使用的代码,我正在使用 Arduino IDE。我对 HTML 不太熟悉,并且已经看到了几个使用 HTML 通过发送请求来更新服务器值的示例。

#include <WiFi.h>
#include "ESPAsyncWebServer.h" 

AsyncWebServer server1(81); 

const char* ssid ="mywifi";
const char* password ="mywifipass";
char c;


String readuart() {
  if (Serial.available() > 0) {
    c = Serial.read();}  
  return String(c);
}

void setup() {

  Serial.begin(115200);

  WiFi.begin(ssid, password); 

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }

  Serial.println("Connected to the WiFi network");
  Serial.println(WiFi.localIP());

  server1.on("/test_data", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(200, "text/plain", readuart().c_str());
  });

  server1.begin();
  delay(100);
}

void loop() {

}

以下部分代码是发布我得到的第一个字符串,但它停在那里。

server1.on("/test_data", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200, "text/plain", readuart().c_str());
  });

我想定期更新这个字符串。我该如何做到这一点?任何帮助将不胜感激。

【问题讨论】:

  • “想要定期更新字符串”是什么意思?你的意思是你想偶尔读一下UART?或者您希望客户端(可能是 Web 浏览器或某些程序)向服务器请求新值?或者您希望服务器偶尔联系客户端并更新值?
  • 是的,我想偶尔读取 UART,并更新浏览器上的值。

标签: html webserver wifi esp32 arduino-esp8266


【解决方案1】:

听起来您希望页面每 x 秒重新加载一次。您可以将响应字符串更改为实际的 html 并使用 meta refresh tag。这发生在客户端(在网络浏览器中)。

server1.on("/test_data", HTTP_GET, [](AsyncWebServerRequest *request){
    String html = "<html><head><meta http-equiv=\"refresh\" content=\"30\"></head><body>"
         + readuart() + "</body></html>";
    request->send(200, "text/html", html.c_str());
});

30 更改为您想要的任何超时时间。

另一种选择是使用客户端 JS。

【讨论】:

  • 是的,这就是我想要做的,但是这段代码返回一个错误,说 html 没有被捕获。
  • 当我将 html 字符串放在 request->send 函数中时,它可以工作。
  • @Tea 是的,应该在 lambda 中。很高兴它有帮助。
猜你喜欢
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
  • 2019-11-18
  • 1970-01-01
  • 2022-08-22
相关资源
最近更新 更多