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

ESP32与ESP8266 WiFi通信失败:连接被对等方重置错误

排查ESP32与ESP8266基于ESPAsyncWebServer通信时的"Connection reset by peer"(errno:104)问题

1. 固件与库版本兼容性

ESPAsyncWebServer在ESP32和ESP8266上的底层依赖不同(ESP32用AsyncTCP,ESP8266用ESPAsyncTCP),版本不匹配是常见触发点:

  • 确保两台设备使用同版本的ESPAsyncWebServer,且对应依赖库版本与主库兼容。
  • 检查Arduino Core版本:ESP32建议用2.0.x稳定版,ESP8266建议用3.0.x稳定版,避免因核心API差异导致连接异常。

2. WiFi网络环境验证

  • 确认ESP32与ESP8266处于同一WiFi网段,打印双方IP地址,用客户端设备ping服务器IP(ESP32用WiFi.ping(serverIP),ESP8266用ping(serverIP)),验证网络可达性。
  • 切换WiFi信道到1、6、11这类通用信道,部分ESP32模块对高信道兼容性较差。
  • 关闭路由器的AP隔离功能,避免设备间通信被硬件限制。

3. 代码细节排查

服务器端

  • 检查路由路径完全匹配:客户端请求的URL路径(包括大小写、参数)必须与服务器server.on()注册的路径一致,路径不匹配可能触发服务器主动断开连接。
  • 确保loop函数中持续调用server.handleClient(),否则服务器无法处理新连接或维持现有连接。
  • 避免设置过长的连接超时,超时时间过长可能导致连接被系统强制重置。

客户端

  • 务必在请求完成后调用http.end()释放HTTPClient资源,资源泄漏会导致后续连接失败。示例代码:
    HTTPClient http;
    if (http.begin("http://192.168.1.100/data")) {
      int httpCode = http.GET();
      // 处理响应逻辑
      http.end(); // 必须调用以释放资源
    }
    
  • 设置合理的超时时间:http.setTimeout(5000)(5秒),避免因网络延迟导致连接被判定为失效。
  • ESP32客户端建议使用库适配的异步API,避免直接使用WiFiClient建立连接,减少TCP栈差异带来的问题。

4. 硬件与供电排查

  • ESP32对供电要求较高,使用5V/2A电源供电,避免依赖电脑USB口的弱供电导致WiFi模块工作不稳定。
  • 检查双方WiFi天线是否牢固连接,信号强度弱会引发连接频繁中断重置。

5. 深度调试手段

  • 开启串口调试日志:
    • ESP32:Serial.setDebugOutput(true);,查看TCP连接的握手、数据传输及断开细节。
    • ESP8266:DEBUG_ESP_PORT.begin(115200);,启用ESPAsyncWebServer的调试输出,定位连接过程中的异常节点。
  • 用Wireshark抓包分析TCP报文,确认是ESP32还是ESP8266主动发送RST包,精准定位问题来源。

内容的提问来源于stack exchange,提问作者Yigit Sirin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:24:50