Conceptos básicos de ESP32: Bluetooth de baja energía (BLE)

El ESP32 es un microcontrolador versátil y potente que ofrece una amplia gama de funcionalidades para proyectos de IoT. En este artículo, nos enfocaremos en uno de sus aspectos más importantes: el Bluetooth de baja energía (BLE). Aprenderemos los conceptos básicos de esta tecnología y cómo podemos aprovecharla al máximo en nuestros desarrollos con el ESP32. ¡Sigue leyendo para descubrir todo lo que necesitas saber sobre BLE y el ESP32!

Bluetooth Low Energy (BLE) es omnipresente hoy en día. Si enciende un escáner en su teléfono y camina por el vecindario, sin duda encontrará docenas, si no cientos, de dispositivos BLE.

Si tiene curiosidad y desea trabajar con BLE, este tutorial es un excelente lugar para comenzar. Le brinda una descripción general rápida de BLE (específicamente, cómo se organizan los datos en BLE, cómo dos dispositivos BLE se comunican entre sí) y cómo usar BLE en ESP32.

Conceptos básicos de Bluetooth de baja energía

Bluetooth Low Energy (BLE), a veces denominado «Bluetooth Smart», es un subconjunto liviano del Bluetooth clásico introducido como parte de la especificación principal de Bluetooth 4.0.

BLE está diseñado para dispositivos que rara vez envían pequeñas cantidades de datos y funcionan con baterías pequeñas. Utiliza la misma banda de frecuencia que el Bluetooth clásico: la banda ISM (Industrial, Científica y Médica) de 2,4 GHz, cuyo uso no requiere licencia. La banda ISM se divide en 40 canales y los dispositivos BLE cambian entre ellos para evitar interferencias.

Para ahorrar energía, BLE tiene una potencia de transmisión menor (0,01 a 10 mW) en comparación con el Bluetooth clásico (hasta 100 mW para dispositivos de Clase 1 y 1 mW para dispositivos de Clase 3). Los datos se envían de la misma manera (usando la codificación por desplazamiento de frecuencia gaussiana), pero la velocidad de transferencia de datos es menor: un máximo de 1 Mbit/s en comparación con el máximo de 24 Mbit/s con el Bluetooth clásico. Los dispositivos BLE también pueden cambiar entre el modo de espera y el modo activo mucho más rápido que los dispositivos Bluetooth clásicos, ahorrando aún más energía.

En resumen, BLE ofrece muchas de las mismas funciones que Bluetooth Classic, pero con énfasis en el bajo consumo de energía. Por lo tanto, se ha convertido en la tecnología estándar para una amplia gama de aplicaciones, incluidas iluminación inteligente, hogares inteligentes, balizas, rastreadores de actividad física, bombas de insulina, audífonos y otras aplicaciones sensibles a la energía.

Conceptos básicos de ESP32: Bluetooth de baja energía (BLE)

Perfiles Bluetooth

Los perfiles de Bluetooth son protocolos adicionales que se basan en el estándar Bluetooth básico. Ayudan a especificar el tipo de datos que transmite un módulo Bluetooth. Mientras que las especificaciones de Bluetooth definen cómo funciona la tecnología, los perfiles definen cómo se utiliza.

Los perfiles que admite un dispositivo Bluetooth determinan las aplicaciones para las que está diseñado. Por ejemplo, un auricular Bluetooth manos libres usa el perfil de auricular (HSP), mientras que un teclado inalámbrico usa el perfil de dispositivo de interfaz humana (HID). Estos perfiles son creados por señal Bluetooth (Grupo de Interés Especial de Bluetooth) o los diseñadores de periféricos. Puedes encontrar la lista completa de perfiles aceptados oficialmente. Aquí.

Los perfiles con los que debería estar familiarizado son GAP y GATT, ya que todos los perfiles BLE estándar se basan en ellos. Así que conozcámoslos mejor.

GAP (Perfil de Acceso Genérico)

GAP controla las conexiones y la publicidad en Bluetooth. GAP hace que su dispositivo sea visible para el mundo exterior y determina cómo dos dispositivos se reconocen y se conectan entre sí.

GAP define diferentes roles para los dispositivos, pero los dos conceptos clave a tener en cuenta son los dispositivos centrales y los dispositivos periféricos.

