核心思路是使用ESP32的Modem Sleep模式(WiFi省电模式)配合事件驱动的唤醒策略。具体做法:1)启用WiFi的power save模式(`esp_wifi_set_ps(WIFI_PS_MIN_MODEM)`),让modem在无数据时自动休眠,但保持连接;2)通过`esp_timer`或RTC定时器设置短间隔(如100-200ms)的周期性唤醒,仅用于检查beacon和维持TCP/IP栈活跃,而非全量重连;3)关键优化:避免使用`WiFi.disconnect()`或`esp_restart()`,而是利用`esp_wifi_connect()`的自动重连机制,并注册`WIFI_EVENT_STA_DISCONNECTED`事件,在事件回调中立即发起重连(不等待扫描),同时将重连间隔指数退避(如1s、2s、4s)以减少无效尝试。实测可保持平均电流<1mA,重连时间<500ms。建议用`esp_wifi_set_max_sleep_interval()`调整休眠时长,并关闭不必要的TCP keepalive。
mcuku 阿沐 · 2026-08-27