如何为每个Arduino获取唯一的ID

如何为每个Arduino获取唯一的ID,arduino,tty,udev,Arduino,Tty,Udev,我使用了两个Arduino Nano,并希望更改它们的名称,如/dev中所列,因为当前它们总是ttyUSB 如何获取唯一序列号以创建udev规则 我试图通过udevadm获取它,但它为两个Arduinos返回相同的序列ID /var/log: udevadm info -a -n /dev/ttyUSB0 | grep '{serial}' ATTRS{serial}=="0000:00:14.0" Arduino Nano基于ATmega328,它没有内置USB控制器。板上的USB接

我使用了两个Arduino Nano,并希望更改它们的名称,如
/dev
中所列,因为当前它们总是
ttyUSB

如何获取唯一序列号以创建udev规则

我试图通过udevadm获取它,但它为两个Arduinos返回相同的序列ID

/var/log: udevadm info -a -n /dev/ttyUSB0 | grep '{serial}'
    ATTRS{serial}=="0000:00:14.0"

Arduino Nano基于ATmega328,它没有内置USB控制器。板上的USB接口连接到外部USB到TTL转换器IC。因此,您在PC端看到的所有USB设备参数都不属于Arduino本身,而是属于USB芯片

这些芯片中的许多可以用唯一的序列号单独编程。或者,您可以使用您插入Arduino板的PC端口号作为唯一标识符

您尝试使用的
udevadm
命令显示Arduino板插入的PC中的
USB
控制器的“串行”,而不是Arduino板上的USB芯片的串行

而是执行udevadm info-n/dev/ttyUSB0-q all。带有序列号的行看起来像
E:ID\u serial\u SHORT=12345678
。如果该行缺失或确实包含所有板的相同编号-使用此
udev
规则根据USB端口号分配唯一别名:

ACTION=="add", KERNEL=="ttyUSB*", SYMLINK+="arduino/tty-%s{../busnum}-%s{../devpath}"

我最终就是这么做的,我用我的PC端口号来识别Arduinos。这种方法的缺点是,您必须注意将Arduinos连接到PC的顺序。@Jonas,我建议创建一个
udev
规则,将连接到PC特定端口的设备映射(创建别名)到特定的设备名称。在这种情况下,连接顺序无关紧要。