Conocer la posición exacta de un dispositivo dentro de cierto área sigue siendo una tarea pendiente. Con este objetivo en mente, se diseñó un software que permitiera hacer mediciones del nivel de señal (RSSI) de un dispositivo Bluetooth LE. Estos son los resultados iniciales.

ble-rssi-measure-heading

Medir el nivel de la potencia recibida de una señal (RSSI) no es una tarea baladí. Tampoco pretende ser este un artículo técnico ni riguroso. El objetivo de la tarea consistía en obtener las medidas utilizando hardware convencional: un dongle USB Bluetooth 4.0 (o LE), y una pulsera inteligente (en este caso, una Mi Band).

Software empleado

Para poder medir el RSSI es necesario que el dispositivo a localizar envíe un mensaje. A grandes rasgos, un dispositivo BLE no emparejado solo manda mensajes a la red cuando se realiza una solicitud de descubrimiento (una búsqueda o scan). Por ello, el primer componente que necesitamos es un mecanismo para iniciar el proceso de búsqueda en cualquier instante. Utilizamos la librería pygattlib en esta etapa. La URL del proyecto es: https://bitbucket.org/OscarAcena/pygattlib

Por otro lado, es necesario poder escuchar todos los mensajes de anunciamiento de los dispositivos cercanos. Si bien pygattlib permite recibir estos mensajes, no contienen toda la información necesaria (en concreto, carecen del RSSI). Por ello, se decidió utilizar una herramienta genérica de monitorización (btmon) que proporciona la propia pila Bluetooth del sistema: bluez.

Para unificarlo todo, se escribió una herramienta que lanza el monitor, inicia el proceso de búsqueda y recopila los resultados. Los detalles de uso y el código están disponibles en el repositorio del proyecto: https://bitbucket.org/arco_group/btle-rssi-measure

Resultados

En esta primera aproximación, se realizaron dos series de mediciones (ambas lineales) en el laboratorio Arco. No se eliminaron las posibles fuentes de ruido (redes Wireless, otros dispositivos BLE, …), ni los obstáculos entre el punto de medida y el dispositivo.

La primera serie constó de 5 mediciones (es decir, 5 búsquedas completas), con 1 segundo de espera, distanciando el dispositivo 25 cm entre cada paso, desde los 0 cm hasta los 225 cm. El resultado de las medidas se puede observar en la siguiente gráfica:

btle-rssi-250cm

Medidas tomadas de 5 en 5, cada 25 cm

La segunda serie se realizó incrementando las variables: 1 metro entre cada punto de medida (desde los 0 m hasta los 6 m), 2 segundos de tiempo de espera y 10 medidas puntuales. El resultado se aprecia en la siguiente gráfica.

btle-rssi-600cm

Medidas tomadas de 10 en 10, cada 100 cm

La interpretación de las gráficas y las deducciones relacionadas quedan al margen de esta entrada.