🛠 Coexistence Wi-Fi + Bluetooth sur antenne partagée
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
- 1 carte ESP32 DevKit v1
- 1 point d'accès Wi-Fi 2,4 GHz
- 1 central BLE (smartphone avec nRF Connect)
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
- Espérer le débit Wi-Fi complet tout en faisant du BLE intensif : c'est du temps partagé, pas deux radios.
- Intervalle de connexion BLE minimal (7,5 ms) cumulé à un gros trafic Wi-Fi : événements BLE manqués et déconnexions.
- Oublier que BLE et Wi-Fi occupent la même bande 2,4 GHz : un canal Wi-Fi encombré et un environnement BLE dense se marchent dessus.
- Board à antenne externe : le commutateur RF n'en sélectionne qu'une ; vérifier la broche d'antenne du module (GPIO25/27 selon variantes).
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino