ble_stream.ino
Pas de Wi-Fi sur le Sense ME — le nRF52832 ne parle que BLE. Ce sketch diffuse l’accélération X en notify via ArduinoBLE (fonctionnel après nicla::begin, confirmé docs-db) ; l’app nRF Connect trace la courbe en direct sur le téléphone.
Matériel requis
Une Arduino Nicla Sense ME (nRF52832 dans un module ANNA-B112, BLE seul, pas de Wi-Fi) avec hub capteurs Bosch BHI260AP, magnétomètre BMM150, baromètre BMP390, capteur de gaz BME688, LED RVB sur pilote I2C et chargeur LiPo BQ25120. La carte seule + un smartphone avec nRF Connect (ou une app Web Bluetooth). L’antenne est interne, portée ~10 m.
Câblage
Aucun câblage. Alimentation sur LiPo pour une mesure mobile ; le connecteur ACH 3 fils accepte une cellule 3,7 V.
Fonctionnement
BHY2 alimente les capteurs, BLE.poll sert la pile radio ; writeValue sur une caractéristique notify envoie une notification aux abonnés. L’encodage en centièmes de g tient dans un int16.
Exécution
Programmation via Arduino IDE (core ArduinoCore-mbed, target NICLA_SENSE_ME) ; bibliothèques Arduino_BHY2 (capteurs) et Nicla_System (LED, chargeur) ; USB via pont série SAMD11.
Variantes
Ajouter les 9 axes + pression + IAQ dans le service, batcher les échantillons pour la portée, ou connecter le téléphone en central pour un enregistreur autonome.
ble_stream.ino
// Le Sense ME n'a QUE du BLE (pas de Wi-Fi) : la télémétrie
// passe par une caractéristique notify, lue par le téléphone.
// Après nicla::begin, l'ArduinoBLE standard fonctionne (docs-db).
#include "Arduino_BHY2.h"
#include "Nicla_System.h"
#include <ArduinoBLE.h>
SensorAccel accel(0);
BLEService telemetry("F0F0");
BLEShortCharacteristic accX("F0F1", BLENotify);
void setup() {
Serial.begin(115200);
nicla::begin();
BHY2.begin();
accel.begin();
BHY2.update();
BLE.begin();
BLE.setLocalName("SenseME");
BLE.setAdvertisedService(telemetry);
telemetry.addCharacteristic(accX);
BLE.addService(telemetry);
BLE.advertise();
}
void loop() {
BHY2.update();
BLE.poll();
if (accel.checkNewData()) {
// ax en g -> centièmes de g dans un int16
accX.writeValue((int16_t)(accel.x() * 100));
}
delay(20);
}