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

ESP32 STA模式下WiFi.status()始终返回WL_DISCONNECTED问题求助

问题根因

你代码里的核心错误是调用WiFi.begin()后没有添加等待连接的延时/轮询逻辑,直接读取WiFi.status()导致永远返回连接失败。WiFi.begin()只是发起连接请求,ESP32完成WiFi鉴权、IP分配需要几十到几百毫秒不等,你立即读取状态时连接流程还没启动,自然始终返回WL_DISCONNECTED。另外注意WiFi类名大小写敏感,你代码里的Wifi.begin拼写错误也可能引发异常。

修正后的参考代码

WiFi.mode(WIFI_STA);
// 连接前清除旧的连接配置,比单纯disconnect更彻底
WiFi.disconnect(true, true);
delay(100);

int attempt = 0;
const int MAX_ATTEMPTS = 20; // 单次最大重试次数,避免死循环
const int CONNECT_TIMEOUT_MS = 500; // 每次尝试的等待超时时长

for(;;) {
    attempt++;
    WiFi.begin(ssid, password);
    
    // 新增:等待连接完成或超时
    unsigned long startMillis = millis();
    wl_status_t status = WL_DISCONNECTED;
    while (millis() - startMillis < CONNECT_TIMEOUT_MS) {
        status = WiFi.status();
        if (status == WL_CONNECTED) {
            break;
        }
        delay(50);
    }

    String m = connectionStatusMessage(status);
    log("Connection attempt %d: status is%s", attempt, m.c_str());

    if (status == WL_CONNECTED) {       
        Serial.println();
        success("connected (WL_CONNECTED)");
        information();
        break;
    }

    // 超过最大重试次数后复位WiFi模块
    if (attempt >= MAX_ATTEMPTS) {
        log("Maximum connection attempts reached, resetting WiFi");
        WiFi.disconnect(true, true);
        delay(1000);
        attempt = 0;
    }
}

额外排查建议

  • 确认传入的ssid、password变量值正确,无多余空格、大小写错误,ESP32暂不支持中文SSID
  • 检查路由器配置:确认开启2.4G WiFi频段(ESP32不支持5G频段)、未开启AP隔离、接入设备数未达上限
  • 若仍连接失败,可在等待连接的循环中打印每一步的status值,定位是卡在鉴权阶段还是IP分配阶段

内容的提问来源于stack exchange,提问作者Stéphane de Luca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:45:01