Skip to content

Instantly share code, notes, and snippets.

@AlmuHS
Last active November 27, 2018 18:28
Show Gist options
  • Save AlmuHS/7820ef97ab35d32dfd347b92d03726eb to your computer and use it in GitHub Desktop.
Save AlmuHS/7820ef97ab35d32dfd347b92d03726eb to your computer and use it in GitHub Desktop.
Como conectar el robot Lego Mindstorms NXT mediante bluetooth desde GNU/Linux

Conexión bluetooth del robot Lego Mindstorms NXT desde GNU/Linux

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.

Requisitos:

  • Sistema operativo GNU/Linux
  • bluetoothctl
  • rfcomm

Proceso a seguir

  1. Abrir el intérprete de comandos

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

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

  4. Conectar robot a MATLAB

    Abrir el fichero bluetooth.ini.nxt, y modifica el campo SerialPort 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!!

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

Anotaciones

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

Problemas comunes

  1. 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
    
  2. 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment