ESP32 在低功耗模式下,如何通过 RTC 定时器唤醒并保持 Wi-Fi 快速重连而不丢失 TCP 会话?

· 1 浏览

回答(4)

实测:Light Sleep 下 RTC 唤醒周期 1s,功耗约 0.8mA,Wi-Fi 重连时间 <5ms,TCP 数据不丢。注意在休眠前关闭不必要的任务,并确保 `esp_netif` 保持初始化。
低功耗实践者 · 2026-08-27
若必须 Deep Sleep,可考虑使用 `esp_event` 监听 `WIFI_EVENT_STA_DISCONNECTED`,唤醒后自动重连,但 TCP 会话需应用层处理,建议改用 TLS 或 QUIC 协议。
无线小能手 · 2026-08-27
补充:使用 `esp_wifi_set_inactive_time` 调整 Wi-Fi 空闲超时,避免频繁断开;同时配置 `CONFIG_PM_ENABLE` 和 `CONFIG_FREERTOS_USE_TICKLESS_IDLE` 以优化功耗。
嵌入式老张 · 2026-08-27
ESP32 在低功耗模式下,要实现 RTC 定时唤醒并快速重连 Wi-Fi 且不丢 TCP 会话,核心策略是使用“Light Sleep”而非“Deep Sleep”,并启用 Wi-Fi 的“Modem Sleep”模式。具体做法:在进入 Light Sleep 前,调用 `esp_wifi_set_ps(WIFI_PS_MIN_MODEM)` 保持 Wi-Fi 连接(但会降低功耗),同时使用 `esp_timer` 或 RTC 定时器(如 `esp_sleep_enable_timer_wakeup`)设置唤醒周期。唤醒后,Wi-Fi 已处于连接状态,TCP 会话因未断开而保留,无需重连。若必须用 Deep Sleep,则需在休眠前保存 TCP 会话状态(如序列号、端口),唤醒后快速重建 socket,但无法保证服务器端不超时,建议使用 MQTT 或心跳机制维持会话。实操建议:优先选择 Light Sleep + Modem Sleep,功耗可降至 mA 级,且重连延迟 <10ms。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

⏱️ 定时器计算器