如何通过udev配置区分连接到树莓派4的两台同型号ESP32?
区分两台VID/PID/Serial相同的ESP32的UDev配置方案
方法1:通过物理USB端口路径绑定(硬件端口固定)
这个方案依赖树莓派的物理USB端口,每个端口在sysfs中有唯一标识,即使设备相同,插在不同端口也能区分。
步骤:
- 单独连接第一台ESP32,找到对应的
tty设备(比如/dev/ttyUSB0),运行以下命令查看设备的内核路径:
在输出中找到最顶层的udevadm info --attribute-walk --name=/dev/ttyUSB0KERNELS属性值(比如KERNELS=="1-1.1"),这对应树莓派的一个物理USB端口。 - 拔掉第一台,连接第二台ESP32,重复上述步骤,获取它对应的
KERNELS值(比如KERNELS=="1-1.2")。 - 创建或编辑udev规则文件
/etc/udev/rules.d/99-esp32.rules,写入以下内容(替换成你获取的KERNELS值):SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", KERNELS=="1-1.1", SYMLINK+="esp32-motores" SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", KERNELS=="1-1.2", SYMLINK+="esp32-sensores" - 重载udev规则并触发生效:
sudo udevadm control --reload-rules && sudo udevadm trigger
优缺点:操作简单,但设备不能换端口使用,换端口后符号链接会失效。
方法2:修改ESP32的USB串口序列号(一劳永逸)
ESP32常用的USB转串口芯片(如CP210x)支持修改序列号,修改后设备本身具备唯一标识,不受端口影响。
步骤:
- 下载对应芯片的编程工具(比如CP210x系列可使用Silicon Labs提供的CP210x编程工具)。
- 单独连接一台ESP32,使用工具读取当前序列号,然后将其修改为唯一值(比如
esp32-motores-001)。 - 对另一台ESP32执行相同操作,修改为另一个唯一序列号(比如
esp32-sensores-001)。 - 修改udev规则文件,使用新的序列号进行匹配:
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", ATTRS{serial}=="esp32-motores-001", SYMLINK+="esp32-motores" SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", ATTRS{serial}=="esp32-sensores-001", SYMLINK+="esp32-sensores" - 重载udev规则生效:
sudo udevadm control --reload-rules && sudo udevadm trigger
优缺点:设备可任意换端口,识别稳定,但需要额外工具修改设备序列号。
方法3:基于USB设备的DEVPATH绑定
和方法1类似,使用设备的完整DEVPATH属性来区分,这个路径也是对应物理端口的唯一标识:
- 连接设备后,运行
udevadm info --query=property --name=/dev/ttyUSB0,获取DEVPATH值(比如/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.1/1-1.1:1.0/tty/ttyUSB0)。 - 在udev规则中使用
DEVPATH替代KERNELS:SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", DEVPATH=="/devices/...", SYMLINK+="esp32-motores"
优缺点:和方法1类似,端口固定,路径较长但同样有效。
内容的提问来源于stack exchange,提问作者jairo tuñon diaz
相关产品推荐
相关产品推荐

