🛠 Coexistence Wi-Fi + Bluetooth sur antenne partagée
Objetivos
Comprender que el ESP32 solo posee una única radio de 2,4 GHz y una antena compartida entre Wi-Fi y Bluetooth: la capa de coexistencia divide el tiempo entre los dos protocolos. Medirás el impacto de una actividad BLE en una transferencia Wi-Fi y aprenderás las buenas prácticas (intervalos de conexión, canales, distribución de roles entre los dos núcleos).
Material
- 1 tarjeta ESP32 DevKit v1
- 1 punto de acceso Wi-Fi de 2,4 GHz
- 1 central BLE (smartphone con nRF Connect)
Código completo
#include <WiFi.h>
#include <HTTPClient.h>
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
BLECharacteristic* cNotif;
void setup {
Serial.begin(115200);
BLEDevice::init("ESP32-COEX");
BLEServer* srv = BLEDevice::createServer;
BLEService* svc = srv->createService("180A");
cNotif = svc->createCharacteristic("2A19",
BLECharacteristic::PROPERTY_NOTIFY);
cNotif->addDescriptor(new BLE2902);
svc->start;
BLEDevice::getAdvertising->start;
WiFi.mode(WIFI_STA);
WiFi.begin("MON_SSID", "MA_CLE");
while (WiFi.status != WL_CONNECTED) { delay(300); Serial.print('.'); }
Serial.printf("\nIP %s, RSSI %d\n",
WiFi.localIP.toString.c_str, WiFi.RSSI);
}
void loop {
uint32_t t0 = millis;
HTTPClient http;
http.begin("http://exemple.local/test-1mo.bin");
int code = http.GET;
int32_t octets = http.getSize;
http.end;
uint8_t v = (uint8_t)(millis / 1000);
cNotif->setValue(&v, 1);
cNotif->notify;
Serial.printf("HTTP %d, %d o en %lu ms (BLE notify emis)\n",
code, octets, millis - t0);
delay(3000);
}
Verificación esperada
La transferencia HTTP y las notificaciones BLE funcionan simultáneamente: la coexistencia es operativa. Pero al comparar los tiempos de transferencia con y sin publicidad BLE, se observa una degradación clara del rendimiento Wi-Fi: la única radio divide el tiempo entre los dos protocolos.
Errores frecuentes
- Esperar el rendimiento Wi-Fi completo mientras se realiza BLE intensivo: es tiempo compartido, no dos radios.
- Intervalo de conexión BLE mínimo (7,5 ms) combinado con un gran tráfico Wi-Fi: eventos BLE perdidos y desconexiones.
- Olvidar que BLE y Wi-Fi ocupan la misma banda de 2,4 GHz: un canal Wi-Fi congestionado y un entorno BLE denso interfieren entre sí.
- Placa con antena externa: el conmutador RF solo selecciona una; verifica el pin de antena del módulo (GPIO25/27 según variantes).
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino