ble_service.ino

Arduino Nicla Vision · Fichier : ble_service.ino · Langage : Arduino · Usage : Diffuser un service BLE avec une mesure

La radio BLE (module NINA) diffuse un service custom F0F0 avec une caractéristique notify de température en dixièmes de degré. Depuis l’app nRF Connect, la valeur se met à jour en direct — le patron de tout capteur sans fil Arduino.

Matériel requis

Une Arduino Nicla Vision (STM32H7 double cœur M7+M4, 23×23 mm) avec caméra GC2145 2 MP, IMU LSM6DSOX, micro PDM, capteur ToF (famille VL53Lx), module sans fil ESP32 (Wi-Fi/BLE) et LED RGB (LEDR=23, LEDG=24, LEDB=25). La carte seule ; un smartphone avec nRF Connect ou LightBlue pour lire la caractéristique.

Câblage

Aucun câblage. Remplacer la simulation par un capteur réel (I2C ou 0-3,3 V sur A0=broche 15) pour une température vraie.

Fonctionnement

BLE.begin allume la radio ; le service et la caractéristique sont déclarés avant advertise ; writeValue déclenche une notification vers les clients abonnés. BLE.poll fait tourner la pile.

Exécution

Programmation via Arduino IDE (core ArduinoCore-mbed, target NICLA_VISION) sur le port USB-C ; bibliothèques Camera, PDM, Arduino_LSM6DSOX, WiFiNINA et ArduinoBLE fournies.

Variantes

Ajouter plusieurs caractéristiques (humidité, RSSI), activer le pairing, ou connecter le BLE et le Wi-Fi simultanément pour un passerelle capteur → cloud.

ble_service.ino

// Périphérique BLE : service custom + caractéristique notify
// portant la température (ici simulée, à câbler sur un capteur).
// Bibliothèque ArduinoBLE du core.

#include <ArduinoBLE.h>

BLEService surveillance("F0F0");
BLEIntCharacteristic temperature("F0F1", BLENotify | BLERead);

void setup() {
  Serial.begin(115200);
  if (!BLE.begin()) {
    Serial.println("Radio BLE indisponible");
    while (1) { ; }
  }
  BLE.setLocalName("NiclaVision");
  BLE.setAdvertisedService(surveillance);
  surveillance.addCharacteristic(temperature);
  BLE.addService(surveillance);
  temperature.writeValue(210);          // 21,0 °C en dixièmes
  BLE.advertise();
  Serial.println("BLE « NiclaVision » diffusé");
}

void loop() {
  BLE.poll();                            // sert la pile BLE

  static unsigned long t = 0;
  if (millis() - t > 2000) {             // rafraîchit toutes les 2 s
    t = millis();
    int dixiemes = 200 + random(0, 50);  // simulation capteur
    temperature.writeValue(dixiemes);
  }
}

← Retour à la fiche