Linux ESP32 PlatformIO PermissionError beheben: [Errno 13] Permission denied: '/dev/ttyUSB0'

English Deutsch

Problem:

Beim Versuch, ein ESP8266- oder ESP32-Board unter Linux zu flashen, erscheint eine Fehlermeldung wie

platformio_permission_error.txt
Warning! Please install `99-platformio-udev.rules`.
More details: https://docs.platformio.org/page/faq.html#platformio-udev-rules

Auto-detected: /dev/ttyUSB0
Uploading .pio/build/esp32dev/firmware.bin
esptool.py v3.1
Serial port /dev/ttyUSB0
Traceback (most recent call last):
  File "/home/uli/.platformio/penv/lib/python3.8/site-packages/serial/serialposix.py", line 322, in open
    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
PermissionError: [Errno 13] Permission denied: '/dev/ttyUSB0'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/uli/.platformio/packages/tool-esptoolpy/esptool.py", line 4582, in <module>
    _main()
  File "/home/uli/.platformio/packages/tool-esptoolpy/esptool.py", line 4575, in _main
    main()
  File "/home/uli/.platformio/packages/tool-esptoolpy/esptool.py", line 4074, in main
    esp = esp or get_default_connected_device(ser_list, port=args.port, connect_attempts=args.connect_attempts,
  File "/home/uli/.platformio/packages/tool-esptoolpy/esptool.py", line 120, in get_default_connected_device
    _esp = chip_class(each_port, initial_baud, trace)
  File "/home/uli/.platformio/packages/tool-esptoolpy/esptool.py", line 313, in __init__
    self._port = serial.serial_for_url(port)
  File "/home/uli/.platformio/penv/lib/python3.8/site-packages/serial/__init__.py", line 90, in serial_for_url
    instance.open()
  File "/home/uli/.platformio/penv/lib/python3.8/site-packages/serial/serialposix.py", line 325, in open
    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
serial.serialutil.SerialException: [Errno 13] could not open port /dev/ttyUSB0: [Errno 13] Permission denied: '/dev/ttyUSB0'

Lösung

Wie oben in der Fehlermeldung beschrieben, die PlatformIO udev-Regeln installieren:

install_platformio_udev_rules.sh
curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/master/scripts/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules

dann udev neu starten:

restart_udev.sh
sudo systemctl restart udev

Danach das ESP32-Board abziehen und wieder anschließen, damit die Änderungen wirksam werden.

Zusätzlich wird empfohlen, den Benutzer zur dialout-Gruppe hinzuzufügen – der Linux-Gruppe, der die meisten USB-Geräte gehören:

add_user_dialout.sh
sudo usermod -a -G dialout $USER

Damit die Änderungen wirksam werden, komplett aus der aktuellen Sitzung abmelden und wieder anmelden (oder neu starten). Obwohl dies zur Behebung dieser spezifischen Fehlermeldung nicht zwingend erforderlich ist, hilft es, zukünftige USB-Berechtigungsprobleme zu vermeiden.


Check out similar posts by category: Electronics, Embedded, ESP8266/ESP32, PlatformIO