如何获得每个Arduino的唯一ID
问题描述:
我使用两个Arduino Nano,并且想要更改它们的名称,如/dev
中所列,因为目前它们始终是ttyUSB<NUMBER>
。如何获得每个Arduino的唯一ID
我怎样才能得到一个唯一的序列号来创建一个udev规则?
我试图通过udevadm
得到它,但它为两个Arduinos返回相同的序列号。
/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
命令显示您的PC上的USB
控制器的“串行”,表示您的Arduino板已插入,而不是Arduino板上的USB芯片串行。
取而代之的是udevadm info -n /dev/ttyUSB0 -q all
。序列号的行看起来像E: ID_SERIAL_SHORT=12345678
。如果该行不存在或确实包含了所有的板相同数目 - 使用此udev
规则基础上的USB端口号分配唯一的别名:
ACTION=="add", KERNEL=="ttyUSB*", SYMLINK+="arduino/tty-%s{../busnum}-%s{../devpath}"
我落得这样做正是这一点,我用我的电脑的端口号以确定Arduinos。这种做法的缺点是,你必须注意将Arduinos连接到PC的顺序。 – Jonas
@Jonas,我建议创建一个'udev'规则,它将映射(创建别名)连接到PC特定端口的设备到特定的设备名称。在这种情况下,连接顺序无关紧要。 –