arduino+esp32

安装库

连接开发板

编程

复制代码
#include <WiFi.h>

// ================= WiFi 配置 =================
const char* WIFI_SSID = "REDME K80";       // ⚠️ 仅支持 2.4GHz
const char* WIFI_PASS = "123123123";       // ⚠️ 推荐 WPA2-PSK(AES)
const uint32_t WIFI_TIMEOUT_MS = 15000;    // 连接超时时间(ms)
// =============================================

/**
 * @brief 将 WiFi 状态码转换为人类可读的错误信息
 */
const char* getWifiStatusStr(wl_status_t status) {
    switch (status) {
        case WL_NO_SHIELD:        return "未检测到WiFi模块(硬件故障)";
        case WL_IDLE_STATUS:      return "空闲状态(尚未开始连接)";
        case WL_NO_SSID_AVAIL:    return "❌ 找不到指定的SSID(请检查名称或2.4G频段)";
        case WL_SCAN_COMPLETED:   return "扫描完成(非连接状态)";
        case WL_CONNECTED:        return "✅ 已成功连接";
        case WL_CONNECT_FAILED:   return "❌ 连接失败(通常是密码错误或WPA3兼容问题)";
        case WL_CONNECTION_LOST:  return "⚠️ 连接丢失(信号弱或路由器主动断开)";
        case WL_DISCONNECTED:     return "已断开连接";
        default:                  return "未知状态";
    }
}

void setup() {
    Serial.begin(115200);
    delay(1000); // 等待 USB-CDC 枚举稳定
    
    Serial.println("\n===== ESP32-C3 WiFi 诊断测试 =====");
    Serial.printf("目标热点: [%s]\n", WIFI_SSID);
    
    WiFi.mode(WIFI_STA);
    WiFi.setAutoReconnect(false); // 关闭自动重连,便于捕获初始连接的真实错误
    WiFi.begin(WIFI_SSID, WIFI_PASS);
    
    Serial.print("正在连接");
    uint32_t startTime = millis();
    wl_status_t lastStatus = WL_IDLE_STATUS;
    
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
        
        // 实时捕获并打印状态变化
        wl_status_t currentStatus = WiFi.status();
        if (currentStatus != lastStatus) {
            Serial.printf("\n[状态变更] %s\n", getWifiStatusStr(currentStatus));
            lastStatus = currentStatus;
        }
        
        // 超时退出
        if (millis() - startTime > WIFI_TIMEOUT_MS) {
            Serial.println("\n================================");
            Serial.println("⏱️ 连接超时!");
            Serial.printf("最终状态码: %d\n", (int)WiFi.status());
            Serial.printf("诊断结果: %s\n", getWifiStatusStr(WiFi.status()));
            Serial.println("================================");
            return; 
        }
    }
    
    // ✅ 连接成功,打印网络信息
    Serial.println("\n================================");
    Serial.println(getWifiStatusStr(WL_CONNECTED));
    Serial.println("--------------------------------");
    Serial.printf("IP 地址   : %s\n", WiFi.localIP().toString().c_str());
    Serial.printf("子网掩码  : %s\n", WiFi.subnetMask().toString().c_str());
    Serial.printf("网关      : %s\n", WiFi.gatewayIP().toString().c_str());
    Serial.printf("DNS       : %s\n", WiFi.dnsIP().toString().c_str());
    Serial.printf("MAC 地址  : %s\n", WiFi.macAddress().c_str());
    Serial.printf("信号强度  : %d dBm\n", WiFi.RSSI());
    Serial.printf("信道      : %d\n", WiFi.channel());
    Serial.println("================================");
}

void loop() {
    // 纯测试代码,loop 保持空闲
    delay(1000);
}

运行结果

相关推荐
智码看视界5 天前
Edge AI 与 IoT 全栈:云端时序数据库 + Grafana 看板,把数据变成洞察
物联网·mqtt·esp32·时序数据库·influxdb·tdengine
天空'之城7 天前
009基于物联网的智能厨房安全监测系统
毕业设计·esp32·电磁阀·厨房安全·燃气检测
天空'之城12 天前
004基于语音识别的智能家居本地控制系统
毕业设计·esp32·智能家居·语音识别·离线控制
weixin_4043806317 天前
MQTT 上云验收:ESP32-S3 从局域网控灯到远程网页控制
物联网·mqtt·esp32
探鸽小钛18 天前
4G 终端 ES8311 - 挂断一次,下次说话就没声了之解决办法
物联网·音视频·嵌入式·esp32·webrtc
光子物联单片机19 天前
ESP32传感器模块编程实践(一)DIY智能WIFI视频控制小车
嵌入式硬件·esp32·智能硬件·硬件
编码追梦人19 天前
基于 ESP32-S3 的便携式多参数环境监护仪设计:从硬件选型到 FreeRTOS 多任务落地
数据库·单片机·嵌入式硬件·mongodb·esp32·freertos·低功耗设计
Keith Guo20 天前
ESP32-S31 分区表的访问流程图
流程图·esp32
Keith Guo23 天前
Event Task Matrix(ETM)工作机制
驱动开发·esp32·etm
星野云联AIoT技术洞察1 个月前
ESP32 接入 Meta Muse:Gadget SDK 能做什么,为什么不能直接做商业设备
esp32·agent·token·边缘ai·meta muse·mcu选型