Ya hemos comentado en la primera parte de este artículo la forma de realizar la configuración básica para que nuestra Raspberry Pi reconozca un dispositivo Bluetooth-USB, así como los comandos adecuados para «emparejar» (vincular) dos dispositivos mediante un radio-enlace Bluetooth.
Nota: cuando se trate de Bluetooth conviene tanto tener actualizado el sistema
sudo apt-get update
sudo apt-get upgrade
como acordarnos de que el dispositivo a buscar esté visible (desde el SETUP del mismo).
Una vez tengamos lista nuestra Raspi podemos dar un salto cuantitativo y – además de vinvularla a un dispositivo BT externo – intentar comunicarnos con el mismo. A modo de ejemplo práctico, vamos a vincular un dispositivo Android y crear un enlace BT-RFCOMM con el mismo.
En este caso, seguir la secuencia aconsejada es muy muy recomendable …
Los pasos que vamos a seguir son:
(0) Verificación del dongle Bluetooth.
(1) Instalación del sofware de terminal en Android (TerminalBT).
(2) Protocolo RFCOMM y fichero de configuración.
(3) Instalación/configuración del software terminal en Raspberry Pi (minicom).
(4) Chequeando y … ¡¡Conectando!!
Así que, como dijo Jack el destripador … vayamos por partes 😉
(0) Verificación del dongle Bluetooth.
Una vez conectado el Bluetooth-USB a nuestra Raspberry, y para asegurarnos de la correcta instalación y «status» del mismo, podemos recurrir a varios comandos, por ejemplo …
lsusb
o bien, para ver datos de mi propio dispositivo BT
hcitool dev
para ver aún más datos del mismo
hciconfig -a
y para saber el estado del servicio que controla Bluetooth
sudo service bluetooth status
(1) Instalación del sofware de terminal en Android (TerminalBT).
Ahora instalamos el programa que, desde nuestro dispositivo Android, nos permitirá abrir una sesión de terminal con nuestra Raspberry Pi. Se trata del programa TerminalBT. Una aplicación gratuita y que nos será de gran utilidad …
Realizamos la instalación típica en nuestro dispositivo (Teléfono o Tablet) Android.
(2) Protocolo RFCOMM y fichero de configuración.
Ahora, y antes de proceder con los siguientes pasos hemos de averiguar cierto dato sobre la conexión a configurar. Tal y comentamos en la primera parte de este artículo uno de los protocolos manejado vía BT es RFCOMM, y aunque este protocolo se puede usar en varios «perfiles» dentro de Bluetooth lo que nos interesa (en nuestro ejemplo) es utilizarlo para implementar una comunicación de terminal bi-direccional.
Para poder ver algo más sobre el protocolo que nos interesa – tras emparejar los dispositivos como ya se comentó – ejecutaremos el comando que nos muestre las opciones (protocolos) que nos ofrece nuestro dongle BT para conectar con el dispositivo Android de nuestra elección…
OjO (todos los comandos han de ejecutarse con el MAC de nuestro dispositivo, el valor 11:22:33:44:55:66 solo se indica a modo de ejemplo)
realizamos el escaneo de dispositivo con
hcitool scan
Scanning …
11:22:33:44:55:66 Nexus 7
emparejamos (vinculamos) con
sudo bluez-simple-agent hci0 11:22:33:44:55:66
RequestPinCode (/org/bluez/1996/hci0/dev_11_22_33_44_55_66)
Enter PIN Code: 1234
Release
New device (/org/bluez/1996/hci0/dev_11_22_33_44_55_66)
ahora vemos los protocolos disponibles en el mismo con
sudo sdptool browse 11:22:33:44:55:66
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Browsing 11:22:33:44:55:66 ... Service Name: Headset Gateway Service RecHandle: 0x10000 Service Class ID List: "Headset Audio Gateway" (0x1112) "Generic Audio" (0x1203) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 2 Profile Descriptor List: "Headset" (0x1108) Version: 0x0102 |
1 2 3 4 5 6 7 8 9 10 11 12 |
Service Name: AV Remote Control Target Service RecHandle: 0x10001 Service Class ID List: "AV Remote Target" (0x110c) Protocol Descriptor List: "L2CAP" (0x0100) PSM: 23 "AVCTP" (0x0017) uint16: 0x102 Profile Descriptor List: "AV Remote" (0x110e) Version: 0x0103 |
1 2 3 4 5 6 7 8 9 10 11 12 |
Service Name: Advanced Audio Service RecHandle: 0x10002 Service Class ID List: "Audio Source" (0x110a) Protocol Descriptor List: "L2CAP" (0x0100) PSM: 25 "AVDTP" (0x0019) uint16: 0x102 Profile Descriptor List: "Advanced Audio" (0x110d) Version: 0x0102 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Service Name: Android Network User Service Description: PANU Service RecHandle: 0x10003 Service Class ID List: "PAN User" (0x1115) Protocol Descriptor List: "L2CAP" (0x0100) PSM: 15 "BNEP" (0x000f) Version: 0x0100 SEQ8: 0 6 Language Base Attr List: code_ISO639: 0x656e encoding: 0x6a base_offset: 0x100 Profile Descriptor List: "PAN User" (0x1115) Version: 0x0100 |
1 2 3 4 5 6 7 8 9 10 11 12 |
Service Name: OBEX Phonebook Access Server Service RecHandle: 0x10005 Service Class ID List: "Phonebook Access - PSE" (0x112f) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 19 "OBEX" (0x0008) Profile Descriptor List: "Phonebook Access" (0x1130) Version: 0x0101 |
1 2 3 4 5 6 7 8 9 10 11 12 |
Service Name: OBEX Object Push Service RecHandle: 0x10006 Service Class ID List: "OBEX Object Push" (0x1105) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 12 "OBEX" (0x0008) Profile Descriptor List: "OBEX Object Push" (0x1105) Version: 0x0100 |
1 2 3 4 5 6 7 8 |
Service Name: LIVIO_CONNECT Service RecHandle: 0x10007 Service Class ID List: UUID 128: fbe4be12-374a-486b-a473-24e39408a24d Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 3 |
y podemos comprobar que – en principio – y aún existiendo el RFCOMM, no existe un protocolo que «explícitamente» no indique el modo de conexionado terminal (?) … esto puede confundirnos en un principio, pero lo que hacemos es – sin desvincularnos, claro está – abrir la aplicación que usaremos como terminal bajo Android (TerminalBT, en nuestro caso) en nuestro dispositivo y, a continuación, volver a indigar con el mismo comando
sudo sdptool browse 11:22:33:44:55:66
y vemos – en nuestro ejemplo, al final del listado obtenido -que ahora SI que tenemos un protocolo RFCOMM operando en un perfil de comunicación terminal (BluetoothTerminal).
1 2 3 4 5 6 7 8 |
Service Name: <span style="color: #ff0000;">BluetoothTerminal</span> Service RecHandle: 0x10008 Service Class ID List: "Serial Port" (0x1101) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) <span style="color: #ff0000;"> Channel: 4</span> |
De esta información, lo más importante es fijarnos en el número de canal que utiliza dicho perfil.
Vemos que, en nuestro ejemplo, es el canal 4
Este dato será preciso para realizar una configuración posterior… tomamos nota.
La configuración – por defecto – precisa para comunicarnos mediante Bluetooth/RFCOMM pasa por el fichero que tenemos en /etc/bluetooth/rfcomm.conf
Lo editamos con
sudo nano /etc/bluetooth/rfcomm.conf
y hacemos que quede algo así (OjO, eliminamos las almohadillas de las líneas activas)
1 2 3 4 5 6 |
rfcomm0 { bind no; device 11:22:33:44:55:66; channel 4; comment "Conexion Terminal"; } |
Ahora es importante destacar que la conexión por defecto del protocolo RFCOMM llama a «rfcomm0» y que el canal utilizado (el averiguado en el paso anterior) es el 4 (channel 4).
(3) Instalación/configuración del software terminal en Raspberry Pi (minicom).
Al margen de otras posibilidades, vamos a utilizar un «clásico» de Linux para realizar la función de terminal. Se trata del programa minicom, el cual – pese a no ser de manejo muy intuitivo – nos permite una configuración rápida y cuyo proceso comentaremos en detalle.
Instalamos en nuestra Raspberry el programa con
sudo apt-get install minicom
Para configurarlo y adaptarlo a nuestras necesidades (operar en /dev/rfcomm) ejecutamos
sudo minicom -s
nota: es importante hacerlo con privilegios de root para que nos permita luego grabar la configuración.
ahora vamos a modificar unos pocos parámetros a nuestro gusto …
en la ventana que aparece seleccionaremos «Configuracion del puerto serial»
y ahora, mediante las teclas A, E, F y G configuramos algo como esto
vamos saliendo de los menues con ESC y, finalmente
damos a «Salvar configuración como» y elegimos – en nuestro ejemplo – el nombre «rfcomm«
salimos finalmente con
«Salir del minicom»
De momento el programa minicom queda instalado y configurado. Vamos con el siguiente paso …
(4) Chequeando y … ¡¡Conectando!!
Bueno, dada la cantidad de pasos dados hasta ahora, vamos a repasar lo ya hecho e indicar los pasos finales para que nuestros terminales «charlen» entre ellos …
Recordamos que
– tenemos «visible» el dispositivo Android a emparejar
– hemos instalado el software minicom en la Raspberry Pi
– hemos creado la configuración «rfcomm« para minicom
– hemos editado el fichero por defecto del protocolo RFCOMM (/etc/bluetooth/rfcomm.conf)
– hemos instalado la aplicación TerminalBT en dispositivo Android
– hemos emparejado dispositivos (Raspi con Android)
y ahora hacemos esto
– lanzo la aplicación TerminalBT en Android
– abro una ventana terminal exclusivamente para lanzar la conexión
– conecto dispositivos vía RFCOMM mediante
sudo rfcomm connect 0
obtendremos algo como esto
1 2 3 |
pi@raspberrypi ~ $ sudo rfcomm connect 0 Connected /dev/rfcomm0 to 11:22:33:44:55:66 on channel 4 Press CTRL-C for hangup |
– ejecuto – en otra ventana terminal – el minicom en Raspi con
minicom rfcomm
veremos algo así
de momento, vamos a nuestro dispositivo Android (que estaba ya abierto) teclearemos
1 |
Prueba de texto + <Enter> |
en el minicom veremos aparecer el texto enviado
Si escribimos algo en el minicom y pulsamos <Enter> se enviará al terminal Android, pero, salvo que lo activemos, no tendremos eco de pantalla. Como quiera que minicom no es muy intuitivo vamos a ver – a modo de ejemplo práctico – como se activa el eco y como se sale del programa …
Si en la ventana de minicom pulsamos simultáneamente las teclas Control y A (abreviadamente Ctrl-A) y las soltamos, el programa espera que pulsemos alguna otra tecla:
por ejemplo, si hacemos
Ctrl-A y luego E activamos el eco de pantalla
si queremos cerrar el minicom, pulsaremos
Ctrl-A y luego Q
Nota:
Podemos hacer que el eco de pantalla sea permanante ejecutando la configuración creada anteriormente. Para ello ejecutamos
sudo minicom rfcomm -s
y seleccionaremos «Pantalla y teclado«
activamos el eco con Q
y salimos guardando de nuevo sobre rfcom
salimos con «Salir del Minicom«
Asi que ahora que Raspi puede charlar con Android … a DIVERTIRSE