🛠 Être un périphérique Bluetooth LE avec ArduinoBLE
Objetivos
Convertir el Nano ESP32 en un dispositivo Bluetooth LE con la biblioteca ArduinoBLE: difusión de un nombre, un servicio y una característica legible/notificable que se incrementa con el botón. El módulo NORA-W106 gestiona BLE 5.0 con múltiples conexiones (central/periférico).
Material
- 1 × Arduino Nano ESP32 + cable USB-C
- Un smartphone con nRF Connect (o LightBlue)
- Biblioteca ArduinoBLE a través del gestor de bibliotecas del IDE
Código completo
#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);
}
Verificación esperada
nRF Connect muestra «NanoESP32-Demo»; tras la conexión, la característica 2A19 vale 0 y luego se incrementa con cada pulsación (tras activar las notificaciones en la app).
Errores frecuentes
- >
- Paquete de core incorrecto («esp32» de Espressif): la ArduinoBLE prevista para el core de Arduino puede no compilarse de la misma manera.
- Notificaciones no activadas en el smartphone: el valor no se actualiza.
- Olvidar el re-advertising tras onDisconnect: la placa se vuelve invisible en el segundo intento.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
connexion-wifi.inoArduinopoint-acces.inoArduinoble-capteur.inoArduinoneoled-rgb.inoArduinoadc-12bits.inoArduinopreferences.inoArduino