Periféricos Suelen ser dispositivos pequeños, de bajo consumo y recursos limitados, como pulsómetros o etiquetas de proximidad, que se pueden conectar a un dispositivo central mucho más potente.

Dispositivos centrales Generalmente son dispositivos con mucha más potencia de procesamiento y memoria, como teléfonos móviles o tabletas, a los que se conecta.

Conceptos básicos de ESP32: Bluetooth de baja energía (BLE)

Un dispositivo periférico se anuncia enviando paquetes publicitarios a intervalos establecidos para informar a los dispositivos centrales cercanos de su presencia. Una vez que se establece una conexión entre un dispositivo periférico y un dispositivo central, el proceso publicitario se detiene y entra en juego GATT, haciendo posible la comunicación bidireccional.

GATT (Perfil de atributo genérico)

GATT especifica cómo se deben organizar los datos y cómo dos dispositivos BLE deben intercambiar datos. A diferencia de GAP, que define las interacciones de bajo nivel con dispositivos, GATT sólo se ocupa de métodos y formatos de transferencia de datos reales.

Los datos se organizan jerárquicamente en secciones llamadas «servicios», que a su vez agrupan piezas de datos de usuario conceptualmente relacionadas llamadas «características», como se muestra en la siguiente figura:

Conceptos básicos de ESP32: Bluetooth de baja energía (BLE)

Servicios

Un servicio del GATT es una colección de datos relacionados conceptualmente llamados características. Cada servicio puede tener una o más características y tiene su propio identificador numérico único, o UUID, que tiene una longitud de 16 bits (para servicios BLE adoptados oficialmente) o 128 bits (para servicios personalizados). Luego más.

Por ejemplo, considere el Servicio de frecuencia cardíaca. Este servicio lanzado oficialmente tiene un UUID de 16 bits de 0x180D y contiene hasta 3 funciones: medición de frecuencia cardíaca, posición del sensor corporal y punto de control de frecuencia cardíaca. Se pueden encontrar otros servicios definidos por Bluetooth SIG Aquí.

Características

Una característica GATT es un grupo de información llamado atributos. Los atributos son la información que realmente se transfiere entre dispositivos BLE. Una característica típica consta de los siguientes atributos:

Conceptos básicos de ESP32: Bluetooth de baja energía (BLE)
  • Valor: son los datos reales almacenados en la propiedad. El valor puede ser cualquier tipo de datos, p. B. un número, una cadena o una matriz de bytes.
  • Descripción: proporciona información adicional u opciones de configuración para la función.

Además del valor, a cada característica se le asignan las siguientes propiedades:

  • Manejar: un número de 16 bits utilizado para acceder a la característica en el dispositivo servidor.
  • UUID: un identificador único universal de 128 bits que especifica lo que representa la característica.
  • Permisos: Define qué operaciones están permitidas para la característica, p.e. B. Leer, escribir o notificar.

UUID (Identificador único universal)

Los UUID garantizan que los servicios y funciones puedan identificarse claramente. Desempeñan un papel esencial en la definición y el acceso a los datos de un dispositivo BLE. Hay dos tipos de UUID en BLE:

  • UUID de 16 bits: utilizado para perfiles, servicios y propiedades oficiales de BLE. Estos están estandarizados por Bluetooth SIG. Por ejemplo, el Servicio de frecuencia cardíaca tiene un UUID estandarizado de 16 bits de 0x180D, mientras que la propiedad Medición de frecuencia cardíaca dentro del Servicio de frecuencia cardíaca utiliza un UUID de 0x2A37.
  • UUID de 128 bits: se utiliza para servicios y funciones personalizados (específicos del proveedor). Cuando una empresa desarrolla su propio servicio que no está cubierto por los servicios BLE oficiales, utiliza un UUID único de 128 bits. Un UUID de 128 bits tiene este aspecto: 4fafc201-1fb5-459e-8fcc-c5c9c331914b.

Servidor GATT y cliente GATT

Desde la perspectiva del GATT, dos dispositivos conectados desempeñan cada uno de ellos una de dos funciones.

  • El servidor GATT es el dispositivo que contiene la base de datos de características.
  • El cliente GATT es el dispositivo que lee o escribe datos desde o hacia el servidor GATT.

