🛠 Coexistence Wi-Fi + Bluetooth sur antenne partagée

ESP32 (original, clase ESP32-WROOM-32) · avance · Schéma : IMG-esp32-avance-2-coexistence-wifi-bt-antenne.svg — Puce ESP32 avec un seul radio 2,4 GHz et une antenne partagée, découpage du temps entre Wi-Fi et BLE

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

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

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales