bclose

Bluetooth con ESP32: Notificaciones

Activando las notificaciones BLE

Bluetooth BLE: Notify

 

 

  • Modificaremos el programa Servidor BLE.
  • Estudiaremos el caso de servidor BLE con Notify.
  • Presentaremos un programa con Notificaciones automáticas.
 

Material requerido.

 

 Tienda EspañaTienda Mexico
 vista lateral del esp32
Un ESP32

 

Refinando el programa servidor

 

Hemos conseguido que nuestro servidor BLE vaya publicando cada dos segundos el texto que calculamos como una String más un numero aleatorio, lo que no está mal, pero para poderlo leer tendríamos que ir leyendo progresivamente el valor de la Característica. Puede valer, pero para los que vayan a por nota, podríamos mejorar un poco esto combinando nuestro servidor con el ejemplo BLE notify que viene con las librerías del ESP32

La idea es que sea nuestro servidor quien haga un “push” ( Bombeo) del valor requerido hacia nuestro cliente en cuanto nos conectemos, con un intervalo de tiempo que por defecto es de 1 segundo (Aunque siempre podemos frenarlo).

Es algo parecido a suscribirse a un servicio de mensajes, no hay que ir a buscarlos, te llega a casa directamente al buzón sin tu intervención manual. Es un sistema muy comodo de recibir mensajes de digamos sensores. Imaginate que tu sensor de ttemperatura lee el valor una vez cada hora (La temperatura no cambia demasiado rapido)

Es algo parecido a suscribirse a un servicio de mensajes, no hay que ir a buscarlos, te llega a casa directamente al buzón sin tu intervención manual. Es un sistema muy cómodo de recibir mensajes de digamos sensores. Imagínate que tu sensor de temperatura lee el valor una vez cada hora, (La temperatura no cambia demasiado rápido) en lugar de iniciar una llamada cada cierto tiempo para ver si hay nuevas lecturas, podemos sentarnos tranquilamente y esperar a que el servidor nos envié el dato cuando tenga disponible la nueva lectura. No es necesario comprobar periódicamente si hay nuevos valores. Recuerda que el Bluetooth BLE esta diseñado para ahorrar energía al máximo

Para esto, tendrmos que hacer algunas modificaciones en el servidor, pero quien dijo miedo. Vamos allá.

Empezamos con los include:

#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

#include <stdio.h>
char buffer[32];

Ya conocemos casi todas esas líneas, con excepción del último include, hablaremos de el mas adelante. Vamos ahora a crear los punteros públicos, para el servidor BLE y la Característica:

BLEServer* pServer = NULL;
BLECharacteristic* pCharacteristic = NULL;

bool deviceConnected = false;
bool oldDeviceConnected = false;
uint32_t value = 0;

Hemos creado un par de variables bool para saber si tenemos a alguien conectado al servidor o no, y ahora vamos con los UUIDs como siempre:

#define SERVICE_UUID        "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"

Vamos ahora con una cosa ligeramente mas truculenta, que consiste en vincular una función callback al Servidor BLE, para saber cuando hay alguien conectado o no, para bombear los datos:

Contenido solo disponible para suscriptores. ¡Accede al contenido!

             

Si lo pulsas, verás como aparecerá debajo el mensaje que estamos notificando con la cadena de texto mas el numero aleatorio, y esta vez, al aceptar el “push” del servidor BLE, va cambiando de forma continua el solito, no necesitamos pedirlo, simplemente lo recibimos enviado graciosamente por el servidor.

Aquí os dejo un mini video de mi Xiaomi mostrando el resultado:

 

 

IMAGEN DE MARCA