Iniciando con Bluetooth Low Energy
Para el usuario promedio, el Bluetooth Low Energy (BLE) es solo la magia invisible que empareja sus audífonos al teléfono. Pero para quienes diseñamos hardware y construimos soluciones IoT, es una de las herramientas más potentes de nuestro arsenal. Es el protocolo que permite que un nodo sensor sobreviva meses con una simple batería de botón, y es el motor silencioso que hace posible plataformas SaaS complejas —como la trazabilidad en tiempo real de equipos médicos o el monitoreo industrial— comunicando decenas de dispositivos de forma simultánea, segura y eficiente.
Sin embargo, adentrarse en sus especificaciones técnicas por primera vez puede parecer como aprender un idioma nuevo: GAP, GATT, UUIDs, Broadcasting... En este artículo, vamos a desmitificar la anatomía interna del BLE. Entenderemos exactamente cómo fluyen los datos en el aire y cómo puedes diseñar arquitecturas inalámbricas verdaderamente robustas desde cero. Si quieres dejar de depender del ensayo y error al programar tus microcontroladores, y empezar a dominar el estándar de comunicación que enlaza el mundo físico, este es tu punto de partida.
Conceptos clave:
El protocolo BLE Soporta dos estilos de comunicación: orientada a la conexión y broadcast. La primera cuando hay una conexión establecida entre dispositivos que da inicio a un canal bidireccional, como cuando una persona hace una llamada al celular de la otra, la cual debe contestar y así establecer un canal privado y bidireccional para poder conversar, por otro lado, la comunicación broadcast es cuando los dispositivos se comunican sin antes haber establecido una conexión, esta se hace con paquetes de datos de broadcast y cualquier dispositivo dentro del rango puede escuchar, es como una emisora de radio que siempre transmite su contenido y cualquiera dentro del rango que sintonice la frecuencia FM escuchará el contenido público.
Publicar y escanear (Advertising and scanning): se refiere al proceso en el cual los dispositivos BLE buscan percatarse de la presencia del otro y explorar posibilidades de conexión. Para que dos dispositivos se conecten al menos uno debe advertir su presencia con el deseo de conectarse (usando advertising packets or bradcasting data) mientras que otro escanea a su alrededor tratando de encontrar al primero (listening for advertising packets).
Central y periféricos: (centrals and pheriferals) En el ejemplo anterior el dispositivo que advierte su presencia es el periférico y quién hace el escaneo de la red en búsqueda de periféricos es el central. El pheriferal envía paquetes de anuncios (advertisement packets) que son captados por la central y esta puede intentar iniciar una conexión enviando una petición al periférico. Un central puede enviar solicitudes de conexión a más de un periférico y este puede aceptar solicitudes de conexión de más de un central.
Luego de que central y periférico establecen una conexión se requiere establecer una comunicación bidireccional para intercambio de datos, esto requiere especificar un protocolo y una estructura de datos bien definida, aquí es donde entran las capas ATT y GATT.
La capa ATT (Attribute Protocol - Protocolo de Atributos) es un protocolo de transporte optimizado diseñado para ocupar la menor cantidad de bytes posible, cada fragmento de dato enviado por este medio se conoce como atributo y cada atributo se identifica de forma exclusiva mediante un UUID (Identificador único Universal de 128 bits), el protocolo de atributos se basa en la capa cliente servidor, donde un servidor que contiene datos puede enviarlos a un cliente o el cliente puede pedirlos, los roles de cliente y servidor de esta capa son independientes de los roles central y periféricos que mencionamos antes, asi que un central puede ser ambos cliente o servidor, lo mismo para un periférico.
El perfil GATT (Generic Attribute Profile - Perfil de Atributos Genéricos) es una especificación general que define una estructura jerárquica para enviar y recibir fragmentos de datos cortos, conocidos como "atributos", a través de un vínculo BLE.
Estructura jerárquica: Los datos en GATT se organizan en niveles:
- Perfiles: El nivel superior que contiene uno o más servicios dirigidos al mismo caso de uso.
- Servicios: Son colecciones de información, como lecturas de sensores (por ejemplo, humedad, temperatura y presión). Existen servicios estandarizados por el Bluetooth SIG (como "Ritmo cardíaco" o "Nivel de batería") y los valores de los UUIDs asignados los podemos encontrar aquí:

- Características: Es el nivel donde reside el valor real del dato (el mensaje o la medición) Siempre pertenece a un servicio y consta de dos partes principales: la declaración de la característica (metadatos) y el valor de la misma. Además, las características definen sus propiedades, que determinan cómo se puede interactuar con el dato, permitiendo operaciones como:
- Read (Lectura): El cliente pide el valor al servidor.
- Write (Escritura): El cliente envía un nuevo valor al servidor.
- Notify/Indicate (Notificación/Indicación): El servidor envía automáticamente el dato al cliente cuando este cambia.
- Un atributo es la unidad básica de datos que transporta el Protocolo de Atributos (ATT). En términos técnicos, tanto los servicios como las características se formatean y transmiten como atributos. Cada atributo se identifica de forma exclusiva mediante un UUID (Como lo describimos arriba),
Puedes entrar a este sitio para generar tu propio UUID link

Entender este "idioma invisible" es lo que te permitirá diseñar arquitecturas escalables y eficientes energéticamente desde el papel. Pero la teoría sin ejecución se queda corta, y es momento de ensuciarnos las manos. En el próximo artículo de esta serie, pasaremos de los diagramas conceptuales al código real. Abriremos nuestro entorno de desarrollo, aplicaremos Programación Orientada a Objetos y construiremos desde cero un firmware BLE robusto, capaz de transmitir telemetría a múltiples dispositivos en tiempo real sin colapsar. Prepara tu café favorito, alista tu microcontrolador y acompáñame en la siguiente entrega para darle vida a todo lo que acabamos de aprender.