Vamos a abordar en esta entrada una forma más de comunicarse con nuestra Raspberry. Veremos la forma en que podemos efectuar una comunicación vía Bluetooth. En esta primera parte comentaremos algo de teoría (sin pasarnos), la forma de conectar el dongle Bluetooth y verificar que es detectado – y manejado – por nuestra Raspberry, para finalizar con el emparejamiento vía BT de nuestra Raspi – a modo de ejemplo – con un dispositivo con s.o. Android.
¿Qué es Bluetooth?
En (muy) pocas palabras, Blueetooth se puede definir como una normativa creada para facilitar la conectividad entre dispositivos, bien sean estos móviles o fijos, implementando sobre la comunicación vía radio que se establece entre ellos un protocolo que, dependiendo de las posibilidades de los dispositivos conectados entre si puede ser, por ejemplo:
– Comunicación serie.
– Transmisión de archivos entre dispositivos.
– Crear un punto de red.
– Control de periféricos audio/multimedia.
– Conexion remota de telefonía.
– Gestión de FAX.
– Dispositivos manos libres.
– Dispositivos HID inalámbricos.
– Automatismos varios.
La normativa más actual – a fecha de hoy – permite una conectividad a una distacia de – como máximo – 100 metros. Opera sobre una señal de radio a 2,4 Ghz. y su velocidad máxima (teórica) es de 1 Mbps.
La forma en que se implementan estas comunicaciones es mediante perfiles software (CTP,DUN,HID,SPP,FTP,etc) definidos sobre cierto protocolos -digamos- básicos. Estos protocolos pueden ser específicos de BT u otros ya existentes y «montados» sobre la transmisión BT. Algunos de los protocolos básicos Bluetooth son:
LMP (Link Manager Protocol)
HCI (Host Controller Interface)
L2CAP (Logical Link Control and Adaptation Protocol)
RFCOMM (Radio Frequency Communication)
SDP (Service Discovery Protocol)
OBEX (OBject EXchange)
TCP/IP (Transmission Control Protocol /Internet Protocol)
Digamos que la forma en que opera un dispositivo Bluetooth se puede resumir en esta pila:
Es importante destacar el papel jugado por el HCI (Host Controller Interface) que, como veremos más adelante, nos proporciona una serie de comandos con los que podremos controlar otras capas y permite asimismo el intercambio de información entre ellas.
Una de las funciones más útiles que realiza el HCI es la localización de otros dispositivos BT cercanos. Luego veremos como lo utilizamos …
Conectando un Bluetooth-USB a la Raspberry
Lo primero que debemos conseguir es un «dongle» o dispositivo USB con conectividad Bluetooth. De esta forma, la «pasarela» de comunicación BT con el exterior se hará utilizando uno de los puertos USB de nuestra Raspi.
Nota: Hacemos notar esto ya que, al margen del USB-BT, podríamos usar tambien un dispositivo adaptador Serial/BT y efectuar la comunicación a partir del puerto GPIO pero eso .. es otra historia.
Antes de comprar un dispositivo en es conveniente verificar que sea compatible con nuestra Raspi, por lo que lo más aconsejable es consultar siempre la lista de compatibilidad que tenemos en internet. En nuestro caso hemos elegido uno de los adaptadores BT que teníamos a mano (Conceptronic CBTU2), y que ni tan siquiera es un modelo de última generación, pero los resultados has sido más que satisfactorios.
Nota: en las pruebas efectuadas en esta entrada utilizamos la última versión raspbian wheezy a día de hoy.
Cuando tengamos nuestro USB-BT elegido deberemos – como siempre – efectuar la instalación de ciertos paquetes y la, siempre recomendada, puesta al día de nuestro Linux. Para ello efectuaremos
sudo apt-get update
y luego,
sudo apt-get upgrade
ahora debemos instalar
sudo apt-get install – – no-install-recommends bluetooth
sudo apt-get install bluez-utils blueman
Nota: no-install evita la instalación de innecesarios drivers de impresoras que no precisamos
y despues (por si utilizamos el protocolo OBEX más adelante)
sudo apt-get install obexftp
para finalizar las instalaciones es recomendable efectuar un reinicio de la Raspberry
sudo reboot
Una vez reiniciada nuestra Raspberry Pi podremos verificar que el dispositivo USB-Bluetooth es detectado correctamente ejecutando, por ejemplo:
lsusb
y vemos – en nuestro ejemplo – que el dispositivo 005 es nuestro USB-Bluetooth.
Y si queremos saber algo más de nuestro dispositivo (incluída su dirección «tipo MAC») ejecutaremos
hcitool dev
Nota : el «MAC» mostrado corresponde a nuestro USB-Bluetooth, en vuestro caso debería ser diferente.
Raspberry y Android «conectados» vía BT
Ahora vamos a dar un paso más y a «emparejar» nuestra Raspberry (vía Bluetooth, por supuesto) con un dispositivo equipado con sistema operativo Android.
Para ello hemos de seguir «estrictamente» ciertos pasos, a saber
(1) En nuestro teléfono o tableta Android activaremos el Bluetooth.
(2) Debemos hacer «visible» nuestro aparato Android el tiempo suficiente para que la Raspberry lo descubra. Esto suele hacerse en el menú de ajustes y en las propiedades Bluetooth.
(3) Ahora, en la Raspberry efectuaremos el comando de «búsqueda»
hcitool scan
que nos devolverá
Scanning …
11:22:33:44:55:66 Nexus 7
Nota : si el comando fallase, podemos reiniciar el servicio Bluetooth mediante
Nota : el «MAC» localizado en nuestro ejemplo (11:22:33:44:55:66) es un ejemplo. Para posteriores comandos con nuestro dispositivo deberemos utilizar el devuelto por el mismo y mostrado en nuestra Raspberry.
(4) Una vez activo nuestro USB-Bluetooth en la Raspi (y visible el dispositivo a emparejar) ejecutaremos
(OjO : usando el MAC de nuestro dispositivo)
sudo bluez-simple-agent hci0 11:22:33:44:55:66
el sistema nos pide un número de PIN (típicamente 0000 o 1234)
Nota : hay veces que el comando anterior falla, sobre todo ejecutándolo una segunda vez sobre el mismo dispositivo. En este caso ejecutaremos de nuevo el comando pero añadiendo «repair«, esto es
sudo bluez-simple-agent hci0 11:22:33:44:55:66 repair
y finalmente se nos pedirá en el dispositivo Android teclear el PIN de vinculación (o emparejamiento). Se lo introducimos.
Ahora ya podemos verificar en el teléfono o tableta (típicamente en AJUSTES / Bluetooth) que este y nuestra Raspi están viculados.
Para efectuar una prueba añadida podemos hacer un par de «pings» a nuestro Android desde la Raspi ejecutando
(OjO : usando el MAC de nuestro dispositivo)
sudo l2ping -c 2 11:22:33:44:55:66
Continuará …
Anexo
Agradeciendo el comentario de nuestro amigo Ulysses, y para los que quieran «jugar» con su teclado Bluetooth, comentamos algunos comandos añadidos que pueden resultar de interés.
Tras vincular el teclado a nuestra Raspi por el método comentado (podemos tratar 0000 o 1234 como PIN) ejecutamos un comando para declarar el periférico (teclado en nuestro ejemplo) como confiable (trusted)
bluez-test-device trusted 11:22:33:44:55:66 yes
Ahora – una vez registrado como confiable – podemos indicar que se conecte automáticamente el dispositivo al pulsar una tecla con
sudo bluez-test-input connect 11:22:33:44:55:66
si reiniciamos nuestra Raspi y pulsamos sobre nuestro teclado este debería activarse automáticamente ….