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

ESP32可扫描WiFi但无法连接路由器,WiFi.status返回6(Arduino IDE)

ESP32 WiFi连接失败(状态码6)排查与解决

一、代码逻辑问题修正

你的代码存在几个影响连接的细节:

  1. 过早检测连接状态:在WiFi.begin()后立刻调用WiFi.status(),此时连接流程尚未启动,必然返回6(WL_DISCONNECTED),这个值不代表最终连接结果。
  2. 频繁断开重连的无效操作:循环中每次检测未连接就执行WiFi.disconnect()+WiFi.reconnect(),会打断正在进行的连接尝试,反而降低成功率。

修正后的代码示例:

#include<WiFi.h>

const char *ssid = "my_SSID";
const char *password = "my_Password";
const unsigned long CONNECT_TIMEOUT = 20000; // 20秒超时

void setup()
{
    Serial.begin(115200);
    delay(2000);
    WiFi.mode(WIFI_STA);
    WiFi.disconnect();
    delay(100);

    Serial.println("scan start");
    int n = WiFi.scanNetworks();
    Serial.println("scan done");
    if (n == 0) {
        Serial.println("no networks found");
    } else {
        Serial.print(n);
        Serial.println(" networks found");
        // 打印扫描到的目标网络信号强度,确认信号质量
        for (int i = 0; i < n; ++i) {
            if (strcmp(WiFi.SSID(i).c_str(), ssid) == 0) {
                Serial.print("目标WiFi信号强度: ");
                Serial.println(WiFi.RSSI(i));
                break;
            }
        }
    }

    Serial.print("正在连接 ");
    Serial.println(ssid);
    WiFi.begin(ssid, password);

    unsigned long startMillis = millis();
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
        // 超时退出,避免无限循环
        if (millis() - startMillis > CONNECT_TIMEOUT) {
            Serial.println("\n连接超时");
            break;
        }
    }

    if (WiFi.status() == WL_CONNECTED) {
        Serial.println("\nWiFi connected.");
        Serial.println("ESP32 IP address: ");
        Serial.println(WiFi.localIP());
    } else {
        Serial.print("\n最终连接状态码: ");
        Serial.println(WiFi.status());
        // 打印状态对应的描述
        switch(WiFi.status()){
            case WL_NO_SSID_AVAIL: Serial.println("未找到指定SSID"); break;
            case WL_CONNECT_FAILED: Serial.println("密码错误或连接被拒绝"); break;
            case WL_DISCONNECTED: Serial.println("已断开连接"); break;
        }
    }
}

void loop() {}

二、路由器侧排查

  • WiFi频段与信道:ESP32对5G WiFi的部分DFS信道(如149及以上)支持受限,优先切换路由器到2.4G频段,或选择非DFS的5G信道(如36-48)。
  • 加密方式:确保路由器使用WPA2-PSK(AES)加密,ESP32的Arduino库对WPA3支持不完善,若路由器开启WPA3,需切换为WPA2。
  • MAC地址过滤:检查路由器是否启用MAC地址白名单,若开启,需将ESP32的MAC地址添加到允许列表(可通过Serial.println(WiFi.macAddress())获取ESP32的MAC)。
  • 信号强度:若目标WiFi的RSSI值低于-70dBm,说明信号过弱,尝试靠近路由器测试,或增加WiFi中继。
  • 连接数限制:部分低端路由器有最大连接设备数限制,若已达上限,会拒绝新设备连接。

三、硬件与环境排查

  • 电源供应:ESP32连接WiFi时功耗较高,若使用USB端口供电,确保USB线质量良好,避免电压不足导致连接失败(可尝试使用独立3.3V电源模块)。
  • 环境干扰:避开微波炉、蓝牙设备等强干扰源,这类设备会影响2.4G WiFi信号稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:25:28