ble_stream.ino

Arduino Nicla Sense ME · Fichier : ble_stream.ino · Langage : Arduino · Usage : Diffuser les capteurs en Bluetooth LE

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);
}

← Retour à la fiche