Raspberry Pi y Bluetooth [1]

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.

Bluetooth1_00

¿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:

Bluetooth1_01b

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.

Bluetooth1_02

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.

Bluetooth1_03

Y si queremos saber algo más de nuestro dispositivo (incluída su dirección “tipo MAC”) ejecutaremos

hcitool dev

Bluetooth1_04

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

Bluetooth1_05

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 ….

  Bitcoin Currency Converter
Amount of BTC to convert
To currency:
1BTC =