双ESP8266通过WiFi HTTP传输温度数据时HTTPC连接失败问题求助
问题根因与修复方案
1. 服务端头文件冲突(首要故障原因)
你当前服务端代码同时引入了ESP32专属的WiFi.h和ESP8266的ESP8266WiFi.h,两套WiFi驱动冲突会导致软AP网络栈不稳定,出现连接成功但HTTP服务无响应的问题,先删除#include "WiFi.h"这一行。
另外ESP8266平台使用ESPAsyncWebServer需要配套引入ESPAsyncTCP.h,请在服务端头文件区域补充这行引入。
2. 服务端CPU调度优化
你当前服务端loop间隔仅10ms,几乎占满单核心CPU资源,导致异步WebServer没有足够算力处理网络请求,出现连接超时,做两处修改:
- 降低A0采样频率,改为1秒采样1次即可,温度采样不需要10ms级的高频
- loop末尾添加
yield();,主动让出CPU资源给系统处理WiFi和网络请求 - 补充
voltage变量初始化,避免启动时读取未初始化值导致readTemp计算出非法值(负数/NaN),触发服务端崩溃
3. 客户端HTTP调用规范修复
新版ESP8266的HTTPClient库要求begin方法必须传入WiFiClient实例,你当前调用方式不符合规范会导致连接失败,修改客户端loop内的HTTP调用逻辑:
if (WiFi.status() == WL_CONNECTED) { WiFiClient client; HTTPClient http; // 必须传入client实例才符合新版库的调用要求 if (http.begin(client, "http://192.168.4.1/temperature")) { int httpCode = http.GET(); if (httpCode > 0) { String payload = http.getString(); Serial.println("/////////////////////////////////////////////////////////////"); Serial.println(payload); } else { Serial.println(http.errorToString(httpCode).c_str()); } http.end(); } }
4. A0采样与WiFi冲突修复
ESP8266的ADC采样和WiFi射频工作存在硬件资源冲突,高频采样会干扰WiFi信号收发,修改采样逻辑:
- 采样前临时关闭射频,采样完成后立刻恢复,代码示例:
wifi_set_sleep_type(NONE_SLEEP_T); delay(1); sensorValue = analogRead(0); wifi_set_sleep_type(LIGHT_SLEEP_T);
5. 软AP稳定性优化
显式设置软AP最大连接数,避免多设备连接时溢出,修改软AP初始化代码:
// 最后一个参数设置最大连接数为2,足够客户端+手机调试使用 WiFi.softAP(ssid, password, 1, 0, 2);
内容的提问来源于stack exchange,提问作者Philipp Kleinheider
相关产品推荐
相关产品推荐

