🛠 Diffuser ses capteurs en BLE avec ArduinoBLE
Objectifs
Transformer le Nicla Sense ME en périphérique Bluetooth Low Energy qui publie sa température de capteur via une caractéristique standard, avec la bibliothèque ArduinoBLE (v2.1.0, qui liste explicitement cette carte). Précision matérielle : le BLE n'est pas porté par un STM32WB55 comme sur d'autres cartes Arduino, mais par le module u-blox ANNA-B112, un boîtier SiP qui contient justement... un nRF52832 Nordic, lequel constitue le microcontrôleur principal de la carte (le module tourne sur un rail 1,8 V ; Bluetooth 5.0 d'après la fiche du module, contre « 4.2 » sur la fiche boutique, mention considérée comme obsolète). C'est ce même nRF52832 qui exécute votre sketch : le BLE est donc natif, sans coprocesseur.
Matériel
- Carte Arduino Nicla Sense ME (ABX00050) et câble micro-USB
- Bibliothèques Arduino_BHY2 (capteur température) et ArduinoBLE (service BLE)
- Smartphone avec l'application nRF Connect (ou l'outil WebBLE d'Arduino) pour scanner et se connecter
Code complet
#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));
}
}
}
Vérification attendue
Avec nRF Connect, le périphérique « NiclaTemp » est visible au scan ; en se connectant, on trouve le service 0x181A et la caractéristique 0x2A6E dont la valeur suit la température de la carte (activez notify puis soufflez sur le capteur). La portée annoncée du module atteint 160 m en conditions dégagées (+5 dBm EIRP).
Erreurs fréquentes
- Oublier
BLE.pollouBHY2.updatedans loop : l'un gèle la pile BLE, l'autre coupe les données capteurs, et le central lit une valeur figée. BLE.beginéchoue si une autre initialisation radio est déjà en cours ; redémarrer proprement la carte après un sketch utilisant le BLE.- Se fier au seul nom publicitaire : après connexion, certaines apps n'affichent pas les UUID courts ; vérifier en explorant le service complet.
- Problèmes de connectivité BLE déjà signalés sur cette carte (forum Arduino) : tester avec un second téléphone avant de suspecter le sketch.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_rgb.inoArduinoimu_bhi260.inoArduinorotation_fusion.inoArduinopression_bmp390.inoArduinonose_electronique.inoArduinoboussole_bmm150.inoArduino