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);
}

运行结果

相关推荐
殷忆枫15 小时前
基于ESP32 的局域网全双工对讲系统
单片机·嵌入式硬件·esp32·对讲系统
ITKEY_2 天前
嵌入式ESP32初学踩坑记录
esp32
EatFan13 天前
全栈自造 Status Deck(四):硬件终于到了,从点亮屏幕到跑通第一个 Demo
单片机·物联网·esp32
攸尔的笔记本~16 天前
ESP32-C3的WIFI信号飘忽不定、连接不了
esp32·射频·硬件设计
乐鑫科技 Espressif18 天前
案例研究:基于 ESP32-C5 与 ESP RainMaker 构建符合 EN 18031 标准的 IoT 解决方案
esp32·乐鑫科技·rainmaker
jianqiang.xue19 天前
ESP-IDF保姆级入门41|产品级故障排查与稳定性优化全解:死机复位排查/内存泄漏定位/性能瓶颈分析/长期稳定性测试,掌握量产运维问题定位方法论
单片机·mcu·物联网·esp32
jianqiang.xue20 天前
ESP-IDF保姆级入门40|量产烧录与产线测试全解:批量烧录方案/校准流程/功能测试/不良分拣/产线追溯,掌握工业级量产交付全流程
单片机·物联网·esp32
jianqiang.xue21 天前
ESP-IDF保姆级入门39|固件安全与安全启动全解:签名校验/Flash加密/防回滚/OTP密钥/知识产权保护,掌握工业级固件安全防护体系
单片机·物联网·esp32
jianqiang.xue22 天前
ESP-IDF保姆级入门38|电源管理与锂电池充电全解:充电拓扑/电源路径控制/充放电保护/电量检测/低功耗策略,掌握嵌入式电池供电系统设计
单片机·嵌入式·esp32
jianqiang.xue23 天前
ESP-IDF保姆级入门35|SDMMC高速SD卡全解:SDIO接口/4位高速模式/FATFS文件系统/热插拔检测/磨损均衡,掌握嵌入式大容量存储扩展
单片机·esp32