Nivel inicial4 min de lectura · Publicado el

Error al conectar con USB en PlatformIO (/dev/ttyUSB0)

Error al conectar con USB en PlatformIO: la placa está tras la puerta /dev/ttyUSB0 y solo entra quien figura en la lista del grupo dialout. Apúntate al grupo dialoutrubentejera.com /dev/ttyUSB0dialout$USERla placasudo usermod -aG dialout $USER
El puerto /dev/ttyUSB0 es la sala donde está la placa, y solo entra quien figura en la lista del grupo dialout (uucp en Arch). sudo usermod -aG dialout $USER te apunta; vale al volver a iniciar sesión.

El error

Al subir el sketch a la placa, PlatformIO detecta el puerto pero no puede abrirlo:

Terminal con platformio run --target upload: detecta /dev/ttyUSB0, pero falla con error: cannot access /dev/ttyUSB0, espcomm_open failed y Error 2

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

  1. Mira qué grupo es dueño del puerto.
  2. Añade tu usuario a ese grupo.
  3. 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, grupos dialout, plugdev y uucp, usermod -a -G dialout, cerrar sesión, chmod temporal, 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 dialout añade el grupo (comprobado con id); en esa imagen mínima adduser no viene instalado. adduser $USER dialout se ha ejecutado en debian:13 (Debian 13.7, adduser 3.152): no muestra salida y id confirma el grupo dialout. La captura del error es del artículo original. No se ha probado con una placa conectada en esta revisión.