Règle UDEV
Sous linux, lors de la connexion de l'Arduino, un périphérique de la forme /dev/ttyACMXX
est créé où XX est un incrément.
Ce périphérique représente le canal de communication avec l'Arduino. Le nom de celui-ci n'est pas prédictible car à chaque connexion, l'incrément augmente et il est donc difficile d'avoir un fichier de configuration stable.
udev
est en charge de nommer les périphériques au boot ou au branchement à chaud. En lui spécifiant une règle de nommage, le nom sera fixe et vaudra : /dev/ttyArduino
.
Pour se faire, créer un fichier /etc/udev/rules.d/10-tty-acm.rules
:
- /etc/udev/rules.d/10-tty-acm.rules
# arduino SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0001", SYMLINK+="ttyArduino"
Pour déterminer le nom du périphérique actuel, il faut scruter les logs du noyau au branche de l'Arduino :
sudo dmesg| grep ttyACM [ 7.037499] cdc_acm 1-2.1:1.0: ttyACM0: USB ACM device
Ici, le périphérique est /dev/ttyACM0
.
Les valeurs idVendor
et idProduct
sont récupérées via la commande udevadm info
sur le device /dev/ttyACM0
.
sudo udevadm info -a -n /dev/ttyACM0 [...] looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1': KERNELS=="1-2.1" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{authorized}=="1" ATTRS{avoid_reset_quirk}=="0" ATTRS{bConfigurationValue}=="1" ATTRS{bDeviceClass}=="02" ATTRS{bDeviceProtocol}=="00" ATTRS{bDeviceSubClass}=="00" ATTRS{bMaxPacketSize0}=="8" ATTRS{bMaxPower}=="100mA" ATTRS{bNumConfigurations}=="1" ATTRS{bNumInterfaces}==" 2" ATTRS{bcdDevice}=="0001" ATTRS{bmAttributes}=="c0" ATTRS{busnum}=="1" ATTRS{configuration}=="" ATTRS{devnum}=="5" ATTRS{devpath}=="2.1" ATTRS{idProduct}=="0001" ATTRS{idVendor}=="2341" ATTRS{ltm_capable}=="no" ATTRS{manufacturer}=="Arduino (www.arduino.cc)" ATTRS{maxchild}=="0" ATTRS{product}=="Arduino Uno" ATTRS{quirks}=="0x0" ATTRS{removable}=="unknown" ATTRS{serial}=="64935343633351317262" ATTRS{speed}=="12" ATTRS{urbnum}=="179883" ATTRS{version}==" 1.10" [...]
Si nécessaire, il est possible d'ajouter des attributs supplémentaires comme serial
à la règle pour qu'elle soit plus précise, dans le cas de 2 Arduino par exemple.
Recharger les règles udev :
udevadm control --reload-rules
et rebrancher l'Arduino, désormais un lien symbolique /dev/ttyArduino
est lié au périphérique /dev/ttyACMXX
:
ls -l /dev/ttyArduino lrwxrwxrwx 1 root root 7 Aug 8 18:37 /dev/ttyArduino -> ttyACM1