Skip to main content

Si no tienes Vitalinux, y usas otra distribución Linux

Puedes saltarte éste paso preliminar si usas Vitalinux, migasfree lo hará por ti...

En Lego, mbot, cyberpi, ESP32, Arduino... la comunicación con el mismo se hace a través de un dispositivo de interfaz humana (también llamado HID). Por ejemplo en el caso de Lego WeDo con un cable usb y en el caso de Cyberpi con un emisor inhalámbrico (también usb).

Podemos ver los usb conectados con:

lsusb

En la siguiente captura podemos observar la salida de los comandos indicados antes y después de insertar el cable del robot LEGO. Podemos ver que su IdVendor es 0694 y que su idProduct es 0003.

lsub

Para poder leer y escribir en dicho dispositivo (mandar órdenes al robot o leer datos del mismo), Linux crea un archivo de tipo carácter en /dev, pero podemos observar que sólo tiene permisos root: Vemos dos dispositivos, uno el teclado/ratón y otro que corresponde a la conexión con el robot

centre|thumb|Vemos dos dispositivos, uno el teclado/ratón y otro que corresponde a la conexión con elrobot

Para ello, simplemente tenemos que indicarle a udev que nos cree dicho dispositivo con los permisos necesarios:

Editar un archivo nuevo:

sudo nano /lib/udev/rules.d/99-hidraw.rules
Copied!

Y en ese fichero ponemos la línea

ATTRS{idVendor}=="0694", ATTRS{idProduct}=="0003", SUBSYSTEMS=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"\

Así sucesivamente con los diferentes robots que queramos conectar.

Nota: Muchos robots de placa electrónica, como el ESP32, Cyberpi, Arduino, etc.. en el listado lsub no aparece el nombre como tal, sino el chip de interface CH340 o UART que traduce el protocolo USB al TTL de la placa. La manera de localizar quien es quien es ejecutar lsub antes y después de conectar el robot

Un fichero que contiene todos, y que iremos actualizando sería este para 99-hidraw.rules :

=============================================

# Solucion generica: para todos los dispositivos de interfaz humana\
# KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="plugdev"\
# Lego Wedo\
ATTRS{idVendor}=="0694", ATTRS{idProduct}=="0003", SUBSYSTEMS=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"\
# mBot\
ATTRS{idVendor}=="0416", ATTRS{idProduct}=="ffff", SUBSYSTEMS=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"\
# Cyberpi mBot2\
ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SUBSYSTEMS=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
# Lego Spike
ATTRS{idVendor}=="0694", ATTRS{idProduct}=="0009", SUBSYSTEMS=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
# mbot pincho 2.4 UART Windbond
ATTRS{idVendor}=="0416", ATTRS{idProduct}=="ffff", SUBSYSTEMS=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
# microbit
ATTRS{idVendor}=="0d28", ATTRS{idProduct}=="0204", SUBSYSTEMS=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"

=================================================

Por último quedaría reiniciar el servicio udev

sudo service udev restart

Si antes de realizar el proceso estaba conectado el robot, tendremos que desconectarlo y volverlo a conectar para que los cambios surtan efecto, quedando algo parecido a ésto:

lsub