Ich verwende einen Arduino Mega unter Win10.
Die Arduino-IDE zeigt alle verfügbaren COM-(USB-)Ports an.
Bei dem Port, das mit dem Arduino verbunden ist, steht Arduino Mega oder Mega xxx (USB nn)
bei den anderen steht Unbekannter Arduino (USB nn)
(oder so ähnlich).
Mein Problem besteht darin, dass ich beim Start meines Windows-Programms testen muss, ob und wie die Ports belegt sind, ohne mit diesen Geräten (Arduino, Laser, Spektrometer) kommunizieren zu müssen.
Mit dem C#-Code
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE ClassGuid=\"{4d36e978-e325-11ce-bfc1-08002be10318}\"");
kann ich die Seriennummer des Arduino auslesen, nicht seinen jedoch Namen bzw. den Namensbestandteil "Arduino".
Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
Q 6v6gt Leider nein, ich habe bereits den Geräte-Manager durchgeflöht, da habe ich nichts gefunden.
Die VID ist lediglich eine Zahl, die PID ist die Seriennummer, die habe ich, wie gesagt.
Danke.
Die den Hersteller des USB Gerätes identifiziert. Bei einem original Arduino-Board ist das die ID von ArduinoSA (0x2341), und in dem Fall kann die IDE auch die Produkt-ID auswerten.
Bei anderen Boards mit z.B. einem CH340 als Serial-USB Wandler erhälts Du aber nur die Hersteller ID des Chip-Herstellers ( in dem Fall z.B. 0x1A86) und die PID für den jeweiligen Chip. Dann kann die IDE daran nicht erkennen, welches Board verbunden ist.
Um den Sketch richtig kompilieren und uploaden zu können, musst Du daher in der IDE das richtige Board auswählen.
Auf einem Raspberry PI muss das richtige Board ausgewählt werden.
Bei einem falschen Board kommen Fehler beim Compilieren und/oder Upload.
Unter Windows erkennrt die IDE automatisch das richtige Board und man muss nichts auswählen.
Deswegen meine Frage:
Wie erkennt die Arduino IE unter Windows, welcher Arduno verbunden ist?
Wenn das die IDE über die Seriennummer und z.B. eine in ihr hinterlegte Tabelle erkennt, kann ich das natürlich nicht nachbauen und ich muss mir eine andere Lösung ausdenken.
Wie kommst du da drauf ?
Auch unter Windows musst du das richtige Board auswählen.
Mindest muss der Controller passen und besser auch das jeweilige Board.
Ok, dann hast du ein "besonderes Windows" und eine "spezielle" IDE.
Ich muss das Board auswählen, damit alles funktioniert und fehlerfrei compiliert.
Glückwunsch
@ my_xy_projekt Dein Beitrag ist mir eben durch die Lappen gegangen, sorry.
Habe ich das richtig verstanden: Die Grundidee besteht darin, die Registry auszulesen und die Information zu zerhackstückeln.
Möglicherweise ist das dasselbe, wie das, was ich in C# mit dem ManagementObjectSearcher mache. Wenn in der Registry noch mehr steht, muss ich testen, ob das genau so dynamisch auf Anstecken und Abziehen reagiert wie der Gerätemanager.
Ich werde das am Montag mal ausprobieren, das Gerät und die IDE stehen bei mir auf Arbeit rum.
Wenn Du die IDE 2.x verwendest, gibt es oben ein Drop-down Menü. Da wird ein angeschlossenes Board angezeigt, wenn es sich um ein original Arduino-Board handelt. Wenn mehrere angeschlossen sind oder waren - er merkt sich auch Boards die früher angeschlossen waren - , muss man da aber auch manuell auswählen, welches man nutzen will, und es gibt bei den Boards natürlich auch noch individuelle Enstellungen. So ganz automatisch geht es also nicht. Und es funktioniert auch nur bei original-Arduino Boards.
Zum Kompilieren muss das richtige Board ausgewählt werden.
Zum Hochladen muss das richtige Board und der richtige Port ausgewählt werden.
Für den seriellen Monitor muss nur der richtige Port ausgewählt werden. Wenn ich es richtig verstehe, interessiert sich @RodFromGermany nur dafür.
Ich denke, @RodFromGermany bezieht sich auf das untenstehende Bild:
Zerleg Dir die Batch.
Das Ding ist genau für diesen Fall:
ausgelegt. jedes mal, wenn das Hauptmenu aufgerufen wird, wird die registry ausgelesen.
Die GUI des Gerätemanagers ist nur das Ergebnis der Registry.
Und las Dich nicht verrückt machen.
Die IDE kann sehr wohl sowohl unter Windows, als auch unter Linux den richtigen Port auswählen.
Wichtig ist, dass beim Start der richtige Controller eingestellt ist.
Das geht natürlich nicht, wenn da nur Controller mit CH34x / CP2xx Schnittstelle bestückt sind. Dazu muss man schon etwas Geld investieren und wenigstens Clone kaufen, die dann auch den entsprechenden Kommunikationschip haben.
Das habe ich am Raspberry PI gemerkt, da kamen Fehler beim Upload.
Am PC kann ich das nun nicht mehr nachstellen, er merkt sich den letzten Arduino, der angesteckt war, ich hab das gleich als erstes getestet.
Jedes USB Gerät hat 2 Identifikationsnummern die ausgelesen werden können. Die VID ( Vendor-ID) und die PID ( Produkt-ID ) Die VID wird dem Hersteller vergeben. Die PID vergibt er selbst.
Da die meisten Orginal-Arduinos als USB-Adapter einen programmierten Controller haben kann die PID für jedes Model anders sein. Dabei können die Arduino-Boards auch eine Seriennummer haben und darum hast Du zB bei Windows wenn Du 2 gleiche Arduinomodelle an USB anschließt 2 verschiedene COM-Ports.
Viele Arduino Nachbauten, aber auch alte orginal-Modelle haben spezielle USB Serial Adapter Bausteine: Orginal Arduinos den FT232; Nachbauten auch einen der folgenden: FT232, CH340, CH341, CP2102, PL2303. Jeder dieser Bausteine hat seine VID und PID fix einprogrammiert und so kann man nicht erkennen welches Arduino bzw Nachbau - Model an der USB Schnittstelle hängt. Windows erkennt in diesem Fall nur den Adapter und nutzt den entsprechenden Treiber.