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
相关产品推荐
相关产品推荐