La siguiente figura ilustra esta relación en un ejemplo de conexión BLE donde el dispositivo periférico (un ESP32) es el servidor GATT mientras que el dispositivo central (un teléfono inteligente) es el cliente GATT.

Conceptos básicos de ESP32: Bluetooth de baja energía (BLE)

Es importante señalar que las funciones de cliente y servidor del GATT son independientes de las funciones periféricas y centrales del GAP. Un dispositivo periférico puede ser un cliente GATT o un servidor GATT o ambos, y de manera similar una unidad central puede ser un cliente GATT o un servidor GATT.

Usando BLE en el ESP32

Ahora que conoce el protocolo de comunicaciones inalámbricas Bluetooth Low Energy (BLE), incluidas sus funciones, perfiles y cómo se comunica con los dispositivos, es hora de probarlo.

Hay varios bocetos de ejemplo para ESP32 disponibles en la biblioteca ESP32 BLE. Esta biblioteca se instala cuando instala el núcleo ESP32 en el IDE de Arduino.

Para acceder a los bocetos de muestra, navegue hasta archivo > Ejemplos > ESP32 BLEArduino.

Verá una selección de bocetos de muestra. Puede seleccionar uno de ellos para cargar el boceto en su IDE. Empecemos con esto servidor_BLE Ejemplo.

En este ejemplo, el ESP32 está configurado como un servidor BLE con un servicio y una propiedad específicos. Luego anuncia este servicio para que los clientes BLE, como su teléfono inteligente, puedan encontrarlo y acceder a él.

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

// See the following for generating UUIDs:
// https://www.uuidgenerator.net/

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

void setup() {
  Serial.begin(115200);
  Serial.println("Starting BLE work!");

  BLEDevice::init("MyESP32");  // set the device name
  BLEServer *pServer = BLEDevice::createServer();
  BLEService *pService = pServer->createService(SERVICE_UUID);
  BLECharacteristic *pCharacteristic = pService->createCharacteristic(
                                         CHARACTERISTIC_UUID,
                                         BLECharacteristic::PROPERTY_READ |
                                         BLECharacteristic::PROPERTY_WRITE
                                       );

  pCharacteristic->setValue("Hello World!");
  pService->start();
  // BLEAdvertising *pAdvertising = pServer->getAdvertising();  // this still is working for backward compatibility
  BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
  pAdvertising->addServiceUUID(SERVICE_UUID);
  pAdvertising->setScanResponse(true);
  pAdvertising->setMinPreferred(0x06);  // functions that help with iPhone connections issue
  pAdvertising->setMinPreferred(0x12);
  BLEDevice::startAdvertising();
  Serial.println("Characteristic defined! Now you can read it in your phone!");
}

void loop() {
  // put your main code here, to run repeatedly:
  delay(2000);
}

Explicación del código:

Repasemos el código BLE_server en detalle. Comienza con la integración de las bibliotecas necesarias para las operaciones BLE en el ESP32.

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

A continuación, se definen los UUID para el servicio y la característica. Los UUID (identificadores universalmente únicos) identifican de forma única servicios y características en BLE.

Puedes usar los UUID estándar o también uuidgenerator.net para generar UUID aleatorios.

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

En la configuración, la comunicación serie se inicializa con una velocidad de baudios de 115200.

Serial.begin(115200);

Entonces un dispositivo BLE llamado MyESP32 es creado. Puedes cambiar el nombre al que quieras.

// Create the BLE Device
BLEDevice::init("MyESP32");

Después de eso, nuestro dispositivo BLE se configura como servidor.

BLEServer *pServer = BLEDevice::createServer();

A continuación se crea un nuevo servicio para nuestro servidor con el UUID previamente definido.

BLEService *pService = pServer->createService(SERVICE_UUID);

Luego se crea una nueva característica para el servicio. Como puede ver, las propiedades de la característica, en este caso READ Y WRITEse utilizan como argumentos junto con eso CHARACTERISTIC_UUID.

BLECharacteristic *pCharacteristic = pService->createCharacteristic(
                                     CHARACTERISTIC_UUID,
                                     BLECharacteristic::PROPERTY_READ |
                                     BLECharacteristic::PROPERTY_WRITE
                                     );

