🛠 Diffuser ses capteurs en BLE avec ArduinoBLE
Objetivos
Transformar el Nicla Sense ME en un dispositivo Bluetooth Low Energy que publique la temperatura de su sensor a través de una característica estándar, utilizando la biblioteca ArduinoBLE (v2.1.0, que lista explícitamente esta placa). Precisión de hardware: el BLE no es gestionado por un STM32WB55 como en otras placas Arduino, sino por el módulo u-blox ANNA-B112, un encapsulado SiP que contiene precisamente... un nRF52832 de Nordic, el cual constituye el microcontrolador principal de la placa (el módulo funciona en un riel de 1,8 V; Bluetooth 5.0 según la ficha del módulo, frente a «4.2» en la ficha de la tienda, mención considerada obsoleta). Es este mismo nRF52832 el que ejecuta tu sketch: el BLE es por tanto nativo, sin coprocesador.
Material
- Placa Arduino Nicla Sense ME (ABX00050) y cable micro-USB
- Bibliotecas Arduino_BHY2 (sensor de temperatura) y ArduinoBLE (servicio BLE)
- Smartphone con la aplicación nRF Connect (o la herramienta WebBLE de Arduino) para escanear y conectar
Código completo
#include "Arduino_BHY2.h"
#include <ArduinoBLE.h>
Sensor temp(SENSOR_ID_TEMP);
BLEService serviceEnv("181A"); // service Environmental Sensing
BLEFloatCharacteristic tempChar("2A6E", BLERead | BLENotify); // Temperature
void setup {
Serial.begin(115200);
BHY2.begin;
temp.begin;
if (!BLE.begin) {
Serial.println("Demarrage BLE impossible");
while (1);
}
BLE.setLocalName("NiclaTemp");
BLE.setAdvertisedService(serviceEnv);
serviceEnv.addCharacteristic(tempChar);
BLE.addService(serviceEnv);
BLE.advertise;
Serial.println("Peripheral BLE en attente de connexion");
}
void loop {
static auto printTime = millis;
BHY2.update; // pompe les capteurs
BLE.poll; // sert la pile BLE
if (millis - printTime >= 2000) {
printTime = millis;
if (temp.dataAvailable) {
tempChar.writeValue(temp.value);
Serial.println(String("Temperature diffusee : ") + String(temp.value, 2));
}
}
}
Verificación esperada
Con nRF Connect, el dispositivo «NiclaTemp» es visible al escanear; al conectar, se encuentra el servicio 0x181A y la característica 0x2A6E cuyo valor sigue la temperatura de la placa (active la notificación y sople sobre el sensor). El alcance anunciado del módulo alcanza los 160 m en condiciones despejadas (+5 dBm EIRP).
Errores frecuentes
- Olvidar
BLE.polloBHY2.updateen loop: uno congela la pila BLE, el otro corta los datos del sensor, y el central lee un valor fijo. BLE.beginfalla si ya hay otra inicialización de radio en curso; reinicie correctamente la placa después de un sketch que utilice BLE.- Confiar únicamente en el nombre publicitario: tras la conexión, algunas aplicaciones no muestran los UUID cortos; verifique explorando el servicio completo.
- Problemas de conectividad BLE ya reportados en esta placa (foro de Arduino): pruebe con un segundo teléfono antes de sospechar del sketch.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
led_rgb.inoArduinoimu_bhi260.inoArduinorotation_fusion.inoArduinopression_bmp390.inoArduinonose_electronique.inoArduinoboussole_bmm150.inoArduino