Como activar puerto ttyACM0 en Arduino

¿Has recibido el error "Permission denied on /dev/ttyACM0" al intentar volcar tu programa en Arduino? ¡No entres en pánico! Tan solo se trata de la falta de permisos sobre dispositivos.

Si te ha dado el error, entiendo que ya tienes configurado el modelo de placa y el puerto asignado, pero vamos a darle un repaso por si algo se te ha escapado.

Modelo de placa.

Abre el IDE de Arduino, ve a Tools, Board, Arduino AVR Boards y elije el modelo de tu placa, la mia es Arduino Uno.

Puerto.

Una vez seleccionada tu placa, vamos a ver que puerto va a usar para comunicarse con nuestro PC, así que ve a Tools, Port y selecciona el que te aparezca, en mi caso ttyACM0

Es ahora cuando al intentar volcar el programa a la placa Arduino, recibes el error «/dev/ttyACM0«

avrdude: ser_open(): can't open device "/dev/ttyACM0": Permission denied
Failed uploading: uploading error: exit status 1

Lo que nos dice el error, es que no tenemos permisos para usar el puerto «ttyACM0»

Esto tiene 2 soluciones:

  • Agregar nuestro usuario al grupo dialout
  • Dar permisos de escritura y ejecución al puerto antes mencionado.

Elige la que creas mas conveniente.

Agrega tu usuario al grupo «dialout»

Pertenecer al grupo dialout, nos posibilita a tener acceso a los puertos de salida de nuestro equipo, tales como SERIAL, GPIO etc etc. Los miembros de este grupo pueden programar placas Arduino, salir a través del puerto GPIO de una Raspberry o usar perifericos del año de la Polka como, módems, fax, etc.

En una terminal, con la placa conectada, introduce.

ls -l /dev/ttyACM*

Esto nos muestra que root es el propietario y dialout es el grupo con acceso.

crw-rw---- 1 root dialout 166, 0 dic 9 14:10 /dev/ttyACM0

Introduciendo el comando, groups, en un terminal mostrará los grupos a los que perteneces.

me@samsung:~$ groups
me cdrom floppy sudo audio dip video plugdev users netdev bluetooth lpadmin scanner
me@samsung:~$ 

La salida del comando groups, se ve que no pertenecemos al grupo dialout

Para agregar tu usuario al grupo dialout, escriben en una terminal lo siguiente:

sudo usermod -aG dialout tu_usuario

Reinicia tu equipo y vuelve a mirar a qué grupos perteneces.

me@samsung:~$ groups
me cdrom floppy dialout sudo audio dip video plugdev users netdev bluetooth lpadmin scanner
me@samsung:~$ 

Ahora si deberás pertenecer al grupo dialout y no tendrás problemas para volcar tus programas a la placa Arduino.

Permisos al puerto ttyACM0

Esta opción es más rápida ya que no tienes que reiniciar la máquina, pero a lo mejor, es menos segura al dar permisos a otros usuarios para usar el puerto de Arduino.

Como ya he mencionado, el problema está relacionado con la falta de permisos para leer/escribir en el puerto serie.

Asegúrate que tienes tu Arduino conectado al tu puerto usb

Como vimos mas arriba, ya sabemos cual es puerto por el que se comunica Arduino. Abre una terminal para ver que tipo de permisos tiene el puerto de salida.

Usa el comando ls -l y la ruta del puerto en cuestión.

ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0 dic 18 23:30 /dev/ttyACM0

Como resultado del comando anterior, los permisos de lectura/escritura del puerto, son para el usuario root y el grupo dialout.

Para establecer permisos de lectura/escritura, escribe a continuación:

sudo chmod a+rw /dev/ttyACM0

Ahora el usuario, el grupo y otros tendrán acceso a ttyACM0

Y eso sería todo lo necesario para comunicarnos por el puerto ttyACM0 en nuestra placa Arduino.

Para quitar este permiso a otros, tan solo escribe:

sudo chmod o-rw /dev/ttyACM0

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio