Probando la tecnología Bluetooth 4.2 Low Energy (BLE)
Hoy en día, parece que todo es inalámbrico y también "inteligente". Si su dispositivo inteligente no está siendo víctima de un ataque DDos, según vaticinios del experto en ciberseguridad Brian Kerbs, puede ser divertido abrirlo para ver cómo funciona. En este episodio de "Lo que se puede hacer en un día", vamos a jugar un poco (sin gastar nada) con la tecnología Bluetooth Low Energy (BLE).
BLUETOOTH 4.2 LOW ENERGY (BLE)
Empezaremos por estudiar de qué se trata eso del BLE (también conocido como Bluetooth "inteligente"). Si ya conoce la tecnología Bluetooth, puede saltarse esta sección e ir directamente a los `Pasos a seguir’; de lo contrario, prepárese para aprender esta lección magistral.
Lo primero y más destacable de BLE es que, aunque funciona en la banda de frecuencia de 2,4 GHz sin necesidad de licencia, como el Bluetooth clásico, en realidad se trata de una subespecificación ligera de Bluetooth 4.2 con otro pedigrí diferente al de la especificación principal (se desarrolló a partir del protocolo "Wibree" de Nokia), por tanto BLE no es compatible con Bluetooth clásico en aplicaciones inalámbricas de corto alcance.
El atractivo para los diseñadores es la simplicidad de BLE (además de que hay menos trabas legales que solucionar para lanzar el producto al mercado), además de su aclamado bajo consumo energético. Los dispositivos BLE pasan la mayoría del tiempo en estado de hibernación. Cuando se activan para enviar datos, usan una capa de enlace muy simple, diseñada para las conexiones rápidas, y apenas tardan unos milisegundos (comparados con los 100 ms para el Bluetooth clásico) en transmitir mensajes de longitud ajustable en un ciclo que puede ser de hasta un 0,1 %. Esta rapidez se suma al impresionante bajo consumo y a una batería mucho más duradera: hablamos de años en lugar de horas o días.
Figura 1
El protocolo BLE divide la banda de 2,4 GHZ (2402MHz - 2480Mz) en 40 canales (3 canales de "anuncio" y 37 canales de datos) con una separación de 2 MHz, usando la modulación por desplazamiento de frecuencia gaussiana (Gaussian Frequency Shift Keying, GSFK) y el salto de canales adaptativo.
CONEXIONES BLE
En la conexión BLE intervienen dos actores: un dispositivo periférico y un dispositivo central. El periférico (por lo general, un sensor o un monitor de algún tipo) indica su presencia en los canales de anuncio a los dispositivos que podrían estar intentando establecer una conexión. El periférico sigue a un protocolo, que ejecuta un servidor para repartir los datos que está generando. El dispositivo central (por lo general, un smartphone, tablet o similar) explora en los canales de anuncio si hay periféricos a los que poder conectarse. Un dispositivo central es un iniciador de protocolos, que ejecuta un cliente para recibir los datos enviados por el periférico. La interacción de los dispositivos en esta fase se define mediante el perfil de acceso genérico (Generic Access Profile, GAP).
Cuando se ha establecido la conexión, es exclusiva (un periférico sólo puede conectarse a un dispositivo cada vez), de modo que el periférico deja de anunciarse. El dispositivo central configurará los parámetros de conexión propios y los del dispositivo periférico. Esta interacción se define por el perfil de atributo genérico (Generic Attribute, GATT) que controla el flujo de datos.
Figura 2
Los servicios, las características y sus descriptores se denominan en conjunto como atributos, y se identifican con identificadores únicos universales (Universally Unique Identifier, UUID).
Los UUID son valores de 128 bits (p. ej., 126e4589-e87b-12d3-a456-926344550000) pero pueden ser de 16 bits (p. ej., e87b) para perfiles estándares Blueetooth SIG.
El dispositivo central averigua los datos que oferta el periférico realizando una detección de servicio y lo que obtiene es un perfil, que es básicamente un conjunto de uno o varios servicios (los tipos de datos en oferta), que a su vez se componen de características (que pueden tener un descriptor). Imagine las características como contenedores de datos, mientras que los descriptores son etiquetas para esos datos. Las características siempre incluyen al menos dos atributos: la declaración de características (con metadatos sobre los datos reales) y el valor de la característica (los datos reales), que se solucionan con sus identificadores. Tranquilo, todo le quedará más claro cuando veamos un ejemplo práctico real más adelante.
Para facilitar la interoperabilidad, la asociación Bluetooth Special Interests Group (SIG) ha estandarizado varios perfiles para distintos tipos de aplicaciones. Entre otros, hay perfiles para mediciones medioambientales, frecuencia cardíaca, pruebas de glucosa y búsqueda de objetos (para encontrar esas llaves que siempre se pierden, etc.). Obviamente, también se pueden crear perfiles personalizados.
Por ejemplo, tomemos el perfil de frecuencia cardíaca. Este perfil tiene dos servicios: servicio de frecuencia cardíaca y servicio de información del dispositivo. En el servicio de frecuencia cardíaca hay: una característica para medir el ritmo cardíaco, una característica de ubicación del sensor corporal y una característica de punto de control del ritmo cardíaco.
PASOS A SEGUIR
Para nuestro pequeño experimento, vamos a usar una LattePanda con una llave USB Cypress CY5677 como dispositivo central. Nuestro periférico es un sensor de humedad inteligente Humigadget SHT31 de Sensirion.
Seguro que está preguntándose por qué usamos una LattePanda. Por dos razones: la primera se basa en el precio (menos de 115 euros) y en el sistema operativo Windows 10, la segunda es echar por tierra el tópico de LattePanda "sí, una monada, pero ¿sirve para algo?". En definitiva, este es nuestro equipo de prueba:
INICIO
Lo primero que tenemos que hacer es descargar el software gratuito Cysmart del sitio web de Cypress.
Tendrá que registrarse en el sitio y configurar el software Akamai NetSession Interface que usa Cypress como administrador de descargas:
Figura 3
También tendrá que confirmar que .NET Framework 3.5 está habilitado para ejecutar este software:
1. Pulse [Tecla de Windows] + [R] en el teclado para abrir la ventana para ejecutar comandos.
2. Escriba "appwiz.cpl" en el cuadro "Abrir" y pulse [INTRO].
3. En la ventana "Programas y características", haga clic en el enlace de la parte superior izquierda "Activar o desactivar las características de Windows".
4. Se abrirá la ventana "Características de Windows". Compruebe si la opción ".NET Framework 3.5 (incluye .NET 2.0 y 3.0)" está activada y haga clic en "Aceptar".
Cuando instale el software Cysmart e inserte la llave en el puerto USB, estará listo para empezar. Sin embargo, quizá le pase como a mí, que la llave tenga firmware antiguo:
Figura 4
Si le ocurre esto, tendrá que descargar el software PSoC Programmer e instalarlo para volver a programar el firmware de la llave con la última versión:
Ejecute PSoC Programmer.
1. Haga clic en Archivo > Cargar (o pulse [F4]) para cargar el archivo hexadecimal.
2. Seleccione el archivo en C:Archivos de programaCypressCySmart1.2dongleCY5677BLE_4_2_Dongle_CySmart_256K.hex
3. Haga clic en Archivo > Programa (o pulse [F5]) para programar el firmware.
Llegados a este punto, ya estamos listos para ver BLE en acción.
USO DE CYSMART
La primera vez que ejecutamos el software, vemos una ventana parecida a esta:
Figura 5
Antes de pulsar el botón para empezar a buscar un dispositivo al que conectarse, debemos configurar nuestro dispositivo sensor Sensirion SHT31 para que anuncie su presencia en BLE. Para ello, mantenemos pulsado el botón de la parte delantera hasta que podamos ver "rFon" en la pantalla LCD. También se mostrará un número de 4 dígitos para identificar qué dispositivo estamos usando, en caso de que haya más de uno rondando. Empecemos la búsqueda:
Figura 6
Con la lista de dispositivos disponibles podemos detener la búsqueda. Parece que hay algunos dispositivos Bluetooth (básicamente teléfonos) además de nuestro dispositivo periférico. Si seleccionamos nuestro sensor inteligente Humigadget, podemos fiarnos en lo que está anunciando.
Figura 7
Si observamos la pestaña de datos de anuncio de la derecha, vemos que hay un byte de datos "marcadores" que permite a los dispositivos de búsqueda saber qué conexiones están disponibles. En este caso, estamos anunciando 0x06 que, con la descripción que aparece a continuación, nos indica que el Humigadget funciona en modo de detección general Bluetooth LE y no admite BR ni EDR (velocidad de datos básica, ni velocidad de datos mejorada), es decir, la especificación Bluetooth básica. En definitiva, el dispositivo está diciendo "Hablo BLE pero no Bluetooth clásico".
Si nos fijamos en uno de los teléfonos de nuestra selección, vemos que admite todas las especificaciones Bluetooth y, ya que es compatible con LE simultáneo y BR/EDR en el mismo dispositivo (controlador + host), es un dispositivo central en lugar de otro periférico simplón como nuestro sensor Humigadget:
Figura 8
Cuando volvemos a la pestaña de búsqueda de datos de respuesta para nuestro Humigadget, vemos cómo el dispositivo nos dice su nombre. En el primer byte, está la "declaración de característica", que corresponde a los metadatos que informan al dispositivo central de cuántos datos tiene la característica "nombre local completo": 0x11 (o 17 en decimales) bytes.
Figura 9
Si ahora pulsamos el botón de conexión, podemos crear nuestra conexión exclusiva con el Humigadget:
En la pantalla del Humigadget se muestra que ya no se está anunciando más. Para obtener un perfil del Humigadget tenemos que pulsar el botón de detección de todos los atributos. Este proceso podría tardar unos minutos, pero a cambio logramos un perfil exquisito para nuestro Humigadget:
Figura 10
Esta pantalla muestra cómo se crea un perfil. Justo arriba, vemos el primer servicio del perfil. Se trata de un servicio principal que controla el acceso al dispositivo y (junto con el siguiente servicio de atributo genérico) es un servicio obligatorio para los dispositivos BLE. Dentro de este servicio, vemos cada característica (cada una con una declaración seguida de valores de característica, es decir, los datos).
También vemos cómo cada atributo se resuelve con un identificador secuencial y un UUID (identificador exclusivo universal). Ya que estos atributos forman parte de los atributos predefinidos por Bluetooth SIG, sólo tienen 2 bytes (16 bits). Por ejemplo, advertirá el UUID 0x2803 que aparece más de una vez en nuestras imágenes. Es el número UUID asignado para una declaración de característica GATT.
Si ahora pulsamos el botón para emparejar y el de habilitar todas las notificaciones, nuestro dispositivo central se conectará con el periférico. Cuando bajemos por la página, veremos cómo los datos se están actualizando:
Figura 11
Por supuesto, el depurador muestra en hexadecimal los datos sin formato recibidos por el dispositivo central (resaltado en azul). Si deseamos hacerlos legibles para los humanos, tendríamos que convertirlos en la aplicación que creemos para leer los datos en un teléfono o tablet.
Fíjese en los UUID de 128 bits para nuestro servicio de datos ya que estamos usando características personalizadas. Cada uno se compone de un UUID de servicio de 16 bits y el UUID de base. En nuestro caso, el UUID de base es 0000-xxxx-B38D-4985-720E-0F99-3A68-EE41, mientras que los UUID de servicio que estamos usando son 0x1235 y 0x2235 respectivamente.
CONCLUSIÓN
Por supuesto, hay mucho más que investigar a partir de este punto, y sólo falta dar un salto relativamente pequeño para obtener un kit de desarrollo con BLE y crear sus propias aplicaciones BLE. Espero que esta pequeña introducción a BLE le haya despertado la curiosidad para adentrarse en este nuevo mundo. Las barreras para ser parte de esta revolución inalámbrica se han reducido bastante en términos de la experiencia técnica necesaria y los costes. Así que no hay mucho que pueda frenarle.