Il n'y a pas de stockage sur le CH340 et la famille d'UART où vous pourriez mettre un ID unique. C'est également un problème pour le type PL2303. J'ai essayé de trouver des solutions à ce problème. La première et la plus simple est la position de l'appareil sur le bus USB. Il sera unique pour chaque appareil. Si vous utilisez Linux, vous pouvez trouver chaque périphérique sous / dev / serial / by-path. Il y a aussi un / dev / serial / by-id mais il n'y aura qu'une seule entrée pour cet appareil car il montre la dernière connectée. Les puces FTDI auront chacune des entrées uniques ici. Les puces bon marché ne le seront pas, mais elles ont chacune une entrée sous / dev / serial / by-path. Cette position et les noms des périphériques doivent persister lors des redémarrages. Si vous avez apporté de nombreuses modifications à vos périphériques USB, branchez tous les périphériques CH340 sur le même concentrateur, puis branchez-le. Les appareils sont énumérés dans l'ordre où ils sont connectés au concentrateur. Cette astuce à un concentrateur devrait également fonctionner pour MacOS et Windows, ils devraient apparaître dans le même ordre.
Méthodes plus dures - udev. Pour les appareils avec un ID unique tel que FTDI, vous pouvez définir une règle udev qui voit son numéro de série, puis crée un lien symbolique vers cet appareil, c'est simple.
Pour les appareils avec le même ou aucun numéro de série, c'est beaucoup plus complexe. J'ai créé une règle udev qui ressemble à ceci:
SOUS-SYSTÈME == "tty", ATTRS {produit} == "USB2.0-Série", RUN + = "/ usr / local / bin / cheapduino.py% k", ATTRS {idVendor} == "1a86", ATTRS { idProduct} == "7523", ENV {ID_MM_DEVICE_IGNORE} = "1"
lorsque l'appareil correspond au produit et au fournisseur de l'arduino bon marché, il exécute le script 'cheapduino.py' avec l'appareil comme argument, par exemple
cheapduino.py ttyUSB0
Ensuite, le script cheapduino se connecte en série à l'appareil et envoie la chaîne 'ID' et le logiciel sur l'appareil répond DEVID = THX1138 ou autre. Le script crée ensuite un lien symbolique / dev / THX1138 qui pointe vers / dev / ttyUSB0
Cette méthode présente de nombreux inconvénients. Le script doit expirer si le logiciel du cheapduino ne répond pas. De plus, cela n'utilise pas la fonction SYMLINK d'udev, donc il ne nettoiera pas les liens morts lors de la déconnexion, mais il les écrasera lors de la reconnexion. Tous vos bon marché doivent avoir cette fonctionnalité dans leur logiciel, avec différents ID d'appareil définis. Ils doivent tous utiliser le même débit en bauds que le script, sauf si vous voulez écrire un script très complexe qui prend beaucoup de temps. Enfin, cette méthode fonctionne beaucoup mieux à faible débit qu'en débit élevé, qui pour des raisons de synchronisation peut ne pas réussir à chaque fois. (cheapduinos sont bon marché!) 9600 fonctionne bien mieux que 115200 qui fonctionne après plusieurs essais. Mais puisque tous vos Arduinos CH340 doivent avoir la même vitesse avec cette méthode, vous ne pouvez aller aussi lentement que votre appareil le plus rapide.
Cette méthode fonctionne bien, et c'est ce que j'utilise parce que j'ai acheté beaucoup trop de ces choses bon marché.
En fin de compte, achetez de véritables Arduinos ou au moins des Arduinos avec des puces FTDI ou autre chose qui envoie un ID d'appareil unique.
= Riche