# Si no tienes Vitalinux migasfree pero tienes Linux

<p class="callout warning">**Puedes saltarte éste paso preliminar si usas Vitalinux, migasfree lo hará por ti...**</p>

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

```

<div class="theme-default-content content__default" id="bkmrk-copied%21"><div class="language-bash extra-class"><div class="code-copy" data-v-49140617=""><svg class="hover" data-v-49140617="" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" data-v-49140617="" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z" data-v-49140617="" fill="#27b1ff"></path></svg> <span class="" data-v-49140617=""> Copied! </span></div></div></div>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](https://docs.vitalinux.educa.aragon.es/imgs/img00015robotica.png)

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](https://docs.vitalinux.educa.aragon.es/imgs/img00016robotica.png)

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

```

<div class="theme-default-content content__default" id="bkmrk-copied%21-1"><div class="language-bash extra-class"><div class="code-copy" data-v-49140617=""><svg class="hover" data-v-49140617="" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" data-v-49140617="" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z" data-v-49140617="" fill="#27b1ff"></path></svg> <span class="" data-v-49140617=""> Copied! </span></div></div></div>Y en ese fichero ponemos la línea

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

```

<div class="theme-default-content content__default" id="bkmrk-copied%21-2"><div class="language-txt extra-class"><div class="code-copy" data-v-49140617=""><svg class="hover" data-v-49140617="" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" data-v-49140617="" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z" data-v-49140617="" fill="#27b1ff"></path></svg> <span class="" data-v-49140617=""> Copied! </span></div></div></div>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"


```

<div class="theme-default-content content__default" id="bkmrk-copied%21-3"><div class="language-txt extra-class"><div class="code-copy" data-v-49140617=""><svg class="hover" data-v-49140617="" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" data-v-49140617="" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z" data-v-49140617="" fill="#27b1ff"></path></svg> <span class="" data-v-49140617=""> Copied! </span></div></div></div>=================================================

Por último quedaría reiniciar el servicio udev

```
sudo service udev restart

```

<div class="theme-default-content content__default" id="bkmrk-copied%21-4"><div class="language-bash extra-class"><div class="code-copy" data-v-49140617=""><svg class="hover" data-v-49140617="" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" data-v-49140617="" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z" data-v-49140617="" fill="#27b1ff"></path></svg> <span class="" data-v-49140617=""> Copied! </span></div></div></div>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](https://docs.vitalinux.educa.aragon.es/imgs/img00017robotica.png)