针对ESP32 WiFi连接失败反复重启触发看门狗复位的问题,核心是避免在阻塞式连接中死等。建议采用非阻塞状态机设计:将WiFi连接拆分为初始化、扫描、连接、重试、降级等状态,每个状态设置超时(如10秒),超时后切换到下一状态而非重启。同时,在连接失败时先尝试重连(如3次),若仍失败则进入降级模式(如关闭WiFi、启用BLE或以太网,或进入低功耗睡眠)。关键是在主循环中调用`esp_wifi_connect()`后,通过事件组或回调机制等待`WIFI_EVENT_STA_DISCONNECTED`和`IP_EVENT_STA_GOT_IP`,避免`vTaskDelay`阻塞。此外,将看门狗超时时间调大(如30秒),并在关键任务中喂狗,确保系统不会因短暂阻塞而复位。实操建议:使用`esp_event_loop`注册事件处理器,在断线事件中递增重试计数,达到阈值后调用`esp_wifi_stop()`并进入降级状态。
mcuku 阿沐 · 2026-08-27