ble_service.ino

Arduino Nicla Vision · Archivo : ble_service.ino · Lenguaje : Arduino · Uso : Diffuser un service BLE avec une mesure

La radio BLE (módulo NINA) difunde un servicio custom F0F0 con una característica notify que lleva la temperatura en décimas de grado. Desde la app nRF Connect el valor se actualiza en vivo: el patrón de todo sensor inalámbrico Arduino.

Hardware

Una Arduino Nicla Vision (STM32H7 M7+M4, 23×23 mm) con cámara GC2145, IMU LSM6DSOX, micrófono PDM, ToF (VL53Lx), módulo ESP32 Wi-Fi/BLE y LED RGB (LEDR/G/B). La placa sola; un teléfono con nRF Connect o LightBlue para leer la característica.

Cableado

Sin cableado. Sustituir la simulación por un sensor real (I2C o 0-3,3 V en A0 = pin 15) para temperatura verdadera.

Funcionamiento

BLE.begin enciende la radio; servicio y característica se declaran antes de advertise; writeValue dispara una notificación a los clientes suscritos. BLE.poll mueve la pila.

Ejecución

Programación desde Arduino IDE (core ArduinoCore-mbed) por USB-C; librerías Camera, PDM, LSM6DSOX, WiFiNINA y ArduinoBLE.

Variantes

Añadir varias características (humedad, RSSI), activar pairing, o conectar BLE y Wi-Fi a la vez como pasarela sensor → nube.

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

← Volver a la ficha