🛠 Moniteur de batterie BLE
Objectifs
Créer un périphérique BLE (Bluetooth Low Energy) conforme au profil standard Battery Service (UUID 0x180F, caractéristique 0x2A19) que n'importe quelle application générique sait lire. Vous apprendrez le triptyque serveur / service / caractéristique, les notifications et le descripteur CCCD. Rappel : la radio BLE de l'ESP32 partage l'unique radio 2,4 GHz et l'antenne avec le Wi-Fi.
Matériel
- 1 carte ESP32 DevKit v1
- 1 smartphone Android ou iOS avec l'app nRF Connect
Code complet
#include <WiFi.h>
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
BLECharacteristic* cBatterie;
uint8_t niveau = 100;
void setup {
Serial.begin(115200);
BLEDevice::init("ESP32-Batterie");
BLEServer* serveur = BLEDevice::createServer;
BLEService* service = serveur->createService("180F"); // Battery Service
cBatterie = service->createCharacteristic("2A19",
BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY);
cBatterie->addDescriptor(new BLE2902); // CCCD obligatoire
service->start;
BLEAdvertising* adv = BLEDevice::getAdvertising;
adv->addServiceUUID("180F");
adv->start;
Serial.println(F("BLE pret : cherchez ESP32-Batterie"));
}
void loop {
niveau = (uint8_t)(50 + 49 * sin(millis / 20000.0f)); // simulation
cBatterie->setValue(&niveau, 1);
cBatterie->notify;
Serial.printf("Niveau annonce : %d %%\n", niveau);
delay(2000);
}
Vérification attendue
nRF Connect liste « ESP32-Batterie » ; en ouvrant le service 0x180F puis en s'abonnant (icône notify) à la caractéristique 0x2A19, la valeur affichée oscille entre 1 et 99 % toutes les 2 secondes.
Erreurs fréquentes
- Oublier BLE2902 (le descripteur CCCD) : l'abonnement est grisé dans nRF Connect, aucune notification ne part.
- Envoyer plusieurs octets à setValue alors que le profil attend un entier 0-100 sur un octet.
- Service non démarré (service->start oublié) : le périphérique est visible mais sans service.
- Lancer un gros scan BLE en parallèle d'un transfert Wi-Fi : la coexistence sur le radio unique fait grimper les latences BLE.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino