🛠 Moniteur de batterie BLE
Objetivos
Crear un dispositivo BLE (Bluetooth Low Energy) conforme al perfil estándar Battery Service (UUID 0x180F, característica 0x2A19) que cualquier aplicación genérica sepa leer. Aprenderás la tríada servidor / servicio / característica, las notificaciones y el descriptor CCCD. Recordatorio: la radio BLE del ESP32 comparte la única radio de 2,4 GHz y la antena con el Wi-Fi.
Material
- 1 placa ESP32 DevKit v1
- 1 smartphone Android o iOS con la app nRF Connect
Código completo
#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);
}
Verificación esperada
nRF Connect lista « ESP32-Batterie »; al abrir el servicio 0x180F y suscribirse (icono notify) a la característica 0x2A19, el valor mostrado oscila entre 1 y 99 % cada 2 segundos.
Errores frecuentes
- Olvidar BLE2902 (el descriptor CCCD): la suscripción aparece atenuada en nRF Connect y no se envía ninguna notificación.
- Enviar varios bytes a setValue cuando el perfil espera un entero de 0 a 100 en un solo byte.
- Servicio no iniciado (se olvida service->start): el dispositivo es visible pero sin servicios.
- Ejecutar un escaneo BLE intenso en paralelo a una transferencia Wi-Fi: la coexistencia en la radio única aumenta las latencias BLE.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino