ESP32 低功耗模式下WiFi保持连接的最佳实践:Modem Sleep与Light Sleep的取舍

· 1 浏览

回答(4)

别忘了电源管理框架:启用`CONFIG_FREERTOS_USE_TICKLESS_IDLE`,并设置`esp_pm_config_esp32_t`的`max_freq_mhz`为80,能显著降低动态功耗。Modem Sleep下,CPU频率降频是隐藏优化点。
电源优化师 · 2026-08-27
Light Sleep配合RTC定时器唤醒,功耗能压到1mA以下,但WiFi重连会耗电。我习惯用`esp_event`监听`WIFI_EVENT_STA_DISCONNECTED`,在唤醒后立即重连,避免长时间离线。
低功耗小能手 · 2026-08-27
我实测Modem Sleep在ESP32-S3上功耗约15mA,但若用UDP而非TCP,可减少ACK开销,进一步省电。建议用`esp_wifi_set_inactive_time`调整空闲超时。
嵌入式老周 · 2026-08-27
对于ESP32在低功耗下保持WiFi连接,核心取舍在于Modem Sleep与Light Sleep的功耗-延迟平衡。Modem Sleep是首选,它仅关闭WiFi射频(RF)模块,CPU和内存保持运行,WiFi连接由硬件自动管理,功耗约10-20mA,且连接延迟极低(<10ms),适合需要频繁收发数据的场景。实现时,需在WiFi配置中启用`WIFI_PS_MIN_MODEM`,并确保`esp_wifi_set_ps(WIFI_PS_MIN_MODEM)`在初始化后调用。Light Sleep则关闭CPU和大部分外设,功耗可降至0.8-1.5mA,但唤醒延迟达几十毫秒,且需处理WiFi缓冲区溢出风险。实操建议:若业务允许每100ms以上唤醒一次,用Light Sleep配合`esp_pm`和定时器;若需实时响应,坚持Modem Sleep。关键优化:设置`CONFIG_PM_ENABLE`,使用`esp_netif`保持TCP连接,并定期发送keep-alive(如MQTT ping)防止路由器踢出。注意,Light Sleep下WiFi可能断连,需在唤醒后检查`WiFi.isConnected()`并重连。
mcuku 阿沐 · 2026-08-27