Después de crear la característica, utilice el setValue() método para establecer su valor. En este caso, el valor se establece en el texto «¡Hola mundo!» Puedes cambiar este texto por el que quieras; podría ser el valor de un sensor, el estado de un botón u otra cosa.

pCharacteristic->setValue("Hello World!");

Luego se inicia el servicio para que pueda responder a las solicitudes entrantes.

pService->start();

Finalmente se configuran los parámetros publicitarios y luego se anuncia el servicio. La publicidad hace que el ESP32 sea reconocible para otros dispositivos BLE.

BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID(SERVICE_UUID);
pAdvertising->setScanResponse(true);
pAdvertising->setMinPreferred(0x06);
pAdvertising->setMinPreferred(0x12);
BLEDevice::startAdvertising();

Este es un ejemplo sencillo de cómo configurar un servidor BLE para que nada dentro del loop(). Sin embargo, dependiendo de la aplicación, puede incluir acciones en caso de que se conecte un nuevo cliente (consulte el ejemplo BLE_notify para obtener instrucciones).

void loop() {
  delay(2000);
}

Uso de nRF Connect para realizar pruebas

Para probar la conexión BLE, debe emparejar el ESP32 con su teléfono inteligente. También necesita tener instalada una aplicación de depuración de Bluetooth. Hay múltiples posibilidades; es uno de nuestros favoritos Conexión nRF de Nordicque está disponible para dispositivos iOS y Android. Es una poderosa herramienta que le permite escanear, explorar y comunicarse con sus dispositivos BLE.

1. Vaya a Google Play Store o Apple App Store y busque «nRF Connect for Mobile». Instala la aplicación y ábrela.

Conceptos básicos de ESP32: Bluetooth de baja energía (BLE)

2. Asegúrese de que Bluetooth esté habilitado en su teléfono.

Conceptos básicos de ESP32: Bluetooth de baja energía (BLE)

3. Toque el botón «ESCANEAR» en la aplicación. La aplicación comenzará a buscar dispositivos BLE cercanos.

Conceptos básicos de ESP32: Bluetooth de baja energía (BLE)

4. Se muestra una lista de dispositivos disponibles con la intensidad de su señal y otros detalles. Busque «MyESP32» y haga clic en el botón «Conectar» al lado.

Conceptos básicos de ESP32: Bluetooth de baja energía (BLE)

5. Serás redirigido a la vista Servicios. Allí verá una lista de servicios disponibles. Haga clic en «Servicio desconocido»: la cadena UUID debe coincidir SERVICE_UUID en su código de ejemplo.

Conceptos básicos de ESP32: Bluetooth de baja energía (BLE)

6. Toque un servicio para ver sus propiedades. Hay dos símbolos al lado de cada característica. La flecha hacia abajo le permite leer una característica, mientras que la flecha hacia arriba le permite escribir en ella.

Conceptos básicos de ESP32: Bluetooth de baja energía (BLE)

7. Toque la flecha hacia abajo para leer la propiedad. Verá las propiedades UUID, READ y WRITE de la propiedad y el valor «¡Hola mundo!», exactamente como se especifica en nuestro código.

Conceptos básicos de ESP32: Bluetooth de baja energía (BLE)

Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded






Conceptos básicos de ESP32: Bluetooth de baja energía (BLE)

Conceptos básicos de ESP32: Bluetooth de baja energía (BLE)

Bluetooth Low Energy (BLE) se encuentra en todas partes en la actualidad. Si enciendes un escáner en tu teléfono y caminas por el vecindario, sin duda encontrarás docenas, si no cientos, de dispositivos BLE.

Conceptos básicos de Bluetooth de baja energía

Bluetooth de baja energía (BLE), a veces conocido como «Bluetooth Smart», es un subconjunto ligero del Bluetooth clásico introducido como parte de la especificación básica de Bluetooth 4.0. BLE está diseñado para dispositivos que envían pequeñas cantidades de datos con poca frecuencia y operan con baterías pequeñas. Utiliza la misma banda de frecuencia que el Bluetooth clásico: la banda ISM (Industrial, Scientific, Medical) de 2.4GHz, que no requiere licencia para su uso.

