Auf dem CH340 und der UART-Familie gibt es keinen Speicher, in dem Sie eine eindeutige ID eingeben können. Dies ist auch ein Problem für den Typ PL2303. Ich habe versucht, Lösungen für dieses Problem zu finden. Zunächst und am einfachsten ist die Position des Geräts am USB-Bus. Es ist für jedes Gerät eindeutig. Wenn Sie Linux verwenden, finden Sie jedes Gerät unter / dev / serial / by-path. Es gibt auch eine / dev / serial / by-ID, aber es gibt dort nur einen Eintrag für dieses Gerät, da der letzte angeschlossene angezeigt wird. FTDI-Chips haben hier jeweils eindeutige Einträge. Billige Chips werden es nicht, aber sie haben jeweils einen Eintrag unter / dev / serial / by-path. Diese Position und die Gerätenamen sollten bei Neustarts erhalten bleiben. Wenn Sie viele Änderungen an Ihren USB-Geräten vorgenommen haben, schließen Sie alle CH340-Geräte an denselben Hub an und schließen Sie diese an. Die Geräte werden in der Reihenfolge aufgelistet, in der sie an den Hub angeschlossen sind. Dieser One-Hub-Trick sollte auch für MacOS und Windows funktionieren. Sie sollten in derselben Reihenfolge ausgeführt werden.
Härtere Methodenregeln. Für Geräte mit einer eindeutigen ID wie FTDI können Sie eine udev-Regel festlegen, die die Seriennummer anzeigt und dann einen Symlink zu diesem Gerät erstellt. Dies ist unkompliziert.
Für Geräte mit derselben oder keiner Seriennummer ist dies viel komplexer. Ich habe eine udev-Regel erstellt, die folgendermaßen aussieht:
SUBSYSTEM == "tty", ATTRS {product} == "USB2.0-Serial", RUN + = "/ usr / local / bin / cheapduino.py% k", ATTRS {idVendor} == "1a86", ATTRS { idProduct} == "7523", ENV {ID_MM_DEVICE_IGNORE} = "1"
Wenn das Gerät mit dem Produkt und dem Anbieter des billigen Arduino übereinstimmt, führt es beispielsweise das Skript 'cheapduino.py' mit dem Gerät als Argument aus
cheapduino.py ttyUSB0
Dann stellt das cheapduino-Skript eine serielle Verbindung zum Gerät her und sendet die Zeichenfolge 'ID'. Die Software auf dem Gerät antwortet mit DEVID = THX1138 oder was auch immer. Das Skript erstellt dann einen Symlink / dev / THX1138, der auf / dev / ttyUSB0 verweist
Diese Methode weist viele Nachteile auf. Das Skript muss eine Zeitüberschreitung aufweisen, wenn die Software auf dem cheapduino nicht antwortet. Auch dies verwendet nicht die SYMLINK-Funktion von udev, sodass tote Links beim Trennen der Verbindung nicht bereinigt werden, sondern beim erneuten Verbinden überschrieben werden. Alle Ihre billigen Duinos müssen diese Funktionalität in ihrer Software haben, wobei unterschiedliche Geräte-IDs festgelegt sind. Sie müssen alle dieselbe Baudrate wie das Skript verwenden, es sei denn, Sie möchten ein sehr komplexes Skript schreiben, das lange dauert. Schließlich funktioniert diese Methode bei niedriger Baudrate viel besser als bei hoher Baudrate, was aus zeitlichen Gründen möglicherweise nicht jedes Mal erfolgreich ist. (billigduinos sind billig!) 9600 funktioniert viel besser als 115200, was nach mehreren Versuchen funktioniert. Da jedoch alle Ihre CH340-Arduinos mit dieser Methode die gleiche Geschwindigkeit haben müssen, können Sie nur so langsam fahren wie Ihr schnellstes Gerät.
Diese Methode funktioniert jedoch und ich verwende sie, weil ich viel zu viele dieser billigen Dinge gekauft habe.
Kaufen Sie am Ende echte Arduinos oder zumindest solche mit FTDI-Chips oder etwas anderem, das eine eindeutige Geräte-ID sendet.
= Reich