如何修改ESP32 AsyncWebServer默认端口实现多设备同网运行
同一网络下多台ESP32 AsyncWebServer共存配置方案
核心问题分析
多台设备共用默认80端口会引发端口冲突,改8080后无法访问通常是两个原因:访问时未指定端口、mDNS主机名重复导致解析混乱。以下是具体配置步骤:
1. 为每台设备分配唯一端口号
修改代码中AsyncWebServer的初始化端口,每台设备使用不同的非系统保留端口(推荐用1024以上,比如8080、8081、8082等):
// 示例:设备1用8080,设备2用8081 AsyncWebServer server(8080);
2. 设置唯一的mDNS主机名
所有设备默认用"esp32"作为mDNS主机名会导致解析冲突,给每台设备设置不同的主机名,同时注册对应端口的HTTP服务:
// 示例:设备1用esp32-1,设备2用esp32-2 if(!MDNS.begin("esp32-1")) { Serial.println("Error starting mDNS"); return; } // 注册对应端口的HTTP服务,让mDNS识别端口 MDNS.addService("http", "tcp", 8080);
3. 正确的访问方式
修改端口后,访问必须在IP或mDNS名后添加端口号:
- 通过IP访问:
http://192.168.x.x:8080/hello - 通过mDNS访问:
http://esp32-1.local:8080/hello
修改后的完整示例代码(单台设备)
#include <ESPmDNS.h> #include <WiFi.h> #include <ESPAsyncWebServer.h> const char* ssid = "XXXX"; const char* password = "XXXX"; // 自定义唯一端口 AsyncWebServer server(8080); void setup(){ Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi.."); } // 唯一mDNS主机名 if(!MDNS.begin("esp32-1")) { Serial.println("Error starting mDNS"); return; } // 注册对应端口的HTTP服务 MDNS.addService("http", "tcp", 8080); Serial.print("设备IP: "); Serial.println(WiFi.localIP()); Serial.print("访问地址1: http://"); Serial.println(WiFi.localIP()); Serial.print("访问地址2: http://esp32-1.local:8080"); server.on("/hello", HTTP_GET, [](AsyncWebServerRequest *request){ request->send(200, "text/plain", "Hello from ESP32-1!"); }); server.begin(); } void loop(){}
额外注意事项
- 确保路由器DHCP功能正常,每台设备能获取到唯一的局域网IP(避免IP冲突)
- 路由器不要开启对应端口的TCP流量过滤,允许设备的Web服务端口对外通信
- 若使用静态IP,需手动为每台设备配置不同的IP地址
内容的提问来源于stack exchange,提问作者tolgahann susur
相关产品推荐
相关产品推荐

