🛠 Wi-Fi + BLE 5 : mesurer la coexistence

ESP32-C3 · avance · Schéma : IMG-esp32-c3-avance-1-wifi-ble5-coexistence.svg — ESP32-C3 mono-cœur avec radio unique 2,4 GHz, calendrier entrelaçant trames Wi-Fi et événements BLE

Objetivos

El ESP32-C3 acumula Wi-Fi y Bluetooth 5 en un único núcleo y una sola radio de 2,4 GHz. Este tutorial mide la degradación real cuando ambos protocolos funcionan simultáneamente, y establece las reglas de ingeniería: intervalos de conexión BLE, tamaño de los paquetes, despertar del módem Wi-Fi. Aprenderá a dimensionar un producto mixto sin sorpresas desagradables.

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("C3-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.println;
}

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 + notify BLE\n",
                code, octets, millis - t0);
  delay(3000);
}

Verificación esperada

Ambos protocolos funcionan simultáneamente, pero el tiempo de transferencia HTTP aumenta notablemente en cuanto BLE está activo (publicidad y luego notificaciones). Al desactivar la publicidad BLE, la misma transferencia vuelve a ser rápida: la penalización proviene efectivamente de la compartición de la única radio, no del núcleo.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales