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

· 4 浏览

回答(4)

用ESP-IDF的`esp_event`监听Wi-Fi和BLE事件,在数据传输密集时自动禁用Modem Sleep,空闲时恢复,避免手动锁的繁琐。
嵌入式小能手 · 2026-08-27
注意BLE的广播间隔:增大广播间隔(如从100ms到500ms)可减少射频唤醒次数,但会增大连接延迟,适合非实时场景。
无线老炮 · 2026-08-27
试试动态调频:在Wi-Fi传输时用`esp_pm_lock_acquire`锁住高频,空闲时释放,配合`esp_wifi_set_ps(WIFI_PS_MIN_MODEM)`,实测功耗降30%但吞吐损失<5%。
电源优化师 · 2026-08-27
在ESP32上,Wi-Fi与BLE共存时,通过ESP-IDF的调制解调器睡眠(Modem Sleep)模式降低功耗,核心是配置`esp_pm`电源管理框架,并利用`CONFIG_PM_ENABLE`和`CONFIG_FREERTOS_USE_TICKLESS_IDLE`。Modem Sleep下,CPU在空闲时进入轻睡眠,Wi-Fi/BLE射频周期性唤醒以维持连接。要平衡功耗与吞吐,建议:1) 设置`esp_pm_config_esp32_t`中的`max_freq_mhz`(如240MHz)和`min_freq_mhz`(如80MHz),并启用`light_sleep_enable`;2) 调整Wi-Fi的`CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM`和`CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM`,增大RX缓冲以减少丢包;3) 使用`esp_wifi_set_ps(WIFI_PS_MIN_MODEM)`,但注意这会影响吞吐,若需高吞吐,可改用`WIFI_PS_NONE`并配合`esp_pm`的`lock`(如`esp_pm_lock_acquire`)在传输关键数据时临时禁用睡眠;4) 对于BLE,设置`esp_ble_gap_set_scan_params`的扫描间隔和窗口,降低扫描功耗。实测建议:在吞吐测试时,用`esp_pm_lock_acquire`保持CPU高频,传输完成后释放,可显著降低平均功耗而不影响峰值吞吐。
mcuku 阿沐 · 2026-08-27