🛠 Wi-Fi + BLE 5 : mesurer la coexistence
Objectifs
Le ESP32-C3 cumule Wi-Fi et Bluetooth 5 sur un cœur unique et un seul radio 2,4 GHz. Ce tutoriel mesure la dégradation réelle quand les deux protocoles tournent ensemble, et pose les règles d'ingénierie : intervalles de connexion BLE, taille des paquets, réveil du modem Wi-Fi. Vous saurez dimensionner un produit mixte sans mauvaise surprise.
Matériel
- 1 carte ESP32-C3
- 1 routeur 2,4 GHz et un serveur HTTP de test
- Smartphone nRF Connect pour la partie BLE
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("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);
}
Vérification attendue
Les deux protocoles fonctionnent simultanément, mais le temps du transfert HTTP augmente nettement dès que BLE est actif (publicité puis notifications). En coupant la publicité BLE, le même transfert redevient rapide : la pénalité vient bien du partage du radio unique, pas du cœur.
Erreurs fréquentes
- Croire qu'un second cœur amortit le coût : le C3 est mono-cœur, la coexistence est purement temporelle sur le radio.
- Notifications BLE toutes les 10 ms pendant un flux Wi-Fi : les événements BLE prioritaires affament le débit ; espacer ou grouper les données.
- Oublier le mode modem-sleep Wi-Fi (WiFi.setSleep(true)) dans un produit sur batterie.
- Canaux Wi-Fi 12-14 qui chevauchent les canaux de publicité BLE 37-38 : préférer les canaux Wi-Fi 1 à 11 et laisser les canaux de publicité BLE libres.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino