Raspberry Pi y Bluetooth [1] 12

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

12 thoughts on “Raspberry Pi y Bluetooth [1]

  1. Reply ulysess Sep 11, 2013 11:29 am

    Es la primera vez que me funciona el teclado bluetooth del iMac con las Raspberry, y mira que había seguido tutoriales. ¡Eres un fenómeno!.

    Si no te importa te hago un feedback en mi blog 🙂

  2. Reply Raul Luna Feb 3, 2014 11:45 pm

    Excelente tutorial. Yo no he instalado blueman ya que mi sistema no tiene interfaz grafica, y el blueman parece que es una aplicación grafica: intentaba instalar de todo.

    En su lugar, sí que tuve que instalar esto:

    apt-get install python-gobject

    Porque no funcionaba el comando bluez-simple-agent, daba error de que no encontraba la librería “gobject”.

  3. Reply Óscar Martínez Jul 8, 2014 7:29 pm

    Hola .

    Muchas gracias por el tutorial y enhorabuena por hacerlo tan bién . Menos mal que hay gente que los hace , sino ,sería imposible aprender.

    Por cierto , me preguntaba si alguien me podría decir alguna aplicación para controlar la raspberry mediante bluetooth.

    Un saludo y gracias.

  4. Reply david Ene 22, 2015 8:16 pm

    ulysess puedes decir con que adaptador bluetooth lo has conseguido? Marca-modeo

  5. Reply alex Oct 14, 2015 11:39 pm

    al ejecutar esta orden me dice que el comando no existe

    sudo bluez-simple-agent hci0 11:22:33:44:55:66

    alguna solucion?

    muchas gracias

  6. Reply Marcelo Oct 19, 2015 11:22 pm

    Estimados.,

    junto con saludarles., les comento que he tratado de instalar varios teclados, pero al momento de solicitar el codigo PIN …no hace nada … he intentado con varios codigos .. obviamente inventados por mi .. alguien tiene alguna idea de como solucionar esto ??? …

    saludos.

    • Reply Txus Oct 25, 2015 8:34 am

      Hola Marcelo,

      Algunos dispositivos que no utilizan los PIN “estándar”, es decir 0000 o 1234, pueden dar estos problemas ya que esperan mostrar un código PIN específico en la pantalla del host donde se conecten.

      Un saludo

      Txus

  7. Reply Jose Nov 15, 2015 12:48 pm

    Hola, gracias por la pagina en Español, es de gran ayuda.
    Me he topado con un “error” y no se por doinde seguir, pe hago un copy-paste de mi pantalla:
    pi@raspberrypi-de-Jose ~/Desktop $ lsusb
    Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
    Bus 001 Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
    Bus 001 Device 006: ID 0e8f:00a5 GreenAsia Inc.
    pi@raspberrypi-de-Jose ~/Desktop $ hcitool dev
    Devices:
    hci0 00:15:83:15:A3:10
    pi@raspberrypi-de-Jose ~/Desktop $ hcitool scan
    Scanning …
    00:0C:12:07:F7:32 Tablet PC 4000
    pi@raspberrypi-de-Jose ~/Desktop $ sudo bluez-simple-agent hci0 00:0C:12:07:F7:32
    Creating device failed: org.bluez.Error.ConnectionAttemptFailed: Page Timeout
    pi@raspberrypi-de-Jose ~/Desktop $ sudo bluez-simple-agent hci0 00:0C:12:07:F7:32 repair
    Traceback (most recent call last):
    File “/usr/bin/bluez-simple-agent”, line 116, in
    device = adapter.FindDevice(args[1])
    File “/usr/lib/python2.7/dist-packages/dbus/proxies.py”, line 70, in __call__
    return self._proxy_method(*args, **keywords)
    File “/usr/lib/python2.7/dist-packages/dbus/proxies.py”, line 145, in __call__
    **keywords)
    File “/usr/lib/python2.7/dist-packages/dbus/connection.py”, line 651, in call_blocking
    message, timeout)
    dbus.exceptions.DBusException: org.bluez.Error.DoesNotExist: Does Not Exist
    pi@raspberrypi-de-Jose ~/Desktop $

    No se de que me habla, ¿Podrias ayudarme?
    Gracias
    P.D. He seguido los pasos indicados en la pagina.

  8. Reply Marina Dic 5, 2015 5:00 pm

    Hola a todos,

    Sigo el tutorial y todo funciona pero lo que me pasa es que al usar app inventor y unir la raspberry con el android, me indica que la rasp no esta connectada. Algun consejo?

    Un saludo,

    Marina

  9. Reply Carlos Feb 15, 2016 9:38 pm

    Hola a todos,

    Alguien sabe que pasa aqui, yo ejecuto la orden y sale el comando no existe:

    sudo bluez-simple-agent hci0 11:22:33:44:55:66

    De antemano muchas gracias

  10. Reply Igual Abr 10, 2016 10:12 am

    Igual que Alex no me funciona el comandosudo bluez-simple-agent hci0 11:22:33:44:55:66
    Alguna solución?

Leave a Reply

  

  

  

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