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

ESP8266客户端无法连接自建ESP8266WebServer服务端问题求助

故障原因及修复方案

核心问题1:服务端WiFi模式配置冲突

  • 服务端代码中同时设置了WiFi.mode(WIFI_AP)(热点模式)和WiFi.begin(ssid, password)(连接现有路由器的STA模式),两种模式冲突导致服务端无法正确接入局域网被客户端发现。
  • 修复方案:如果两个设备都要接入同一个现有路由器,将服务端的WiFi.mode(WIFI_AP)改为WiFi.mode(WIFI_STA)即可。如果要让客户端直接连接服务端的热点,删除WiFi.begin相关代码,单独配置AP参数即可。

问题2:客户端WiFi密码拼写错误

  • 客户端代码中WiFi密码写为Wifipassowrd,和服务端的WifiPassword拼写不一致,会导致客户端无法接入同一WiFi网络,自然无法连接服务端。
  • 修复方案:统一两端的WiFi SSID和密码配置。

问题3:客户端HTTP请求格式错误

  • 客户端构造GET请求时,URL和HTTP协议版本之间没有空格,生成的请求为GET /update?value=25.0HTTP/1.1,属于非法HTTP请求,就算连接成功也会被服务端拒绝。
  • 修复方案:在请求拼接处加空格,改为client.print(String("GET /") + url + " HTTP/1.1\r\n"。

问题4:客户端连接未正确释放

  • 循环中重复使用同一个WiFiClient对象,上次请求的连接没有释放会导致后续连接失败。
  • 修复方案:每次请求结束后调用client.stop()释放连接。

修正后的核心代码片段

服务端修改部分

// 服务端setup里修改WiFi模式
void setup(){
  Serial.begin(115200);
  WiFi.mode(WIFI_STA); // 改为STA模式接入现有路由器

  // 其余代码不变
  // 另外把handleIndex里的Content-Type前面的空格去掉
  server.send(200,"text/html",Website);
}

客户端修改部分

// 首先修正密码拼写
const char* password = "WifiPassword";

void loop() {
  if(client.connect(host, port)){
    String url = "update?value=";
    url+=String(25.0);
    // 加空格修正HTTP请求格式
    client.print(String("GET /") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" +
    "Connection: close\r\n\r\n");
    delay(10);

    Serial.println("Response: ");
    while(client.available()){
      String line = client.readStringUntil('\r');
      Serial.print(line);
    }
    // 请求结束后关闭连接
    client.stop();
  }else{
    Serial.println("fail");
    // 连接失败也释放资源
    client.stop();
  }
  // 加延时避免请求过于频繁
  delay(1000);
}

验证步骤

  1. 烧录修改后的代码后,先查看服务端串口输出的IP地址,确保和客户端配置的host一致。
  2. 用手机或电脑连接同一个WiFi,访问服务端IP,看是否能正常打开页面,确认服务端运行正常。
  3. 再启动客户端,查看串口输出是否能正常收到服务端返回的Updated响应。

内容的提问来源于stack exchange,提问作者tw.C4444

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:36:02