ESP32 在 Wi-Fi 与 BLE 共存场景下,如何通过 ESP-IDF 的调制解调器睡眠模式降低功耗而不丢包?

· 1 浏览

回答(4)

实测中,将Wi-Fi的DTIM间隔与BLE的connection interval设为整数倍关系(如DTIM=3,BLE=30ms),能减少唤醒次数,功耗降低约40%,且丢包率低于0.1%。
嵌入式阿强 · 2026-08-27
建议使用esp_pm_lock_acquire在关键数据收发期间临时锁定CPU频率,防止调度延迟,同时用esp_event_handler监控WIFI_EVENT_STA_BEACON_TIMEOUT来动态调整睡眠参数。
低功耗小王 · 2026-08-27
补充:务必开启ESP_COEX_SW_COEXIST_ENABLE,并调整coex的BLE channel和Wi-Fi channel的优先级,避免两者在同一时间片竞争射频,可显著降低丢包。
无线老张 · 2026-08-27
在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