Hallo zusammen, ich habe heute ein Bluetooth-Modul an einen Mikrocontroller angeschlossen Nun würde ich in einer eigenen Software die unter Windows laufen soll den von WIN zugewiesenen COM-Port des Gerätes anhand seines Namen automatisch auslesen, damit soll die manuelle Suche des zugewiesenen Ports (z.B. im Gerätemanager) ersetzt werden. Der Name des Modules ist fest definiert. Sollte doch irgendwie machbar sein. Danke schon mal. Gruss Matt
Du könntest ja mal in der Registry nach dem Namen suchen -- und sehen, wo Du da dann gelandet bist. (regedit aufrufen, Ctrl+F drücken, Namen eingeben und suchen lassen)
Hi, vielleicht hilft das hier. Ich habe vor einiger zeit mal folgendes Programm gebastelt: http://nippey.dornuweb.de/index.php?art=15 Hiermit hast du im Tray ein Symbol, über das du die aktuell vorhandenen Ports auflisten kannst. Kann sicher an einigen Ecken verbessert werden, ich freue mich immer über Feedback! Bisher habe ich es erst auf zwei Systemen testen können.
@Rufus: ich habe meine Registry mal nach dem Gerätenamen durchsucht. Ich hab zwar etwas gefunden, allerdings konnte ich nichts finden, das mir Informationen über den zugewiesenen COM-Port geben könnte. @Matthias: das Programm sieht mal nicht schlecht aus. Wenn du es jetzt noch möglich wäre, den Namen des Bluetooth-RS232 Adapters anzuzuzeigen, der den COM-Port zur Verfügung stellt, wäre das genau das was ich suche. Hast du das schon mal versucht? Euch beiden schon mal vielen Dank! Gruss Matt
Ich glaube, das war genau die Ecke, an der ich auch damals schon dran gekaut habe... ;) Ich versuche gerne, da noch mal weiter zu machen. Nur damit wir vom selben 'Namen' reden, bevor ich blind losarbeite, kannst du einmal genau beschreiben, wo der von dir gewünschte Name angezeigt wird? (Listeneintrag im Gerätemanager, Name der angezeigt wird wenn das Gerät eingesteckt wird, etc.) Screenshots nehme ich auch gerne. Ich weiß, dass ich versucht habe, den Namen auszulesen, der bei FTDIs (USB-2-UART Konverter) nur kurz angezeigt wird, wenn man ihn in einen bis dato noch nicht genutzten USB-Port steckt. Leider (bis jetzt) ohne Erfolg. EDIT: >@Matthias: >das Programm sieht mal nicht schlecht aus. Wenn du es jetzt noch möglich >wäre, den Namen des Bluetooth-RS232 Adapters anzuzuzeigen, der den >>Bluetooth-RS232 Ein nicht-USB Gerät, das direkt auf den Hardware COMx deines Rechners geht? Das könnte schwierig werden. Oder meinst du halt so ein USB-Bluetooth-Stick?
Hallo Matt, hier mal ein paar Stichwörter für Tante Google: com port friendly name wmi Für WMI kannst Du dir ja mal WMIMulti Prog runterladen (http://www.tools4net.de/doc/wmimulti.htm) und dann mal folgnedes probierren: Namespace: root\CIMV2 Querey-String: SELECT * FROM Win32_PnPEntity WHERE (ConfigManagerErrorCode = 0 and Caption like '%(com_%)%' ) ausführen und schauen, ob Dein Modul mit dem bekannten Namen angezeigt wird (Feld Caption). und hier noch ein Auszug meiner VB2010 Express Funktion wie ich die Namen der Ports ermittle.
1 | Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles btnFindPorts.Click |
2 | Dim searcher As New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_SerialPort") ' Anfrage für normale COM-Ports |
3 | Dim usbSearcher As New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_PnPEntity WHERE (ConfigManagerErrorCode = 0 and Caption like ""%(com_%)%"")") 'Anfrage für virtuelle COM-Ports (USB-Serial) |
4 | Dim name As String |
5 | Dim portname As String |
6 | |
7 | Me.ListBox3.Items.Clear() ' alle Einträge löschen |
8 | |
9 | Me.ListBox3.Items.Add("----------------------------:") |
10 | Me.ListBox3.Items.Add("Ergebnis von Win32_SerialPort:") |
11 | Me.ListBox3.Items.Add("------------:") |
12 | For Each queryObj As ManagementObject In searcher.Get() |
13 | name = queryObj("Name") |
14 | portname = queryObj("DeviceID") |
15 | Me.ListBox3.Items.Add(portname & ": (" & name & ")") |
16 | meinePorts(portname) = name |
17 | Next |
18 | |
19 | Me.ListBox3.Items.Add("---------------------------:") |
20 | Me.ListBox3.Items.Add("Ergebnis von Win32_PnPEntity:") |
21 | Me.ListBox3.Items.Add("------------:") |
22 | For Each queryObj As ManagementObject In usbSearcher.Get() |
23 | name = queryObj("Caption").ToString.ToUpper |
24 | If InStr(name, "(COM") = 0 Then |
25 | Continue For ' Kein "(COM" gefunden , weitermachen ohne das Ergenis auszuwerten |
26 | End If |
27 | portname = name.Substring(InStr(name, "(COM"), 5) |
28 | If InStr(portname, ")") > 0 Then ' Portnummer einstellig? |
29 | portname = portname.Substring(0, 4) |
30 | End If |
31 | meinePorts(portname) = queryObj("Description") |
32 | |
33 | Me.ListBox3.Items.Add(portname & ": (" & queryObj("Description") & ")") |
34 | Next |
35 | |
36 | cmbPort.Items.Clear() ' alle einträge löschen und nun mit freundlichen Namen füllen |
37 | |
38 | For Each kvp As KeyValuePair(Of String, String) In meinePorts |
39 | cmbPort.Items.Add(kvp.Key & ": (" & kvp.Value & ")") |
40 | Next |
41 | |
42 | cmbPort.Text = cmbPort.Items.Item(0) 'Set cmbPort text to the first COM port detected |
43 | cmbPort.Text = My.Settings.cmbPortSetting ' falls ein gespeicherter Wert existiert, dasnn diesen nehmen. |
44 | End Sub |
Gruss Andreas PS: Damit obiger Code funktioniert müssen die fehlende Objekte (buttons, Variablen) noch angelegt werden. Und der Verweis auf die System.Management.dll muss eingefügt werden.
Hallo Matthias, ich verwende am einem Mikrocontroller ein Bluetooth-UART-Adapter. Dieses Modul besitzt einen Namen. Im Screenshot im Anhang ist das Gerät mit dem Namen <linvo> aufgeführt. Zu finden ist diese Übersicht unter "Geräte und Drucker". Später soll der Modul-Name natürlich etwas eindeutiger sein (z.B. mit Geräte-ID). Nun würde ich gerne den zu dem Bluetooth-Modul mit genau diesem Namen den COM-Port auslesen. Hallo Andreas, ich werde mich heute Abend mal durch den Code arbeiten und sehen ob ich damit weiter komme. Schon mal vielen Dank für eure Hilfe! Gruss Matt
@Andreas W: Mit WMI Requests arbeitet mein Proggie bereits, vielleicht finde ich bei dir ja noch eine Abfrage, die ich bisher nicht genutzt habe ;) Wusste gar nicht, dass man die WMI Sachen auch per VBS machen kann.., zum schnellen probieren absolut nicht verkehrt. @Matt B. Die guten alten Linvors von CSR ;) Ich habe hier nen ganzen Satz dieser Module. Da habe ich ja direkt Hardware zum Testen ;)
> Ich weiß, dass ich versucht habe, den Namen auszulesen, der bei FTDIs > (USB-2-UART Konverter) nur kurz angezeigt wird, wenn man ihn in einen > bis dato noch nicht genutzten USB-Port steckt. Leider (bis jetzt) ohne > Erfolg. Ganz einfach wie unten gezeigt. Wobei der name im EEPROM in diesem Beispiel auf "PORT" gesetzt ist. Dann kannst du "PORT A" und "PORT B" öffnen, wenn du als Parameter FT_OPEN_BY_DESCRIPTION übergibst. ftSTATUS = FT_OpenEx("PORT A",FT_OPEN_BY_DESCRIPTION,&ftHANDLE);
> ftSTATUS = FT_OpenEx("PORT A",FT_OPEN_BY_DESCRIPTION,&ftHANDLE)
Ist bekannt. Es ging mir aber um eine Modellübergreifende Lösung ;)
Das Programm selber sollte so unabhängig wie möglich sein. Wo ich aber
schon drüber nachgedacht habe ist eine Art plugin-System. Man füttre
eine Portnummer ins plugin und dieses gibt eine Beschreibung zurück,
wenn der Port bekannt ist.
Mal sehen... ;)
Hi, bis ich das mit den BT-Modulen testen kann, dauert es noch etwas, aber so schaut die Ausgabe meines Programms zurzeit schon aus. Das sollte doch das sein, was du suchst? Wenn ja, dann suche ich mal den Quälcode raus. @Uwe Achja, es ging bei den FTDIs aber nicht darum, sie über ihren Namen zu öffnen, dieses Problem hat der Threadstarter, bei mir war es das Gegenteil, die Description auszulesen, wenn die Portnummer gegeben ist. Aber die Gründe warum ich mir das Leben so schwer mache, habe ich ja bereits einen Beitrag darüber genannt ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.