Ya van varias veces que me encuentro con este problema: al ejecutar el software para programar Arduino, puedo elegir el tipo de placa pero no el puerto serial. O al descargar un programa, me dice “Permission denied on /dev/ttyACM0”
Gracias a mis alumnas <3 aprendí que casi siempre se trataba de un problema de permisos (otras veces hace falta un driver).
Si el problema es de permisos, en Windows hay que ejecutar el software como administrador.
En Linux hay que darle permisos a los puertos.
Primero una aclaración que puede extenderse leyendo este post sobre permisos: el comando ls realiza un listado, y si lo utilizamos con el parámetro -l nos muestra también los permisos.
En este post se puede leer la forma de solucionarlo en Linux:
1) Listar los nombres de puertos que tienen algo conectado, con el parámetro “-l” que muestra los permisos:
ls -l /dev | grep ACM
Si no aparece ningún resultado significa que no hay dispositivos conectados. Si hay algo, aparece algo así:
crw-rw—- 1 root dialout 166, 0 ene 19 23:40 ttyACM0
Como las letras de read y write aparecen sólo al principio, podemos ver que sólo el usuario root (el máximo administrador del sistema) puede acceder al puerto.
Vamos a agregarle permisos a ese puerto, de tal manera que cualquier usuario pueda utilizarlo:
sudo chmod 777 /dev/ttyACM0
Finalmente, este será el resultado al listar nuevamente los puertos con sus permisos:
crwxrwxrwx 1 root dialout 166, 1 ene 19 23:46 ttyACM0