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.xue1 天前
系统服务层设计:沉淀通用能力,让业务层只专注业务
stm32·单片机·嵌入式硬件·mcu·物联网·esp32
零涂毕业设计9 天前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled
乐鑫科技 Espressif12 天前
用 AI 开发 Zephyr-IoT 应用
人工智能·物联网·esp32·乐鑫科技·zephyr
nLif14 天前
Anemoia-ESP32 串口手柄代码
esp32
乐鑫科技 Espressif17 天前
ESP-Claw 全面升级,打造可共享、可复用的设备端 AI Skills 生态
人工智能·esp32·乐鑫科技
Starry-sky(jing)1 个月前
Win11 装 ESP32 Arduino 库卡 3 小时?我把官方 3.3.10 全平台 522MB 搬到了蓝奏云,解压即用
运维·windows·esp32·arduino·离线安装
π同学1 个月前
ESP-IDF+vscode开发ESP32第十七讲——USB设备栈
vscode·esp32·usb
欢乐熊嵌入式编程2 个月前
选型避坑:ESP32 vs STM32+模组 vs NB-IoT,不同场景怎么选
stm32·单片机·嵌入式硬件·物联网·esp32·嵌入式iot
欢乐熊嵌入式编程2 个月前
WIFI通信协议全解析18: ESP32 作为 AP 热点:打造自己的“微型路由器”(附完整实战代码)
物联网·wifi·esp32·蓝牙·wifi协议·ap热点