Bluetooth-Kommunikation
-
- Beiträge: 71
- Registriert: 16.03.2006 11:20
Bluetooth-Kommunikation
Ich habe mir ein Entfernungsmessgerät (Bosch PLR50C) gekauft, weil ich in den nächsten Wochen hunderte Distanzen abmessen und in Excel verwalten darf. Das nette Spielzeug hat eine Bluetooth-Schnittstelle und es gibt eine Android App, die weniger nett gemacht ist (Bluetooth-Kopplung funktioniert einmal, ab dem zweiten App-Start geht nichts mehr - macht aber nichts, denn das Programm ist ohnehin nicht sehr hilfreich)...
...für Windows gibt es tatsächlich einen Bluetooth-Treiber, mit dem sich das Messgerät auch verbindet. Damit hat es sich aber, Bosch hat "vergessen", ein kleines Programm zu schreiben, welches empfangene Messwerte anzeigt oder in den Tastaturpuffer kopiert oder was auch immer.
Seht ihr irgendwelche Chancen, den Bluetooth-Treiber anzuzapfen, um an Messwerte 'ranzukommen?
Sobald man irgendwelche Daten einlesen könnte, sollte es nicht mehr so schwierig sein (Datenformat)...
...für Windows gibt es tatsächlich einen Bluetooth-Treiber, mit dem sich das Messgerät auch verbindet. Damit hat es sich aber, Bosch hat "vergessen", ein kleines Programm zu schreiben, welches empfangene Messwerte anzeigt oder in den Tastaturpuffer kopiert oder was auch immer.
Seht ihr irgendwelche Chancen, den Bluetooth-Treiber anzuzapfen, um an Messwerte 'ranzukommen?
Sobald man irgendwelche Daten einlesen könnte, sollte es nicht mehr so schwierig sein (Datenformat)...
- HeX0R
- Beiträge: 2959
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 - Kontaktdaten:
Re: Bluetooth-Kommunikation
Wenn es einen Treiber gibt, erkennt Windows das Gerät zumindest mal.
Kannst Du es hiermit evtl. finden (bzw. da ist noch ne neuere Version etwas weiter hinten)?
Wenn dann noch "AddSerialPortToDevice" funktionieren würde, wäre der Rest ja ein Kinderspiel (denke ich mal).
Kannst Du es hiermit evtl. finden (bzw. da ist noch ne neuere Version etwas weiter hinten)?
Wenn dann noch "AddSerialPortToDevice" funktionieren würde, wäre der Rest ja ein Kinderspiel (denke ich mal).
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}
-
- Beiträge: 71
- Registriert: 16.03.2006 11:20
Re: Bluetooth-Kommunikation
Kinderspiel
Also dein Scanner schaut verdammt gut aus, nach ein bis zwei Rescans wird der Client "Bosch PLR50C x4504" gefunden, und ein "Serial port connected" schaffe ich auch
Jetzt finde ich im Device-Manager plötzlich zwei COM-Ports für Bluetooth (COM6 und COM7), das erhöht schon einmal den Schwierigkeitsgrad...
...beide einmal auf gut Glück ausprobiert - man kann sich mit beiden verbinden und bei einer bekomme ich auch schon (irgendwelche) Daten, das könnte noch etwas werden
Wär spannend, ob erkennbar ist, welche COM-Schnittstelle mit welchem Treiber verbunden ist...
Also dein Scanner schaut verdammt gut aus, nach ein bis zwei Rescans wird der Client "Bosch PLR50C x4504" gefunden, und ein "Serial port connected" schaffe ich auch
Jetzt finde ich im Device-Manager plötzlich zwei COM-Ports für Bluetooth (COM6 und COM7), das erhöht schon einmal den Schwierigkeitsgrad...
...beide einmal auf gut Glück ausprobiert - man kann sich mit beiden verbinden und bei einer bekomme ich auch schon (irgendwelche) Daten, das könnte noch etwas werden
Wär spannend, ob erkennbar ist, welche COM-Schnittstelle mit welchem Treiber verbunden ist...
Code: Alles auswählen
DataSection
magic:
Data.a $c0,$55,$02,$01,$00,$1a
EndDataSection
Port$ = "COM7"
#serial=0
If OpenSerialPort(#serial, Port$, 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
Debug "SerialPort opened with success"
#timeout=100
Ok = #False
WriteSerialPortData(#serial,?magic,6)
Timeout = #TimeOut
Repeat
If AvailableSerialPortInput(#Serial)
If ReadSerialPortData(#Serial,@Byte,1)=1
Debug Hex(byte)
EndIf
Delay(1)
EndIf
Until 0;Timeout = 0 Or Ok
Debug "closed"
CloseSerialPort(#Serial)
Else
Debug "Can't open the serial port: "+Port$
EndIf
- HeX0R
- Beiträge: 2959
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 - Kontaktdaten:
Re: Bluetooth-Kommunikation
Ist es nicht so, dass Du einen COM-Port bekommst, sobald Du Dich verbindest und sobald Du AddSerialPortToDevice ausführst, ein zweiter kommt?
Wenn Du dann weisst, welcher von beiden für Dich nutzbar ist, sollte der Rest nicht so schwer sein.
In einer Windowsanwendung z.B. kannst Du ein Signal in der Eventschleife abfangen und bekommst den COM-Port frei Haus, ich habe das mal für ein Tool gemacht, weil ich wollte, dass das automatisch anfängt zu kommunizieren, sobald ein (USB-)COM-Port eingesteckt wird.
Falls Dich das interessiert, müsste ich mal auf die Suche gehen.
[Edit]
Per SetWindowCallBack() einsetzen:
Wenn Du dann weisst, welcher von beiden für Dich nutzbar ist, sollte der Rest nicht so schwer sein.
In einer Windowsanwendung z.B. kannst Du ein Signal in der Eventschleife abfangen und bekommst den COM-Port frei Haus, ich habe das mal für ein Tool gemacht, weil ich wollte, dass das automatisch anfängt zu kommunizieren, sobald ein (USB-)COM-Port eingesteckt wird.
Falls Dich das interessiert, müsste ich mal auf die Suche gehen.
[Edit]
Per SetWindowCallBack() einsetzen:
Code: Alles auswählen
Procedure CallBack_NewDevice(WindowID, Message, wParam, lParam) ;add/delete live connecting USB devices (windows only)
Protected Result, a$, F
Protected *db.DEV_BROADCAST_HDR
Result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_DEVICECHANGE
If wParam = #DBT_DEVICEARRIVAL
*db = lParam
If *db\dbch_devicetype = #DBT_DEVTYP_PORT
a$ = PeekS(*db + 12)
Debug "New COM Port: " + a$
EndIf
ElseIf wParam = #DBT_DEVICEREMOVECOMPLETE
*db = lParam
If *db\dbch_devicetype = #DBT_DEVTYP_PORT
a$ = PeekS(*db + 12)
Debug "COM Port unplugged: " + a$
EndIf
EndIf
EndSelect
ProcedureReturn Result
EndProcedure
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}
-
- Beiträge: 71
- Registriert: 16.03.2006 11:20
Re: Bluetooth-Kommunikation
Danke, ich komme vielleicht noch darauf zurück...
...momentan kämpfe ich mit den Prüfsummen, dann hole ich mir hoffentlich richtige Messwerte - wenn das funkt', nehme ich mir die COMs wieder vor
...momentan kämpfe ich mit den Prüfsummen, dann hole ich mir hoffentlich richtige Messwerte - wenn das funkt', nehme ich mir die COMs wieder vor
Code: Alles auswählen
; Define
EnableExplicit
Enumeration
#Serial
EndEnumeration
DataSection
Magic:; Initial command
Data.a $c0,$55,$02,$01,$00,$1a; Set device as master ($1a=CRC)
; Commands after device has been set as bluetooth master (last byte is CRC)
GetMeasurementCount:
Data.a $c0,$51,$02,$FF,$FF,$9c; Get how many measurements are in device memory
GetMeasurementMemory:
Data.a $c0,$51,$02,$01,$01,$18; Get measurement #1
Data.a $c0,$51,$02,$01,$0a,$80; Get measurement #10
InputBuffer:
Data.a 0,0,0
Type:
Data.a 0
Count:
Data.w 0
One:
Data.a 0
Distance:
Data.l 0
Null:
Data.l 0,0
CRC:
Data.a 0
EndDataSection
Global SerialPort.s="COM7"
#CrcPolynomial= 166
#CrcSeed= 170
; EndDefine
Procedure.i ByteCRC(byte,crc)
; http://www.ti.com/lit/an/slua363/slua363.pdf
Protected bit_mask
Protected carry_check
Protected temp_data
temp_data=byte;
For bit_mask=0 To 7
byte!crc
crc<<1
temp_data<<1
carry_check=byte&$80
If carry_check
crc!#CrcPolynomial
EndIf
byte = temp_data
Next bit_mask
ProcedureReturn crc
EndProcedure
Procedure.i DataCRC(*memory,size)
Protected seed=#CrcSeed
While size
seed=ByteCRC(PeekA(*memory),seed)
size-1
*memory+1
Wend
ProcedureReturn seed
EndProcedure
Debug bytecrc(0,1)
Debug DataCRC(?magic,5)
End
Re: Bluetooth-Kommunikation
Schau mal im Gerätemanager.
Normalerweise ist ein Port für RX und einer für TX,
also Empfangen und Senden.
Muß man evtl. ausprobieren, welcher wofür.
Normalerweise ist ein Port für RX und einer für TX,
also Empfangen und Senden.
Muß man evtl. ausprobieren, welcher wofür.
PB 5.60
-
- Beiträge: 71
- Registriert: 16.03.2006 11:20
Re: Bluetooth-Kommunikation
Hey, schaut inzwischen alles schon ganz gut aus...
...ich bekomme inzwischen Werte von meinem Messgerät, die COM-Schnittstellen kann ich auch relativ schnell im Hintergrund abklopfen (im Gerätemanager sieht man praktisch keine Unterschiede, bei den "Treiberfähigkeiten" hat die funktionierende Schnittstelle das Flag CM_DEVCAP_REMOVABLE gesetzt, das kann aber auch Zufall sein), jetzt (also eher am Wochenende) muss ich nur noch alle Programmteile zusammenfügen...
Danke für deine Unterstützung - eigentlich war's wirklich ein Kinderspiel (komisch, dass der Hersteller so etwas nicht mitliefert...)
...ich bekomme inzwischen Werte von meinem Messgerät, die COM-Schnittstellen kann ich auch relativ schnell im Hintergrund abklopfen (im Gerätemanager sieht man praktisch keine Unterschiede, bei den "Treiberfähigkeiten" hat die funktionierende Schnittstelle das Flag CM_DEVCAP_REMOVABLE gesetzt, das kann aber auch Zufall sein), jetzt (also eher am Wochenende) muss ich nur noch alle Programmteile zusammenfügen...
Danke für deine Unterstützung - eigentlich war's wirklich ein Kinderspiel (komisch, dass der Hersteller so etwas nicht mitliefert...)
Re: Bluetooth-Kommunikation
Schade habe es zu spät gesehen sonst hätte ich auch geholfen..
Ich hatte vor vielen Jahren mal für den Motorola RS507 und später auch den RS6000 die entsprechende Widnows Software für damal noch Motorola entwickelt.
Im Endeffekt auch wie bei dir über COM gemacht. Funktioniert super und BT läst sich auch recht einfach unter Windows kontrolieren.
Ich wünsch Dir viel Spaß und erfolg mit deinem Scanner
Ich hatte vor vielen Jahren mal für den Motorola RS507 und später auch den RS6000 die entsprechende Widnows Software für damal noch Motorola entwickelt.
Im Endeffekt auch wie bei dir über COM gemacht. Funktioniert super und BT läst sich auch recht einfach unter Windows kontrolieren.
Ich wünsch Dir viel Spaß und erfolg mit deinem Scanner