Para ahorrar energía, BLE tiene una potencia de transmisión más baja (0.01 a 10 mW) en comparación con el Bluetooth clásico. Los datos se envían de la misma manera (usando la modulación por desplazamiento de frecuencia gaussiana), pero la velocidad de transmisión de datos es menor. BLE tiene una velocidad máxima de 1 Mb/s, a diferencia de los 24 Mb/s del Bluetooth clásico. Los dispositivos BLE también pueden cambiar entre los modos de espera y activo mucho más rápido que los dispositivos Bluetooth clásicos, lo que ahorra aún más energía.

En resumen, BLE está diseñado para ofrecer muchas de las mismas funciones que el Bluetooth clásico, pero con un enfoque en el bajo consumo. Como resultado, se ha convertido en la tecnología estándar para una amplia gama de aplicaciones, incluyendo iluminación inteligente, hogares inteligentes, balizas, monitorización de actividad física, bombas de insulina, audífonos y otras aplicaciones sensibles a la energía.

Perfiles de Bluetooth

Los perfiles de Bluetooth son protocolos adicionales que se basan en el estándar básico de Bluetooth. Ayudan a especificar el tipo de datos que un módulo Bluetooth transmite. Mientras que las especificaciones de Bluetooth definen cómo funciona la tecnología, los perfiles definen cómo se utiliza.

Los perfiles que debe conocer son GAP y GATT, ya que todos los perfiles BLE estándar se basan en ellos. GAP controla las conexiones y la publicidad en Bluetooth, mientras que GATT especifica cómo se debe organizar la transferencia de datos entre dos dispositivos BLE.

Uso de BLE en el ESP32

Ahora que has aprendido sobre el protocolo de comunicación inalámbrica Bluetooth de baja energía (BLE), incluidas sus características, perfiles y cómo se comunica con los dispositivos, es hora de probarlo. Hay varios ejemplos disponibles para el ESP32 en la biblioteca ESP32 BLE. Esta biblioteca se instala cuando instalas el núcleo ESP32 en el IDE de Arduino.

Para acceder a los ejemplos, navega a Archivo > Ejemplos > ESP32 BLE Arduino en tu IDE. Puedes elegir cualquiera de los ejemplos para cargar el esbozo en tu IDE. Comencemos con el ejemplo BLE_server.

  1. Código de ejemplo BLE_server:
  2.     
    #include <BLEDevice.h>
    #include <BLEUtils.h>
    #include <BLEServer.h>
    
    #define SERVICE_UUID        "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
    #define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
    
    void setup() {
      Serial.begin(115200);
      Serial.println("Starting BLE work!");
    
      BLEDevice::init("MyESP32");  
      BLEServer *pServer = BLEDevice::createServer();
      BLEService *pService = pServer->createService(SERVICE_UUID);
      BLECharacteristic *pCharacteristic = pService->createCharacteristic(
                                             CHARACTERISTIC_UUID,
                                             BLECharacteristic::PROPERTY_READ |
                                             BLECharacteristic::PROPERTY_WRITE
                                           );
    
      pCharacteristic->setValue("Hello World!");
      pService->start();
      BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
      pAdvertising->addServiceUUID(SERVICE_UUID);
      pAdvertising->setScanResponse(true);
      pAdvertising->setMinPreferred(0x06);
      pAdvertising->setMinPreferred(0x12);
      BLEDevice::startAdvertising();
      Serial.println("Characteristic defined! Now you can read it in your phone!");
    }
    
    void loop() {
      delay(2000);
    }
        
      

Este es un ejemplo simple de cómo configurar un servidor BLE en el ESP32, por lo que no se ejecuta nada dentro del bucle (). Dependiendo de la aplicación, sin embargo, puedes incluir acciones para cuando un nuevo cliente se conecte.

Usar el nRF Connect para probar la conexión BLE. Para probar la conexión BLE, tendrás que emparejar el ESP32 con tu teléfono. También necesitarás una aplicación de depuración de Bluetooth instalada en él. Hay varias opciones disponibles; uno de nuestros favoritos es nRF Connect de Nordic, que está disponible para dispositivos iOS y Android. Es una herramienta potente que te permite escanear y explorar tus dispositivos BLE y comunicarte con ellos.

Para obtener más detalles sobre cómo probar la conexión BLE con nRF Connect, visita la página de nRF Connect.


3 comentarios en «Conceptos básicos de ESP32: Bluetooth de baja energía (BLE)»

Deja un comentario