ble-capteur.ino
Le BLE du S3 avec ArduinoBLE : la carte annonce un service 181A avec une caractéristique de mesure que tout smartphone peut lire ou écouter (notify). Le niveau analogique est poussé chaque seconde vers le central connecté, sans polling côté application.
Matériel requis
Un Arduino Nano ESP32 (ESP32-S3 double cœur, Wi-Fi 2,4 GHz + Bluetooth Low Energy, brochage physique compatible Nano, USB natif, broches 3,3 V uniquement). Nano ESP32, smartphone avec nRF Connect (ou autre scanner BLE), capteur sur A0.
Câblage
Rien à câbler pour tester avec une broche flottante ; capteur 0-3,3 V sur A0 en usage réel.
Fonctionnement
BLE.advertise diffuse le nom et le service ; central.connected() garde la session ouverte. writeValue sur une caractéristique BLENotify envoie une notification ATT vers le smartphone.
Exécution
Installez le package Arduino ESP32 Boards (ou le guide Nano ESP32 officiel), sélectionnez Arduino Nano ESP32, téléversez. Les broches sont en 3,3 V : n'envoyez jamais 5 V sur une entrée. Le moniteur série utilise l'USB natif.
Variantes
Ajoutez la pairing/bonding pour chiffrer la liaison, ou émulez le profil standard Battery (0x180F) pour être visible des OS sans app dédiée.
ble-capteur.ino
// Service BLE personnalise sur le Nano ESP32 (ArduinoBLE).
// Une caracteristique "mesure" notifie le niveau analogique.
#include <ArduinoBLE.h>
BLEService service("181A"); // service capteur environnemental
BLEUnsignedCharCharacteristic mesure("2A6E", BLERead | BLENotify);
void setup() {
Serial.begin(115200);
if (!BLE.begin()) {
Serial.println(F("BLE KO"));
while (true);
}
BLE.setLocalName("NanoESP32-Capteur");
BLE.setAdvertisedService(service);
service.addCharacteristic(mesure);
BLE.addService(service);
mesure.writeValue(0);
BLE.advertise();
Serial.println(F("BLE pret, en attente de connexion"));
}
void loop() {
BLEDevice central = BLE.central();
if (central) {
Serial.print(F("Connecte : "));
Serial.println(central.address());
while (central.connected()) {
int brut = analogRead(A0);
uint8_t niveau = map(brut, 0, 4095, 0, 255); // ADC 12 bits
mesure.writeValue(niveau); // BLENotify : pousse vers le central
delay(1000);
}
Serial.println(F("Central deconnecte"));
}
}