🛠 Être un périphérique Bluetooth LE avec ArduinoBLE
Objectifs
Rendre le Nano ESP32 périphérique Bluetooth LE avec la bibliothèque ArduinoBLE : diffusion d'un nom, service et caractéristique lisible/notifiable incrémentée par le bouton. Le module NORA-W106 gère le BLE 5.0 multi-connexions (central/périphérique).
Matériel
- 1 × Arduino Nano ESP32 + câble USB-C
- Un smartphone avec nRF Connect (ou LightBlue)
- Bibliothèque ArduinoBLE via le gestionnaire de bibliothèques de l'IDE
Code complet
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
BLECharacteristic* compteurChar = nullptr;
const uint8_t BTN = 2;
uint8_t n = 0;
uint32_t derniereMs = 0;
class ServeurCb : public BLEServerCallbacks {
void onConnect(BLEServer* s) override { Serial.println("centrale connectée"); }
void onDisconnect(BLEServer* s) override { BLEDevice::startAdvertising; }
};
void setup {
Serial.begin(115200);
pinMode(BTN, INPUT_PULLUP);
BLEDevice::init("NanoESP32-Demo");
BLEServer* serveur = BLEServer::createServer;
serveur->setCallbacks(new ServeurCb);
BLEService* service = serveur->createService("1280");
compteurChar = service->createCharacteristic(
"2A19", BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY);
service->start;
BLEAdvertising* adv = BLEDevice::getAdvertising;
adv->addServiceUUID("1280");
BLEDevice::startAdvertising;
Serial.println("Diffusion BLE : NanoESP32-Demo");
}
void loop {
bool appuye = (digitalRead(BTN) == LOW);
uint32_t now = millis;
if (appuye && now - derniereMs > 250 && compteurChar) {
derniereMs = now;
compteurChar->setValue(++n);
compteurChar->notify;
Serial.printf("compteur = %u\n", n);
}
delay(10);
}
Vérification attendue
nRF Connect affiche « NanoESP32-Demo » ; après connexion, la caractéristique 2A19 vaut 0 puis s'incrémente à chaque appui (après activation des notifications dans l'app).
Erreurs fréquentes
- >
- Mauvais package de core (« esp32 » d'Espressif) : l'ArduinoBLE prévue pour le core Arduino peut ne pas compiler à l'identique.
- Notifications non activées côté smartphone : la valeur ne se met pas à jour.
- Oublier le re-advertising après onDisconnect : la carte devient invisible au second essai.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
connexion-wifi.inoArduinopoint-acces.inoArduinoble-capteur.inoArduinoneoled-rgb.inoArduinoadc-12bits.inoArduinopreferences.inoArduino