🛠 Moniteur de batterie BLE

ESP32 (original, classe ESP32-WROOM-32) · intermediaire · Schéma : IMG-esp32-intermediaire-2-ble-batterie-monitor.svg — ESP32 émettant un service BLE Battery 0x180F vers un smartphone affichant le pourcentage

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

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

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels