Daten über Bluetooth senden und empfangen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 68 Antworten in diesem Thema. Der letzte Beitrag () ist von tron25.

    Daten über Bluetooth senden und empfangen

    Hallo,

    ich habe ein Anzeigegerät, welches über Bluetooth mit dem PC verbunden ist. Im Gerätemanager wird es nicht unter "Anschlüsse", sondern unterhalb von "Bluetooth" angezeigt. Leider wird es mit der folgenden Zeile nicht angezeigt:

    VB.NET-Quellcode

    1. SchnittstelleCombo.Items.AddRange(IO.Ports.SerialPort.GetPortNames())


    Ich habe viel gelesen, dass Bluetooth-Verbindungen als serielle angezeigt bzw. auch so behandelt werden. Leider habe ich da noch keinen Erfolg gehabt. Daten über eine herkömmliche serielle Schnittstelle habe ich hinbekommen.

    Ich würde mich sehr freuen, wenn jemand von euch mir da weiterhelfen könnte.

    -----

    Hier eine kurze Frage, die mit dem Thema nichts zu tun hat. Wenn ein Artikel beendet ist, sollte dieser auch geschlossen werden. Wie kann ich dass als Blinder bewerkstelligen, da leider nicht alle Links korrekt beschriftet sind.
    Nicht jede BT Kommunikation geht über Serial, daher wirds dir nicht in der Liste der COM Ports angezeigt. Ein Anzeigegerät? Meinste einen Monitor/TV? Ich glaube die Datenrate über Serial würde auch garnicht ausreichen für FHD oder 4K Bildübertragung.

    Solange die Gegenstelle dem PC über den BT-Adapter, nicht sagt "Serial-Port hier", kann Windows auch keinen für das Gerät anzeigen.

    BT Master -> BT Slave -> USB
    oder BT Slave -> BT Master -> USB und andersrum, so isses.

    bzw. wenn ein BT Adapter auf'm MainBoard ist
    Bt Master -> BT Slave -> Schitstelle des MB zum OS(Treiber)
    oder BT Slave -> BT Master -> Schitstelle des MB zum OS und andersrum.

    Dabei kann sich das Gerät als alles mögliche beim PC Melden, Tastatur, Maus, Soundkarte, GamePads, SerialPort ....., ist aber fest programmiert, wirst du nichts dran machen können.

    Dieser Beitrag wurde bereits 12 mal editiert, zuletzt von „Takafusa“ ()

    Bei dem Gerät handelt es sich um ein Brailledisplay. Dieses besteht aus 48 x 76 Pins, die eine Grafik tastbar für Blinde darstellen sollen. Ich habe ein Programm geschrieben, welches herkömmliche Bilder in solche Braillegrafiken umwandelt. Diese können entweder über einen Brailledrucker taktil gedruckt werden, indem die einzelnen Punkte reihenweise in das Papier gestanzt werden oder die Grafik kann auch über eine sogenannte Braillezeile direkt ertastet werden. Am Besten gibst du mal "Braillezeile" bei Google ein . Dann weißt du, was ich meine. Um einen größeren Bildausschnitt betrachten zu können, wurden Brailledisplays entwickelt. Ich habe nun solch eines und möchte es für mein Programm anpassen. Also, die Datenmenge ist viel geringer, als bei einem TV oder Sonstigem. Ein Datensatz besteht aus ca. 500 Bytes.

    Ich bin dem obigen Link gefolgt und habe versucht, die Beispiele zu verstehen. Leider ist mein Englisch nicht das Beste. Soweit ich es verstanden habe, brauche ich eine zusätzliche DLL. Allerdings würde ich gerne, wenn es möglich ist, das Ganze ohne zusätzliche Programme oder DLLs bewerkstelligen.
    Kenne ich, ich kann sogar Blindenschrift. Hab das in der Schule gelernt war glaub ich in der Grundschule 3.-4. Klasse, ist aber schon Jahrzehnte her. Ich weiss nicht ob und wie ich da helfen kann. Nenn mir mal den Hersteller und das Model, dann kann ich mal schauen was ich finde und dir vllt. Tipps geben, versuchen werde ich es wenn ich die Informationen hab.
    Das Gerät nennt sich HyperFlat von der Firma Metec. Ich denke allerdings, dass mein Problem nicht das Gerät mit seinem Chip ist, sondern der Weg, Bluetooth-Geräte anzusteuern, die nicht als COMM-Schnittstelle angezeigt werden. Ich habe das Übertragungsprotokoll und die Befehlsliste. Ich habe letztens eine Steuersoftware fertiggestell, mit der 3D-Drucker angesteuert werden können. So etwas Ähnliches, wie Octopy, nur für Windows. Damit stellen Touchdisplay von neueren Druckern für mich keine so große Hürde mehr da. Bei diesem Programm gehe ich über eine Comm-Schnittstelle, daher hatte ich gehofft, über die gleiche Methode auch das Brailledisplay ansteuern zu können - leider falsch gedacht.
    Ich hab was gefunden, ich weiss nicht in wie weit dir das helfen wird.

    download.metec-ag.de/MVBD/

    Dieser MVBD Client nutzt eine TCP Verbindung, ich halte es für möglich dass das Display(bzw. der Treiber) über BT eine TCP Verbindung tunnelt, oder der treiber, ein Service oder eine andere im Hintergrund laufende Anwendung einen TCP Server laufen hat der dann zum Gerät schreibt. Dort ist auch ein C# Code(Projekt) zu finden, schau dir das mal an. Das Beispiel Projekt versucht eine Verbindung zum localhost aufzubauen(127.0.0.1:2018), weil ich kein Gerät habe und auch nicht den "Emulator" laufen hab, kriege ich eine Socket-Exception, möglicherweise ist das das was du brauchst.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Takafusa“ ()

    Hi,
    ich habe heute mit einem Mitarbeiter der Firma telefoniert. Dieser MVBD Client baut, wie du es schon richtig erkannt hast, eine Verbindung zu MVBD auf. Dieser verbindet sich direkt mit dem Gerät. Leider wollte er mir nicht so richtig sagen, wie er die Verbindung aufbaut. Statt dessen hat er mir vorgeschlagen, meine COMM-Schnittstellen durchzuprobieren und Daten zu senden. Das Gerät wird bei mir im Gerätemanager einmal als HyperFlat-76 und auch noch als Bluetooth Device (RFCOMM Protocol TDI) angezeigt. Er sagte mir, dass nicht alle Virtuellen COMM-Ports unter "Anschlüsse" aufgelistet werden.

    Gibt es einen eindeutigen Wert des Gerätes, welches direkt über Bluetooth angesprochen werden kann, wie z.B. die Bluetooth-ID? Oder sollte ich eine Schleife laufen lassen, die erst prüft, welcher COMM-Port geöffnet werden kann und welcher plausible Daten zurücksendet?

    ---

    Jetzt habe ich über eine Schleife versucht, jeden Port von "COM1" bis "COM100" zu öffnen. Leider war der RFCOMM nicht dabei.

    VB.NET-Quellcode

    1. X = 1
    2. Gefunden = False
    3. Do Until X > 100 Or Gefunden = True
    4. Try
    5. AnschlussSerialPort.PortName = "COM" & X
    6. AnschlussSerialPort.Open()
    7. Gefunden = True
    8. Catch Fehler As Exception
    9. AnschlussSerialPort.Close()
    10. X += 1
    11. End Try
    12. Loop


    Hat Jemand eine andere Idee, wie ein Virtueller COMM-Port eines Bluetooth-Gerätes geöffnet werden kann?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „tron25“ ()

    tron25 schrieb:

    wie er die Verbindung aufbaut


    Vermutlich wusste er es nicht und hat um den heißen Brei herumgereded, also vom MVDB Client ist dort sowohl die EXE wie auch der Quellcode downloadbar(Ein fertiges Visual Studio Projekt in C#), Ich hab die Projektmappe runtergeladen und kann damit arbeiten, musste aber einmal das Projekt bereinigen und neu erstellen, mit den paar klicks im MenuStrip, war alles OK und das Projekt ist kompilierbar. Da der Mitarbeiter sagte, der Client ist in der Lage sich mit der Hardware zu verbinden, muss alles drin sein was du suchst. Ich habe den Source nicht wirklich angeschaut, nur einmal inner VM im Studio geöffnet und kompiliert, wie auch gestartet.

    edit @tron25
    Auf der Seite das runterladen: (MVBDClient.zip (C# Sourcecode of the MVBDClient))

    Dann musst du mal schauen ob du die Hardware damit ansteuern kannst.
    Bilder
    • Unbenannt.jpg

      64,03 kB, 381×500, 127 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Takafusa“ ()

    Hi,
    Die Zip-Datei habe ich auch. Das C-Projekt verbindet sich aber nur mit dem Hauptprogramm, welches seinerseits die Verbindung zum Gerät herstellt. Das Hauptprogramm hat der Mitarbeiter angeblich selbst geschrieben. Ich habe gesehen, dass du ein Bild eingefügt hast. Leider kann ich es nicht erkennen. Ist das evtl. ein Screenshot?

    tron25 schrieb:

    Ist das evtl. ein Screenshot?


    Ein Screenshot der Projektmappe, dachte hast das Projekt dort übersehen.

    Also da sich der MVDB-Client mit dem Hauptprogramm verbindet und dieses sich via RFCOMM mit dem Gerät, bleiben dir 2 Möglichkeiten, 1. wie der MVDB-Client das gleiche machen oder 2. eine UWP-App erstellen und dich dabei hier durchwurschteln:

    docs.microsoft.com/de-de/windo…receive-files-with-rfcomm

    Das lohnt glaub ich aber nur wenn du weist, was gesendet werden muss und auch was zurück kommt. Wenn du da eine Dokumentation hast, eine findest, oder von der Firma bekommen kannst, stehen die Chancen gut etwas hinzubekommen. Du kannste aber schauen, ob das Hauptprogramm einfacher nur weiterleitet, dann hast du alles in der MVDB-Projektmappe. Ich selbst habe keine Ahnung von RFCOMM, brauchte ich bisher nicht. Ich kann noch mal schauen ob ich mehr finde, werde wenn hier posten.

    Oder ganz hart die Bastlermethode, das Gerät umbauen. So eine kleine China-Arduino-Kopie mit BT(HC-05 oder so) rein, 'nen Portexpander und/oder auch LogicLevelKonverter könnten von nöten sein und dann haste nen klassichen COM-Port dafür verfügbar.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Takafusa“ ()

    Ich werde mir mal den Link anschauen. Ich habe die Protokolldokumentation. Das Gerät bekommt Datenpakete, die die einzelnen Pins anheben bzw. unten lassen. Tastendrücke werden beispielsweise zurückgegeben, um das Display auf einer Grafik navigieren zu können, zu zoomen oder die Grafik beispielsweise zu invertieren. Das Senden und Empfangen der Datenpakete ist zwar komplex, aber nicht zu kompliziert. Mein Problem ist die Verbindung. Ich würde schon gerne einen Weg finden, ohne das Hauptprogramm benutzen zu müssen, da dies extrem viele Einstellungsmöglichkeiten hat und ich diese den späteren Benutzern ersparen möchte. Ich möchte nur die nötigsten Einstellungen in mein Grafikprogramm integrieren.

    ;) Du hast recht, ich habe die Grafik im wahrsten Sinne des Wortes tatsächlich übersehen ;-).
    Die Grafik ist nicht von dort, ist ein Screenshot vom Inhalt des Projektes.

    Da du weist was du zu senden hast, wie auch was reinkommt, denke ich das du einfach mal probieren solltest, ob du eine Verbindung hinbekommst.. Denk aber dran eine UWP-App zu machen, ich denke diese RFCOMM-Sachen sind im klassischen Framework nicht drin, wie auch nicht im neuen .NET.
    Leider konnte ich heute nicht viel erreichen. Ich hatte gestern ein Beispiel in CS gefunden, welches angeblich Bluetooth Geräte anzeigen kann. Bei den vielen Seiten, die ich besucht habe, habe ich den Überblick verloren, sodass ich dir leider nicht sagen kann, wo das Beispiel, Namens "BluetoothLE.zip" her ist. Wenn es mir wieder über den Weg läuft, werde ich darauf achten. Jedenfalls habe ich an einigen Stellen im Internet gelesen, das einige Verweise hinzugefügt werden müssen. Und so hat das Dilemmer angefangen. Ich konnte die nötigen Dateien auf meinem PC nicht finden und habe mir daher kurzer, aber schlechter Hand das VS2022 installiert. Beim Start bei meinem Projekt habe ich sehr viele Fehler bekommen, wie z.B. dass beim Erstellen von Forms angegeben werden muss, ob sie "readOnly" sind. Außerdem hat VS bei einfachen "Dim" Anweisungen gemäckert. Statt "Dim Zaehler as integer" mußte ich "public Zaehler as integer" schreiben. Dann bin ich nach viel Lesen im Internet darauf gekommen, dass diese Meldungen damit zu tun haben, dass die neue VS Version .Net Framework 4.8 verwendet und mein Programm mit .Net Framework 4.6 geschrieben ist. Dabei habe ich leider mein Projekt zerschossen. Naja, dank mehrerer Sicherheitskopieen habe ich das Projekt wieder hinbekommen. Daher bin ich leider in der Bluetooth-Sache heute nicht weiter gekommen. Jetzt überlege ich mir, ob ich mir die Mühe mache, mein Projekt auf die neueste Framework Version umzuschreiben. Ich werde morgen anfangen, mich mit dem Thema UWP auseinanderzusetzen.
    An einer neueren Framework Version sollte es eigendlich nicht liegen, wenn ein Dim bemängelt wird und es nur mit Public geht, liegt es vermutlich daran das du von ausserhalb der Klasse drauf zugreifst. Das Projekt das Bluetooth Geräte anzeigen kann, muss nicht unbedingt mit dem Gerät kommunizieren können, mittels WMI geht's recht einfach alle Arten von Devices aufzulisten, von HDDs, bis hin zu GPU oder CPU.
    Ich bin jetzt einen ganz kleinen Schritt weitergekommen. Auf der Seite

    docs.microsoft.com/de-de/windo…devices-sensors/bluetooth

    werden verschiedene Methoden erläutert. Mit dem Satz

    Sie müssen die Bluetooth-Funktion in Package.appxmanifest deklarieren.
    <Capabilities> <DeviceCapability Name="bluetooth" /> </Capabilities>

    habe ich ein Problem, da ich in meinem Projekt keine "Package.appxmanifest" habe. Das , in dem Artikel erwähnte Beispiel habe ich auch heruntergeladen, es aber leider nicht zum Laufen gebracht. Desweiteren habe ich ein Beispiel, Namens "Daydream-UWP-VB.net-Bluetooth-BLE-master" von GitHub heruntergeladen. Dieses Programm ist sogar in VB geschrieben. Kurz vor dem Absturz wurde sogar das Brailledisplay angezeigt. Ich habe dann das gleiche NuGet-Paket in mein Projekt geladen. Aber irgend was scheint noch zu fehlen. Die folgenden Zeilen werden leider nicht erkannt:

    VB.NET-Quellcode

    1. Imports Windows.Devices.Enumeration
    2. Imports Windows.Devices.Bluetooth.GenericAttributeProfile


    Es ist leicht frustrierend. Ich dachte bisher, dass ich mich durchschnittlich gut mit VS auskennen würde, aber die Themen Verweise, APIs und zusätzliche Pakete sind doch noch einarbeitungswürdig.

    Gibt es hier im Forum die Möglichkeit ZIP-Dateien anzufügen?

    tron25 schrieb:

    Gibt es hier im Forum die Möglichkeit ZIP-Dateien anzufügen?


    Wenn du einen Post erstellst, klicke auf "Erweiterte Antwort", dort kannst du das. Bzw. beim bearbeiten eines Posts "Erweiterte Bearbeitung".


    Edit: @tron25
    Um sicher zu sein, habe ich jetzt einmal geschaut, wegen der manifest Datei. Erstelle ein VB-UWP Projekt, Anhang 0.jpg, sollte dir bei der Auswahl nichts angezeigt werden(das ist der neues projekt dialog), musst du den VS-Installer öffnen und folgendes installieren Anhang 1.jpg siehe unter net Desktop, UWP. Danach legste ein Projekt an und ohne weiteres ist die Datei da. Anhang 2.jpg
    Bilder
    • 0.jpg

      17,42 kB, 754×162, 99 mal angesehen
    • 1.jpg

      40,71 kB, 460×301, 85 mal angesehen
    • 2.jpg

      41,36 kB, 329×287, 102 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Takafusa“ ()

    Wie kann ich bei meinem bestehenden Projekt eine Manifestdatei hinzufügen? Ich möchte die Bluetoothverbindung in mein Projekt integrieren.

    Kannst du mir bitte erklären, was auf den JPGs von dir zu sehen ist? Mein Sehrest reicht leider nicht mehr dafür.

    Ich schicke hier mal das VB-Projekt, welches ich gefunden habe. Ich habe versucht, wie ich schon geschrieben hatte, das gleiche Paket bei meinem zu installieren, aber das Programm hat wohl noch mehr Verweise oder Pakete, die ich bei mir einbinden müßte.
    Dateien
    Klick mal auf die Bilder drauf, dann siehst du sie in originalgröße.


    Ist doch eine Package.appxmanifest drin.

    docs.microsoft.com/de-de/windo…receive-files-with-rfcomm

    bei mir werden keine Fehler angezeigt das Projekt kann kompiliert werden, wenn du im Studio im projektmappenexplorer schaust, siehst du eine Package.appxmanifest, klicke drauf, du sieht das nicht in textform, kannst die Datei aber auch mit Notpad++ oder so direkt öffnen, im studio wechsell zu "funktionen", der haken bei Bluetooth war schon drin. Damit kannste auch importieren.

    VB.NET-Quellcode

    1. Imports Windows.Devices.Bluetooth
    2. Imports Windows.Devices.Bluetooth.Rfcomm

    Siehe den Link oben, in VB ist zwar kein Beispiel da aber nimm einen Online Übersetzer.

    codeconverter.icsharpcode.net/

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Takafusa“ ()

    Das Problem mit den JPGs ist, dass ich nur noch einen Sehrest von unter 5% habe und sie daher nicht mehr gut genug erkennen kann.

    Bedeutet das, dass ich einfach die Package.appxmanifest in mein Projektverzeichnis kopieren kann und sie dann nutzbar ist? Ich werde es gleich mal ausprobrieren. Jetzt muß ich nur noch das Feld "Funktionen" finden.

    Bevor ich es ganz vergesse, möchte ich mich jetzt schon sehr für deine Hilfe bedanken.

    Unter dem folgenden Links kannst du dir meine Software anschauen. Allerdings war das noch ein frühes Stadium. Das Programm kann inzwischen eine ganze Menge mehr. Beispielsweise können nun Kamerabilder live tastbar gemacht werden.