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

如何修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:50:23