在ESP32的Wi-Fi与BLE共存场景下,通过ESP-IDF的调制解调器睡眠(Modem Sleep)降低功耗且不丢包,核心是精确配置电源管理参数。首先,启用CONFIG_PM_ENABLE,并设置esp_pm_config_esp32_t中的max_freq_mhz为80或160MHz(避免降频导致协议栈延迟),min_freq_mhz保持与max一致或仅允许轻度降频。其次,针对共存,使用esp_coex_adapter_set_pti(优先级)和esp_coex_status_bitmap,为BLE和Wi-Fi分配合理的PTI,确保关键事件(如Wi-Fi beacon和BLE连接事件)不被睡眠打断。实操建议:1)设置ESP_PM_CPU_FREQ_MAX为240MHz,但启用light sleep仅当无活动连接时;2)使用esp_netif和event loop的power save模式,将Wi-Fi的PS模式设为WIFI_PS_MIN_MODEM,并调整listen_interval(如3-5个beacon周期);3)对BLE,设置esp_ble_gap_set_scan_params的scan_interval和window,并利用connection interval(如30-50ms)与Wi-Fi DTIM对齐。关键验证:用esp_timer记录丢包率,并通过esp_wifi_set_ps(WIFI_PS_NONE)对比,确保睡眠期间仅关闭射频,而协议栈保持唤醒。若仍丢包,可禁用modem sleep,改用ESP_PM_CPU_FREQ_MAX+light sleep的混合策略。
mcuku 阿沐 · 2026-08-27