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

ESP32启用ESP-NOW时HTTPClient请求返回状态码-1问题咨询

问题背景

项目组网及逻辑如下:

  • 终端采集层:2台ESP8266外接环境传感器,负责采集原始环境数据
  • 汇聚网关节点:1台ESP32,负责接收采集节点上传的数据,工作在Wi-Fi STA模式连接路由器接入互联网,通过HTTPClient组件将数据转发至自建Node.js Web服务,服务端解析数据后写入数据库
  • 设备间传输:最初采用ESP-NOW实现采集节点到网关的数据传输,曾更换painlessmesh库做组网测试

故障现象

  • 单跑网关HTTP上传逻辑:不启用ESP-NOW及跨设备连接,ESP32传入模拟测试数据发起请求时,可正常收到200状态码,上传链路正常
  • 单跑设备间组网逻辑:仅启用ESP-NOW建立设备通信链路,不触发HTTP上传请求时,多设备间数据收发完全正常,无丢包、断连问题
  • 双逻辑同时运行:ESP32同时处理ESP-NOW数据收发、调用HTTPClient向Web服务器发请求时,HTTP请求固定返回状态码-1(连接被拒绝),更换painlessmesh库后故障完全复现
故障根因

该问题是ESP系列芯片Wi-Fi与ESP-NOW共存的典型配置冲突:
ESP-NOW与常规Wi-Fi STA模式共用2.4G射频前端,若所有设备的ESP-NOW工作信道与路由器2.4G Wi-Fi信道不一致,ESP-NOW在收发数据时会自动触发射频信道切换,导致ESP32与路由器的STA连接瞬断;此时发起HTTP请求无法完成TCP三次握手,直接返回连接拒绝错误。painlessmesh底层基于ESP-NOW实现,未做信道固定配置时同样会触发自动信道切换,因此更换库无法解决问题。

解决方案

按以下步骤配置即可解决:

  • 固定全链路工作信道
    1. 登录路由器管理后台,查看2.4G Wi-Fi的当前工作信道(注意ESP-NOW不支持5G频段,必须匹配2.4G信道)
    2. 所有ESP8266、ESP32设备初始化Wi-Fi与ESP-NOW前,强制设置射频信道与路由器一致,参考代码:
      // ESP8266平台设置信道
      wifi_set_channel(ROUTER_2G_CHANNEL);
      // ESP32平台设置信道
      esp_wifi_set_channel(ROUTER_2G_CHANNEL, WIFI_SECOND_CHAN_NONE);
      
    3. 关闭ESP-NOW、painlessmesh的自动信道扫描/自动跳信道功能,所有组网节点固定使用相同信道
  • 调整射频资源调度配置
    1. ESP32初始化STA模式时关闭Wi-Fi省电模式,避免射频资源被自动调度切断:
      WiFi.setSleep(false);
      
    2. ESP-NOW的发送、接收回调函数中禁止放置任何阻塞逻辑,禁止直接在回调中调用HTTP上传接口;收到的传感器数据先存入全局队列/环形缓冲区,在loop()主循环中检测到队列有数据时再发起上传请求
  • 增加上传链路容错
    1. 每次发起HTTP请求前先检测STA连接状态,若未连接路由器则等待重连完成后再发请求
    2. 给HTTPClient设置5~10s的合理超时时间,增加最多3次的失败重试逻辑,避免偶发射频调度导致的数据上传失败
  • 若使用painlessmesh组网,额外配置mesh网络固定工作在路由器对应信道,关闭mesh组网阶段的全信道扫描逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:55:14