You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32使用ESPAsyncWebServer.h库编译报错问题求助

ESP32 ESPAsyncWebServer 编译报错排查与多Web服务器实现

一、编译报错常见解决方法

先解决基础编译问题,常见触发点及修复方案:

  • 依赖库缺失:ESPAsyncWebServer必须搭配AsyncTCP库使用。
    • 若用PlatformIO,在platformio.ini中添加依赖:
      lib_deps =
        ESPAsyncWebServer
        AsyncTCP
      
    • 若用Arduino IDE,直接通过库管理器搜索安装这两个库。
  • 版本不兼容:确保ESP32开发板核心版本(建议2.0.x及以上)与库版本匹配,优先使用最新稳定版。
  • 代码基础错误:检查是否遗漏WiFi初始化步骤,或存在语法错误。比如最简可运行示例需包含WiFi连接逻辑:
    #include <WiFi.h>
    #include <ESPAsyncWebServer.h>
    
    const char* ssid = "YOUR_SSID";
    const char* password = "YOUR_PASSWORD";
    
    AsyncWebServer server(80);
    
    void setup(){
      Serial.begin(115200);
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.println("Connecting to WiFi..");
      }
      Serial.println(WiFi.localIP());
    
      server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
        request->send(200, "text/plain", "Hello World");
      });
    
      server.begin();
    }
    
    void loop(){}
    

二、多Web服务器(多端口监听)实现

ESPAsyncWebServer支持同时启动多个独立服务器实例,监听不同端口,实现步骤如下:

  1. 定义多个AsyncWebServer对象,对应不同端口:
    AsyncWebServer serverMain(80);  // 主服务器,端口80
    AsyncWebServer serverSecondary(8080); // 次级服务器,端口8080
    
  2. 为每个服务器独立配置路由与回调逻辑:
    // 主服务器路由配置
    serverMain.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
      request->send(200, "text/plain", "Main Server (Port 80)");
    });
    serverMain.on("/api", HTTP_GET, [](AsyncWebServerRequest *request){
      request->send(200, "application/json", "{\"status\":\"ok\",\"server\":\"main\"}");
    });
    
    // 次级服务器路由配置
    serverSecondary.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
      request->send(200, "text/plain", "Secondary Server (Port 8080)");
    });
    serverSecondary.on("/data", HTTP_GET, [](AsyncWebServerRequest *request){
      request->send(200, "text/plain", "Sensor Data from Secondary Server");
    });
    
  3. 启动所有服务器:
    serverMain.begin();
    serverSecondary.begin();
    
  4. 注意事项:
    • ESP32网络资源有限,建议最多启动2-3个服务器实例。
    • 各服务器路由完全独立,请求将根据访问端口分发到对应实例。
    • 若需实现HTTPS多服务器,每个实例需独立配置SSL证书。

完整可运行示例代码:

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

const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

AsyncWebServer serverMain(80);
AsyncWebServer serverSecondary(8080);

void setup() {
  Serial.begin(115200);
  
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi connected");
  Serial.println("IP address: " + WiFi.localIP().toString());

  // 主服务器路由
  serverMain.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->send(200, "text/plain", "Main Web Server - Port 80");
  });
  serverMain.on("/api", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->send(200, "application/json", "{\"status\":\"ok\",\"server\":\"main\"}");
  });

  // 次级服务器路由
  serverSecondary.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->send(200, "text/plain", "Secondary Web Server - Port 8080");
  });
  serverSecondary.on("/data", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->send(200, "text/plain", "Sensor Data from Secondary Server");
  });

  serverMain.begin();
  serverSecondary.begin();
  Serial.println("Both servers started");
}

void loop() {}

三、进阶排查技巧

若编译仍报错,可尝试:

  • 更新ESP32开发板包:在Arduino IDE的「文件>首选项」中确认附加网址为https://dl.espressif.com/dl/package_esp32_index.json,然后在开发板管理器中更新。
  • 清理项目缓存:点击「项目>清理项目文件夹」后重新编译。
  • 检查代码冲突:确认无重复定义的变量、函数,或回调逻辑语法错误。

内容的提问来源于stack exchange,提问作者Nur Sidiq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 01:03:29