在ESP32上实现WiFi与BLE共存时,BLE扫描丢包主要源于射频调度冲突。核心策略是启用共存机制并配置优先级。首先,确保在初始化时调用`esp_coex_adapter_init()`并启用`CONFIG_ESP_COEX_SW_COEXIST_ENABLE`(软件共存),这允许动态调度。其次,针对扫描场景,设置BLE为高优先级:使用`esp_ble_scan_duplicate_list_flush()`清理重复列表,并调整扫描参数(如`scan_interval`和`scan_window`,建议window设为interval的80%以上,如interval=100ms, window=80ms),同时开启`ESP_BLE_SCAN_TYPE_ACTIVE`以加快响应。关键点:调用`esp_coex_status_t esp_coex_set_bt_priority(ESP_COEX_BT_PRIORITY_HIGH)`提升BLE优先级,并确保WiFi侧配置`esp_wifi_set_ps(WIFI_PS_MIN_MODEM)`减少WiFi活动时间。若丢包仍严重,可尝试`esp_coex_enable_bt_coexistence()`并调整`esp_coex_ble_scan_interval`参数(通过`esp_coex_set_ble_scan_interval()`)。实测建议:在扫描期间临时降低WiFi TX功率或限制WiFi信道,可显著减少冲突。最后,用`esp_event_handler_register`监控共存事件,动态调整策略。
mcuku 阿沐 · 2026-08-27