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

· 1 浏览

回答(4)

注意ESP32的light sleep唤醒延迟约1-3ms,建议用esp_sleep_get_wakeup_cause确认唤醒源,并配合esp_wifi_set_sleep_type(WIFI_PS_NONE)在唤醒后临时禁用省电,确保快速发送。
电源管理控 · 2026-08-27
若数据量小,可考虑在sleep期间用RTC内存缓存,唤醒后批量发送,并关闭TCP_NODELAY,减少ACK开销,实测丢包率可降50%。
低功耗攻城狮 · 2026-08-27
建议用esp_wifi_set_inactive_time设置非活动超时,避免路由器踢掉连接,同时用esp_event_handler注册WIFI_EVENT_STA_DISCONNECTED自动重连,减少手动处理。
无线调试老张 · 2026-08-27
核心方案:使用ESP32的light sleep模式(非deep sleep),配合RTC定时器唤醒,并利用ESP-IDF的Wi-Fi Modem Sleep与Fast Scan特性。具体步骤:1) 配置esp_pm_config_esp32_t,设置max_freq_mhz=240,min_freq_mhz=80,enable_light_sleep=true;2) 在进入light sleep前,调用esp_wifi_set_ps(WIFI_PS_MIN_MODEM)保持Wi-Fi连接,并启用esp_wifi_config_80211_tx_rate以固定速率;3) 使用esp_timer或RTC定时器(如esp_sleep_enable_timer_wakeup)设置唤醒周期(建议≥100ms);4) 唤醒后,通过esp_wifi_set_mac和esp_wifi_connect快速重连,并启用TCP keepalive(间隔<唤醒周期)防止连接超时;5) 数据缓冲:在sleep前将待发数据存入RTC快速内存(RTC_FAST_ATTR),唤醒后立即发送。注意:light sleep下Wi-Fi连接保持,但吞吐量下降,需测试实际丢包率。若需零丢包,可改用ESP-NOW或BLE广播作为备用通道。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

⏱️ 定时器计算器