如何修复 Linux ESP32 PlatformIO PermissionError: [Errno 13] Permission denied: '/dev/ttyUSB0'
问题:
尝试在 Linux 上刷写 ESP8266 或 ESP32 板时,你看到类似这样的错误消息
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'解决方案
如错误消息顶部所述,安装 PlatformIO udev 规则:
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然后重启 udev:
restart_udev.sh
sudo systemctl restart udev之后,拔下并重新插入你的 ESP32 板以使更改生效
此外,我建议将你的用户添加到 dialout 组 - 拥有大多数 USB 设备的 Linux 组:
add_user_dialout.sh
sudo usermod -a -G dialout $USER为了使更改生效,从当前会话完全注销并重新登录(或重启)。虽然不是修复此特定错误消息所严格必需的,但它有助于防止未来的 USB 权限问题。
Check out similar posts by category:
Electronics, Embedded, ESP8266/ESP32, PlatformIO
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow