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

运行结果

相关推荐
jianqiang.xue4 小时前
ESP-IDF保姆级入门39|固件安全与安全启动全解:签名校验/Flash加密/防回滚/OTP密钥/知识产权保护,掌握工业级固件安全防护体系
单片机·物联网·esp32
jianqiang.xue1 天前
ESP-IDF保姆级入门38|电源管理与锂电池充电全解:充电拓扑/电源路径控制/充放电保护/电量检测/低功耗策略,掌握嵌入式电池供电系统设计
单片机·嵌入式·esp32
jianqiang.xue2 天前
ESP-IDF保姆级入门35|SDMMC高速SD卡全解:SDIO接口/4位高速模式/FATFS文件系统/热插拔检测/磨损均衡,掌握嵌入式大容量存储扩展
单片机·esp32
国产化创客2 天前
创客开发入门(五)Arduino IDE 编程基础
单片机·嵌入式硬件·物联网·esp32
智码看视界3 天前
Edge AI 与 IoT 全栈系列:Edge AI 全栈 2:ESP32 + MQTT + Flink 实时 IoT 数据管道
物联网·flink·esp32·全栈开发·iot平台·实时流处理·edgeai
jianqiang.xue7 天前
收官:从v0.1到“研发新常态“,一套嵌入式智能体的落地与边界
stm32·单片机·物联网·架构·esp32
linnux领域7 天前
面包板供电“插哪都不亮“?一个暗断点引发的排查——硬件新手三板斧
单片机·嵌入式硬件·esp32·arduino·面包板·硬件入门
jianqiang.xue8 天前
审查技能库(上):内存安全四件套
stm32·单片机·物联网·架构·esp32
长江后浪博客9 天前
ESP32-SOLO-1 在 ESP-IDF v5.5 下启动不断重启问题分析与解决
单片机·嵌入式硬件·嵌入式·esp32·freertos·esp-idf
jianqiang.xue9 天前
ESP-IDF保姆级入门19|低功耗模式全解与工程化设计:分级休眠/唤醒源配置/功耗调优/外设适配,实现工业级功耗性能平衡
stm32·单片机·物联网·架构·esp32