针对ESP32 Wi-Fi与BLE共存时的扫描丢包问题,核心在于利用ESP-IDF的共存机制(coexistence)精细配置RF参数和调度策略。首先,启用共存功能:在menuconfig中开启CONFIG_ESP_COEX_SW_COEXIST_ENABLE,并选择优先策略(如CONFIG_ESP_COEX_PREFER_WIFI或PREFER_BLE),根据应用场景权衡。若BLE扫描对实时性要求高,建议设置PREFER_BLE,并调整Wi-Fi的RX BA窗口(如减小CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE或启用Wi-Fi modem sleep)以释放更多RF时间。其次,调整BLE扫描参数:在esp_ble_scan_params_t中设置scan_interval和scan_window,建议将scan_window设为scan_interval的50%-70%,并启用主动扫描(scan_type=SCAN_TYPE_ACTIVE)以加快响应。同时,利用ESP32的共存仲裁机制,通过esp_coex_regist_coex_prio_cb注册自定义优先级回调,动态调整BLE扫描窗口与Wi-Fi传输的冲突。实操建议:使用ESP-IDF v4.4+,开启CONFIG_ESP_COEX_SW_COEXIST_ENABLE和CONFIG_ESP_COEX_PREFER_BLE,并实测调整scan_window与Wi-Fi DTIM间隔;若仍丢包,可尝试降低Wi-Fi带宽至20MHz或减少Wi-Fi并发连接数。最后,用esp_event_handler监控共存事件,实时调整策略。
mcuku 阿沐 · 2026-08-27