Перейти к содержанию

Можно ли одновременно использовать Wi-Fi и Bluetooth на ESP32?

Обновлено Редакция GAW

У ESP32 один радиотракт 2,4 ГГц на Wi-Fi и Bluetooth. Одновременно в прямом смысле они работать не могут: пока один передаёт или принимает, другой ждёт. ESP-IDF распределяет время между ними, и для разных сочетаний режимов Espressif прямо указывает, насколько стабильно это работает.

Что пишет ESP-IDF

Wi-FiBLE: сканированиеBLE: рекламаBLE: соединение
STA: сканирование, подключение, подключеностабильностабильностабильно
SoftAP: только маякистабильностабильностабильно
SoftAP: подключение и подключенонестабильнонестабильнонестабильно
Сниффернестабильнонестабильнонестабильно
ESP-NOW: приёмстабильно только в STAто жето же

Вывод из таблицы (наш): связка «станция Wi-Fi + BLE», например настройка через телефон по BLE и работа через роутер, — штатный сценарий. А вот точка доступа с подключёнными клиентами плюс BLE — режим, на который Espressif стабильности не обещает.

Как настроить

  • Включить совместную работу: опция CONFIG_ESP_COEX_SW_COEXIST_ENABLE в menuconfig — без неё механизм не действует.
  • На двухъядерных ESP32 и ESP32-S3 разнести задачи Bluetooth и Wi-Fi по разным ядрам опциями привязки к ядру, как рекомендует руководство.
  • Делать интервалы рекламы и соединения BLE не короче, чем нужно задаче: про параметры BLE — страница Bluetooth LE.

По току одновременная работа не суммирует пики: по даташиту передача Wi-Fi 802.11b — 240 мА, передача BLE на 0 дБм — 130 мА, и эти режимы чередуются. Но блок питания всё равно рассчитывают на пик Wi-Fi — что бывает при слабом питании, разобрано в ответе «Почему ESP32 перезагружается при включении Wi-Fi». Про последовательный порт через Bluetooth на ESP32-C3 — ответ «Почему BluetoothSerial не работает на ESP32-C3», сравнение радиоинтерфейсов — обзор беспроводных интерфейсов, модули — страница ESP32.

Похожие вопросы

Почему с включённым BLE упала скорость Wi-Fi?

Потому что радиотракт один, и, пока идут события Bluetooth, Wi-Fi не передаёт и не принимает. ESP-IDF распределяет время между ними; чем чаще соединение и реклама BLE, тем меньше времени остаётся Wi-Fi. Реже рекламировать и увеличивать интервал соединения BLE — обычный способ освободить эфир.

Хватит ли памяти на Wi-Fi и Bluetooth сразу?

На ESP32 часто впритык, особенно со стеком Bluedroid. В руководстве ESP-IDF перечислены опции, которые уменьшают память: меньше буферов приёма и передачи Wi-Fi, меньше окон Block Ack, динамическая память стека Bluetooth и отключение CONFIG_ESP_WIFI_RX_IRAM_OPT, которое освобождает около 17 КБ IRAM.

Работает ли ESP-NOW вместе с BLE?

По таблице ESP-IDF передача ESP-NOW вместе с BLE работает стабильно, а приём — стабильно только тогда, когда Wi-Fi работает в режиме станции. В остальных режимах Wi-Fi приём ESP-NOW при активном BLE не поддерживается.

Источники

  1. Espressif Systems. ESP-IDF v6.1 Programming Guide, API Guides: RF Coexistence (docs/en/api-guides/coexist.rst) — радиомодуль 2,4 ГГц один на Bluetooth, IEEE 802.15.4 и Wi-Fi, пока один передаёт или принимает, другой не может — разделение по времени; табл. Wi-Fi и BLE: STA (сканирование, подключение, подключено) со сканированием, рекламой и соединением BLE — Y (стабильно); SoftAP: передача маяков — Y, подключение и подключено — C1 (поддерживается, нестабильно); сниффер — C1; ESP-NOW: приём — S (стабильно только в режиме STA), передача — Y; такая же таблица для классического Bluetooth; нужно включить CONFIG_ESP_COEX_SW_COEXIST_ENABLE; на ESP32 и ESP32-S3 задачи Wi-Fi и Bluetooth рекомендуется разнести по разным ядрам (CONFIG_BTDM_CTRL_PINNED_TO_CORE_CHOICE, CONFIG_BT_NIMBLE_PINNED_TO_CORE_CHOICE, CONFIG_ESP_WIFI_TASK_CORE_ID); на ESP32 — CONFIG_BTDM_CTRL_FULL_SCAN_SUPPORTED для сканирования BLE; список опций для экономии памяти (буферы Wi-Fi, окна Block Ack, CONFIG_ESP_WIFI_RX_IRAM_OPT — около 17 КБ IRAM, буферы LwIP)
  2. Espressif Systems. ESP32 Series Datasheet, Version 5.3 — табл. 5-4: передача Wi-Fi 802.11b +19,5 дБм — 240 мА, передача BT/BLE 0 дБм — 130 мА, приём Wi-Fi и BT/BLE — 95–100 мА

Нашли ошибку?