Seite 1 von 1

BluePy Raspberry 3 b+ und HM-10 (DSD Tech)

Verfasst: Sonntag 17. März 2019, 14:28
von ThomasWenning
Hallo liebe Forumteilnehmer,

ich möchte gerne über den integrierten Bluetoothadapter an einen HM-10 (DSD Tech) serielle Daten verschicken. Es sollen einfache Kommandos sein (A, B ... etc.), die dann vom Arduino entsprechend interpretiert werden sollen. Mit Bluetooth LE scheint sich einiges geändert zu haben. Der folgende Code funktioniert:

Code: Alles auswählen

from bluepy import btle

print("Connecting...")
dev = btle.Peripheral("D8:A9:8B:C2:B7:FF")

print("Services...")
for svc in dev.services:
        print(str(svc))

Das Ergebnis:

Connecting...
Services...
Service <uuid=Generic Access handleStart=1 handleEnd=11>
Service <uuid=ffe0 handleStart=16 handleEnd=65535>
Service <uuid=Generic Attribute handleStart=12 handleEnd=15>

Das Gerät wurde also richtig erkannt. Wie geht es aber nun weiter? Muss ich auf Systemebene die Geräte pairen und per Python auf die serielle Schnittstelle serial1 -> ttyAMA0 (aus /dev/) zugreifen?

Vielen Dank für Lesen und evtl. die Antworten

Liebe Grüße Thomas

Re: BluePy Raspberry 3 b+ und HM-10 (DSD Tech)

Verfasst: Sonntag 17. März 2019, 14:46
von __deets__
BLE kommuniziert über die characteristics. Das ist noch einmal eine Ebene tiefer als der Service. Da musst du die passende auswählen, und solltest daran Daten schicken können. Und auch lesen und sich benachrichtigen lassen.


Mit einer seriellen Schnittstelle hat das erstmal nichts zu tun.

Zum pairing habe ich leider keine weiteren Informationen. Meine eigenen BLE Experimente sind bisher immer simpel ohne Notwendigkeit zu pairen.

Re: BluePy Raspberry 3 b+ und HM-10 (DSD Tech)

Verfasst: Sonntag 17. März 2019, 15:55
von ThomasWenning
Vielen Dank für die schnelle Antwort.

Stellt denn BluePy mir alles Notwendige zur Verfügung um Daten zu senden und zu empfangen? Woran erkenne ich das geeignete Characteristic?

Verstehe ich es richtig, dass es in Bluetooth classic Protokolle gab, die die Funktionen (Serial, Headset,...) fest zur Verfügung stellen? Und BLE Services mit ihren Characteristics (Indentifikation durch UUID) zur Verfügung stellt. Man schaut also welche Service werden zur Verfügung gestellt und nutzt eben die geeigneten dazugehörigen Characteristics (Puls, Blutdruck, etc.). Ist sehr verwirrend. Welche Characteristic sendet einfache Daten?

Vielen Dank fürs Lesen

Liebe Grüße Thomas

Re: BluePy Raspberry 3 b+ und HM-10 (DSD Tech)

Verfasst: Sonntag 17. März 2019, 16:15
von __deets__
Die senden alle einfach Daten. Das fand ich am Anfang auch etwas verwirrend. Im Grunde ist jede Characteristic ein Wert, der einfach aus ein paar Bytes besteht. Es kommt jetzt auf den konkreten Service/die Characteristic an, *WAS* diese Bytes bedeuten. Ob sie zB einfach ein Blutdruckwert sind, der als 2-Byte-little-endian Wert zu interpretieren ist. Oder ein Strom von Daten, der einer seriellen Schnittstelle aehnelt. Beide wuerden dann zB eine Benachrichtigung schicken, wenn neue Daten da sind, und die forderst du dann an. Es gibt AFAIK keine Characteristic, die "einfach Daten" sendet im Sinne von "guck, hier serielle Schnittstelle" wie das mit dem SPP von BT classic noch so war.

Welche Characteristic die richtige ist, musst du also anhand deines Geraetes herausfinden. Die haben ueblicherweise Eigenschaften wie "READ", "NOTIFY", "WRITE" - daran sollte sich das festmachen lassen. Du kannst deinen Arduino einfach dauerhaft senden lassen, und dich mal fuer die verschiedenen Characteristiken anmelden, und schauen, wo die Werte rausfallen.

Re: BluePy Raspberry 3 b+ und HM-10 (DSD Tech)

Verfasst: Sonntag 17. März 2019, 16:46
von __deets__
Hier sind die Characteristiken dargestellt, und auch welche du lesen/schreiben kannst fuer den seriellen Transfer.

http://www.martyncurrey.com/hm-10-bluet ... cteristics

Re: BluePy Raspberry 3 b+ und HM-10 (DSD Tech)

Verfasst: Sonntag 17. März 2019, 19:22
von ThomasWenning
Im Grunde kann man alles was man über Bluetooth weiß (classic) für BLE vergessen. Ein völlig anderer Ansatz. Es wird sich wohl mit der Zeit zeigen, ob das besser ist oder nicht.
Dank deiner Hilfe konnte ich mit BLE-Scanner die zuständige UUID finden. 0xFFE1-... Der Nebel hat sich etwas aufgelöst. Vielen Dank!
Ich werde als Nächstes versuchen herauszufinden wie ich 0xFFE1... per Python auslesen kann.

Liebe Grüße Thomas