🛠 Diffuser ses capteurs en BLE avec ArduinoBLE

Arduino Nicla Sense ME · intermediaire · Schéma : IMG-nicla-sense-me-intermediaire-2-niclasense-ble-arduino.svg — Nicla Sense ME au centre émettant des ondes BLE vers un smartphone affichant une carte de caractéristique température, module ANNA-B112 et puce nRF52832 annotés sous la carte

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

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

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels