Error al conectar con USB en PlatformIO (/dev/ttyUSB0)
El error
Al subir el sketch a la placa, PlatformIO detecta el puerto pero no puede abrirlo:
En Linux, el puerto serie de la placa es un fichero (/dev/ttyUSB0 o /dev/ttyACM0) y, como cualquier fichero, tiene dueño y permisos. Es como una sala con una lista en la puerta: la placa está dentro, pero tu usuario no está en la lista de quien puede entrar.
La solución
- Mira qué grupo es dueño del puerto.
- Añade tu usuario a ese grupo.
- Cierra sesión y vuelve a entrar.
1. Mira el grupo del puerto
Con la placa conectada:
ls -l /dev/ttyUSB0 # o /dev/ttyACM0, según la placa
Si no sabes cómo se llama el puerto, pio device list lo muestra junto con el identificador de la placa (VID:PID).
El grupo aparece en la cuarta columna. Suele ser dialout; en Arch Linux es uucp y en algunas distribuciones, plugdev.
2. Añádete al grupo
sudo usermod -aG dialout $USER
-a añade el grupo sin quitarte los que ya tienes (sin la -a te sacaría de los demás) y $USER es tu nombre de usuario. En Debian y Ubuntu también vale adduser, que es lo que se usó en la versión original de este artículo:
sudo adduser $USER dialout
Las versiones actuales de adduser no muestran nada si todo va bien; las antiguas avisaban con «Añadiendo el usuario … al grupo dialout… Hecho.». En los dos casos, compruébalo con id tras volver a iniciar sesión.
3. Cierra sesión y comprueba
Los grupos se cargan al iniciar sesión, así que hasta que no salgas y vuelvas a entrar (o reinicies) no notarás el cambio. Después:
id # debe aparecer dialout en la lista de grupos
Vuelve a subir el sketch:
pio run --target upload
pio es el nombre corto actual del comando; platformio, el de la captura, sigue funcionando.
Si sigue fallando: reglas udev
PlatformIO recomienda instalar sus reglas udev, que dan permisos a las placas más comunes al conectarlas:
curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/system/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules
sudo udevadm control --reload-rules
sudo udevadm trigger
Después, desconecta y vuelve a conectar la placa. Las reglas solo cubren las placas cuyo VID:PID aparece en el fichero; compáralo con lo que muestra pio device list.
Si estás con un ESP8266 como el de la captura, sigue con ESP8266 con tira LED WS2812B. Y para entender qué significan esos permisos, lee Permisos en Linux.
Fuentes
- Documentación de PlatformIO (v6.2, noviembre de 2026): reglas udev y grupos (
ls -l,pio device list, gruposdialout,plugdevyuucp,usermod -a -G dialout, cerrar sesión,chmodtemporal, instalación de las reglas); versión de PlatformIO Core comprobada en PyPI y pio run. - GitHub, Sunsetting Atom (2022).
- Ejecutado en un contenedor
ubuntu:24.04:usermod -aG dialoutañade el grupo (comprobado conid); en esa imagen mínimaadduserno viene instalado.adduser $USER dialoutse ha ejecutado endebian:13(Debian 13.7, adduser 3.152): no muestra salida yidconfirma el grupodialout. La captura del error es del artículo original. No se ha probado con una placa conectada en esta revisión.