Con esta guía aprenderemos los pasos a seguir para establecer la conexión entre el ladrillo del Lego Mindstorms NXT y nuestro equipo GNU/Linux.
- Sistema operativo GNU/Linux
- bluetoothctl
- rfcomm
-
Abrir el intérprete de comandos
-
Ejecutar bluetoothctl
Este paso solo hay que realizarlo la primera vez que se conecta con el dispositivo.
Inicia bluetoothctl escribiendo su comando en la consola. No se requieren permisos de administrador.$ bluetoothctl
2.1. Escanear en busca de dispositivos
[bluetooth]# scan on
Esperar hasta que aparezca tu dispositivo. Aparecerá una salida similar a esta:
[NEW] Device 00:16:53:1C:05:5A ZEUS [NEW] Device 00:16:53:1C:86:11 00-16-53-1C-86-11 [NEW] Device 00:0C:78:33:DB:6B DESKTOP-T53GSB7 [NEW] Device 00:0C:78:33:D0:30 DESKTOP-4ASQT6L [NEW] Device 00:0C:78:78:84:56 00-0C-78-78-84-56 [NEW] Device 00:0C:78:33:D0:4D PC-G10
Una vez aparezca tu dispositivo, puedes detener el escaneo con:
[bluetooth]# scan off
2.2. Comprueba si tu robot está registrado en la lista de dispositivos
[bluetooth]# devices
Te aparecerá una lista como esta:
[bluetooth]# devices Device 00:16:53:16:7A:6A Gordo Device 00:16:53:09:5A:A1 C3PO Device 00:0C:78:33:D0:4D PC-G10 Device 00:0C:78:78:84:56 00-0C-78-78-84-56 Device 00:0C:78:33:D0:30 DESKTOP-4ASQT6L Device 00:0C:78:33:DB:6B DESKTOP-T53GSB7 Device 00:16:53:1C:86:11 R2D2 Device 00:16:53:1C:05:5A ZEUS Device 00:16:53:04:4B:04 BB-7
Anota la MAC de tu robot, pues la necesitaremos en pasos posteriores
2.3. Usando la MAC de tu dispositivo, obtenida del comando anterior, inicia la conexión con tu dispositivo
[bluetooth]# connect [MAC de tu dispositivo]
Aparecerá un mensaje similar a este:
Attempting to connect to [MAC de tu dispositivo]
2.4. Una vez establecida la conexión, empareja el PC a tu dispositivo con el siguiente comando:
[bluetooth]# pair [MAC de tu dispositivo]
Aparecerá una salida como esta:
Attempting to pair with 00:16:53:04:4B:04 Request PIN code [agent] Enter PIN code:
Introduce el PIN de tu dispositivo, y pulsa enter.
Nos aparecerán varios mensajes confirmando el emparejamiento e intentando la conexión (fallida) al dispositivo[CHG] Device 00:16:53:04:4B:04 Paired: yes Pairing successful [CHG] Device 00:16:53:04:4B:04 Connected: yes [CHG] Device 00:16:53:04:4B:04 Connected: no
Hecho esto, ya tendremos emparejado nuestro dispositivo.
2.5. Comprueba la MAC de tu adaptador bluetooth
[bluetooth]# list Controller 00:1A:2B:3C:4D:5E debian #2 [default] Controller 40:23:45:10:C1:97 debian
Esta lista muestra todos los adaptadores registrados por el equipo. El adaptador que se encuentra activo estará marcado como "default". Anota su MAC para usarla en pasos posteriores.
-
Establecer la conexión usando rfcomm
Debes indicar la MAC de tu equipo origen (obtenida en el paso 7), la MAC de tu robot destino (obtenida en el paso 4), y el canal a usar (en nuestro caso, el canal 1).
sudo rfcomm connect [MAC adaptador bluetooth] [MAC robot] 1
Nos aparecerá este mensaje, confirmando el establecimiento de la conexión
Connected /dev/rfcomm0 to 00:16:53:04:4B:04 on channel 1 Press CTRL-C for hangup
Hecho esto, ya tendremos nuestra robot conectado con el PC. Manten la consola abierta para mantener la conexión.
-
Conectar robot a MATLAB
Abrir el fichero
bluetooth.ini.nxt
, y modifica el campoSerialPort
con el puerto indicado por rfcomm en el paso anterior.Debe quedar algo parecido a esto:
[Bluetooth] SerialPort=/dev/rfcomm0 BaudRate=57600 DataBits=8 SendSendPause=10 SendReceivePause=30 TimeOut=2
Ejecutar script
inicio_ladrillo.m
para comprobar que se establece la conexión. En caso de que la conexión se haya establecido correctamente, veremos una salida como esta:NXTMotor object properties: Port(s): 0 (A) Power: 0 SpeedRegulation: 1 (on) SmoothStart: 0 (off) TachoLimit: 0 (no limit) ActionAtTachoLimit: 'Brake' (brake, turn off when stopped) NXTMotor object properties: Port(s): 1 (B) Power: 0 SpeedRegulation: 1 (on) SmoothStart: 0 (off) TachoLimit: 0 (no limit) ActionAtTachoLimit: 'Brake' (brake, turn off when stopped) NXTMotor object properties: Port(s): 2 (C) Power: 0 SpeedRegulation: 1 (on) SmoothStart: 0 (off) TachoLimit: 0 (no limit) ActionAtTachoLimit: 'Brake' (brake, turn off when stopped
¡¡Y ya tendremos conectado nuestro robot!!
-
Cerrar la conexión
Cuando queramos cerrar la conexión, simplemente volvemos a la consola donde tenemos abierto rfcomm, y pulsamos Ctrl+C. Si todo ha ido bien, aparecerá este mensaje, indicando que se ha cerrado la conexión:
^CDisconnected
La lista de dispositivos y emparejamientos va asociada al adaptador bluetooth con el que se ha configurado. Si conectas un nuevo adaptador bluetooth, tendrás que repetir el paso 2 utilizando el nuevo adaptador.
Puedes elegir el adaptador por defecto desde bluetoothctl, con el comando select
seguido de la MAC de tu adaptador (puedes obtenerla con el comando list
).
-
Se ha perdido la conexión con el robot
Si se ha perdido la conexión con el robot, rfcomm habitualmente cerrará la conexión con el mensaje
disconnected
.
Pero a veces, al perder la conexión, rfcomm mantiene la sesión abierta. Para solucionar esto, hay que cerrar Matlab, y luego cerrar la conexión en rfcomm usando Ctrl+C.En caso de que siga bloqueada, se puede reiniciar el servicio bluetooth con el comando:
sudo service bluetooth restart
-
rfcomm muestra el mensaje "host is down" al intentar conectar.
Es posible que, al intentar conectar, rfcomm nos muestre este mensaje de error:
Can't connect RFCOMM socket: Host is down
Este mensaje nos indica que la conexión bluetooth no funciona en el robot. Reinicia el robot para resolverlo.