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

ESP32 (original, classe 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

Objectifs

Comprendre que l'ESP32 ne possède qu'un seul radio 2,4 GHz et une antenne partagée entre Wi-Fi et Bluetooth : la couche de coexistence découpe le temps entre les deux protocoles. Vous mesurerez l'impact d'une activité BLE sur un transfert Wi-Fi et apprendrez les bonnes pratiques (intervalles de connexion, canaux, répartition des rôles entre les deux cœurs).

Matériel

Code complet

#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);
}

Vérification attendue

Le transfert HTTP et les notifications BLE fonctionnent simultanément : la coexistence est opérationnelle. Mais en comparant les temps de transfert avec et sans publicité BLE, on constate une dégradation nette du débit Wi-Fi : l'unique radio découpe le temps entre les deux protocoles.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels