RasPi: Bluetooth en nuestra Pi

Muy buenas a tod@s,

En esta entrada de hoy voy a intentar aproximaros un poco al mundo de la comunicación inalámbrica, con la Raspberry Pi. En concreto, vamos a instalar un controlador de Bluetooth.

Últimamente estoy bastante metido en el campo de Arduino y la domótica o control de sensores, y tenía pensado hacer un radioenlace con un RF433Mhz, pero… qué queréis que os diga, es lento y necesitas estar muy cerca. Por contra, es muy barato… Así que esta semana decidí que iba a probar algún adaptador de BT para arduino. Y lo he encontrado, se trata de la familia HC-0X (en en otro post os pasaré a comentar, sin falta). En concreto he adquirido un par de HC-05 y otro Arduino Nano (aunque clónico), adicional (con este ya son 3 en la familia, es como un vicio!!!).

En este post os presento la manera de conectar un dongle o usb adaptador de BT a nuestra Pi. Ya os avanzo que, mientras estoy escribiendo este artículo, me doy cuenta que es todo un reto, dado que este adaptador ya tiene bastantes años, y últimamente la gente que trata Pi está muy meticulosa con las compatibilidades. Vamos a demostrar que eso no es necesario…

Bien, vamos al lío.

Adaptador utilizado

Sitemcom CN-502

Sitecom CN-502

Para este mini tutorial, como os comentaba, he utilizado un antiguo SITECOM CN-502. Es algo antiguo, pero funciona perfectamente. Cumple con las normas actuales, aunque no sea de los más rápidos. Con ello, conseguiremos el reto, que es demostraros como instalar “casi” cualquier adaptador de bluetooth en nuestra Pi.

Configuración

A continuación, tan sencillo como conectar el adaptador en el único puerto USB que me queda libre, lo que hacemos es encender la Pi (yo uso Raspbian) y esperar a que esté lista para entrar por ssh.

Miremos si nos lo ha detectado:

pi@raspberrypi ~ $ lsusb
Bus 001 Device 002: ID 0424:9512 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 004: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter
Bus 001 Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

En efecto, ahí lo tenéis, en la línea 6: Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

Vamos a instalar los drivers necesarios. Como siempre, lo primero que tenemos que hacer es mantener nuestra Pi al día.

Actualicemos el sistema…

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get upgrade
pi@raspberrypi ~ $ sudo apt-get autoclean

Y ahora, ya podemos descargar un paquete de drivers general para Bluetooth (sed pacientes, hay mucho que descargar…):

pi@raspberrypi ~ $ sudo apt-get install bluez bluetooth bluez-utils blueman

Si todo ha ido correcto, ya tenemos los drivers instalados y listos para trabajar con ellos. En un principio no es necesario reiniciar la Pi, ya que es algo como plug&play, se inicia solo el servicio.

Emparejando dispositivos

Bien, después de la descarga, ya tendremos los drivers instalados. Ahora es el momento de buscar y emparejar dispositivos. Para ello, hacemos uso de la llamada a bluetooth, y buscaré mi Nexus 4…

Comprobemos si está arrancado el daemon de bluetooth:

pi@raspberrypi ~ $ /etc/init.d/bluetooth status
[ ok ] bluetooth is running.

Perfecto, está en funcionamiento. Este comando también nos permite administrar el daemon de bluetooth, dando posibilidades para arrancarlo (start), pararlo (stop), reiniciarlo (restart) y forzar un redescubrimiento de dispositivos cercanos (force-reload).

Ahora escaneamos en busca de dispositivos activos:

pi@raspberrypi ~ $ hcitool scan
Scanning ...
        XX:XX:XX:XX:XX:XX       Nexus 4 Jormc
        00:13:6C:9E:32:8F       n/a
        88:44:F6:5C:5C:44       Nokia 208
        B0:5C:E5:FD:99:47       Nokia 2720a-2
        B4:74:9F:8F:CE:D0       MRAA-PC

Y ahí está, el listado de dispositivos, con su respectiva mac y el nombre del dispositivo. El mío es el Nexus 4 Jormc. El resto es de otros usuarios.

En este punto, algo muy interesante que podemos probar es a hacer un ping al dispositivo que nos interesa, vía mac (cosa extraña…). Y digo interesante, ya que si pensamos un poco mas allá, y en algún momento desarrolláis en c, shell o python, os puede resultar muy útil para saber si un dispositivo específico está vivo… Cuando tratemos, más adelante, cómo construir nuestra propia domótica con Arduino y Raspberry Pi, retomaremos este punto…

pi@raspberrypi ~ $ sudo l2ping -c 1 XX:XX:XX:XX:XX:XX
Ping: XX:XX:XX:XX:XX:XX from PI:PI:PI:PI:PI:PI (data size 44) ...
0 bytes from 98:D6:F7:38:7C:37 id 0 time 13.16ms
1 sent, 1 received, 0% loss

Ahí está, vivito y coleando el Nexus 4 (notad que no pongo mi mac real…). El comando lping2 es el encargado de ofrecernos información del dispositivo solicitado.

Bien, ahora ya podemos emparejarlos, y cerrar el enlace Bluetooth. Es importante comentaros que este desarrollo de instalación quedará reflejado en vuestro gestor de ventanas (al menos así lo hace Raspbian), por lo que esta instalación vía consola también afecta al entorno gráfico. Por lo tanto, si os dirigís a start >> preferences >> bluetooth manager, podréis acceder al nuevo gestor de dispositivos Bluetooth y desde allí, de manera gráfica, hacer lo que a continuación os comento, y empezar a trabajar con los dispositivos de manera normal.

Bien, ejecutad el siguiente comando, y observad qué sucede, tanto en la pantalla como en la pantalla del móvil o dispositivo que estáis emparejando (ojo! las XX son los dígitos de la mac de mi dispositivo, poned las vuestras). Cuando se os solicite, insertad el 0000 como pin por defecto:

pi@raspberrypi ~ $ sudo bluez-simple-agent hci0 XX:XX:XX:XX:XX:XX
RequestPinCode (/org/bluez/2265/hci0/dev_XX_XX_XX_XX_XX_XX)
Enter PIN Code: 0000
Release
New device (/org/bluez/2265/hci0/dev_XX_XX_XX_XX_XX_XX)

Y ya tenemos ambos dispositivos emparejados! No ha sido demasiado difícil, ¿verdad?

Podemos desemparejarlo mediante remove:

pi@raspberrypi ~ $ sudo bluez-test-device remove XX:XX:XX:XX:XX:XX

Ahora, marcamos el dispositivo como trusted (“seguro”). No es obligatorio, esto es para poder emparejarlos automáticamente sin que se nos vuelva a pedir el pin, en caso contrario, cada vez que los emparejemos será solicitado.

pi@raspberrypi ~ $ sudo bluez-test-device trusted 98:D6:F7:38:7C:37 yes

Notad el yes del final. Para revocar la seguridad, bastará indicar no. A partir de este momento ya los tenemos emparejados y con conexión segura (estable), por lo que si ambos tienen el Bluetooth encendido al arranque, se conectarán de manera automática. Para ver el estado del emparejamiento, basta con no escribir yes o no al final. El resultado, 1 indica conectado, 0 no.

Ahora sólo queda conectarnos:

pi@raspberrypi ~ $ sudo bluez-test-input connect 98:D6:F7:38:7C:37

Y si todo ha ido bien, podremos empezar a utilizar nuestros dispositivos emparejados.

Esto os puede servir para cualquier tipo d dispositivo, ya sea de audio, de entrada (teclado/ratón), móvil, etc…

Espero que os haya sido de interés.

Jordi

Share Button

2 comentarios

  1. Buenas Jordi,ante todo desearte unas felices fiestas Navideñas i el comienzo de un Nuevo Año.
    He visto tu Blog ya que he estado buscando sobre la comunicación Bluetooth con la Raspberry Pi.El proyecto que tengo realizando es poder controlar un chasis de robot 4wd(4 ruedas) con la Raspberry pi B +,cree una App personal realizando este mismo proyecto con Arduino Uno con el modulo Bluetooth HC-06 sin ningun problema la comunicación por el puerto serial (RX,TX) pude lograr la comunicación y poder actuar con la App en el Robot.Con la RASPI no hallo la solución de comunicación de poder comunicarme con mi móvil instalada la App para poder actuar sobre el chasis 4wd,detallo los puntos que he realizado.

    *He instalado los drivers sobre el Dongle USB Bluetooth

    *Tengo instalado el S.O Raspbian Wheezy actualizado

    *El Dongle Bluetooth me reconoce el móvil,no se comunica o para poder emparegarlos.

    *He instalado varias App de Play Store en el Movil con comunicación Bluetooth y tampoco se emparegan.

    *En el programa de Python estoy utilizando(import serial) ser = ser.Serial(“/dev/rfcomm0”,baudrate=9600, timeout=0.9).

    *El telefono Movil es un Alcatell,sistema Android 4.2
    *He realizo las pruebas de los comandos,

    * Verificación Bluetooth he realizado todo estas pruebas y sin problema.

    -lsusb (para ver datos de mi propio dispositivo BT)
    -hcitool dev ( datos del mismo)
    -hciconfig -a
    -sudo service bluetooth status (para saber el estado del servicio que controla Bluetooth)
    -hcitool scan
    -sudo nano /etc/bluetooth/rfcomm.conf
    -sudo sdptool browse 11:22:33:44:55:66

    Te agradeceria Jordi que me pudieras ayudar en esta situación de la comunicación,Saludos i gracias

    • Saludos John,

      My buenas noches y felices fiestas. Muchas gracias por tu comentario. A priori es difícil ver donde esta el problema, por no estar en el contexto de tu proyecto, y por lo que me dices, todo parece estar en correctas condiciones…

      Te recomiendo que uses la app Blueterm, ya que facilita mucho la comunicación y es muy visual. Ha de tener en cuenta que el emparejado no es interactivo, y deberás hacerlo de manera manual a la hora de crear la conexión en la raspi. Ten en cuenta también de enviar los comandos atm en el orden correcto…

      Si quieres, podemos comentarlo por correo electrónico, y así podría simular yo tu situación. Puedes escribirme a jordi@jormc.es

      Gracias!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.