Wie sende ich (einfache) Daten vom GATT-Client zum Server?

Ich habe eine Platine, die einen TI Bluetooth LE-Chip (CC2541) verwendet. Ich hoffe, einige einfache Wetterdaten vom Client (z. B. Telefon) selten (einmal pro Tag/Woche) an den Server (CC2541) zu senden. Muss dafür ein benutzerdefiniertes Profil implementiert werden? Könnte ein etabliertes Profil modifiziert werden, um die Daten zu handhaben, z. B. das Proximity-Profil, aber mit größeren Attributen?

Wenn jede Art von Daten ein Profil braucht, wirkt das ziemlich ungeschickt. Was ist der kanonische Ansatz zum Senden/Verarbeiten einfacher Datenströme?

Danke

Gibt es einen EE-Aspekt bei dieser Frage, den ich übersehen habe?
Ich versuche, die Firmwares sowohl für den Client als auch für den Server zu implementieren, also hoffe ich, einen Überblick über die Handhabung der Datenströme zu bekommen.

Antworten (2)

Der richtige Weg wäre, einen benutzerdefinierten Dienst zu verwenden, den Sie für Ihre spezifischen Daten erstellt haben, aber wenn dies nur für Ihren persönlichen Gebrauch ist, könnten Sie einen vorhandenen Dienst huckepack nehmen (wie in einem Beispielprojekt) und fügen Sie beliebige Eigenschaften für die Daten hinzu, wie Sie es für richtig halten.

Ein anderer Ansatz wäre, das klassische Serial Port Profile (SPP) zu emulieren, das im Grunde als virtuelle serielle Schnittstelle zwischen den beiden Geräten fungiert. Sie können sich also vorstellen, wie das mit einer einfachen ASCII-Übertragung der Wetterdaten funktionieren könnte. Es gibt einige Beispiele dafür im Internet, wenn Sie nach "BLE SPP" suchen. Bluegiga ( https://bluegiga.zendesk.com/attachments/token/rx8se3yhwe3tlnh/?name=BLE_Application_Note_SPP_over_BLE.pdf ) und andere BLE-Module haben dies über das Generic Attribute Profile (GATT) implementiert.

Link zu SPP: https://developer.bluetooth.org/TechnologyOverview/Pages/SPP.aspx

Ich denke jedoch, dass es effizienter wäre, einen benutzerdefinierten Dienst für die Wetterdaten zu erstellen, da Sie möglicherweise verschiedene Teile zu unterschiedlichen Zeiten lesen oder schreiben möchten und es einfacher wäre, die Daten zu verwalten. Sie könnten für jeden gewünschten Datenwert (z. B. Temperatur, Windgeschwindigkeit, Windrichtung, Luftfeuchtigkeit usw.) eine Eigenschaft für den Dienst haben, oder Sie könnten mehrere Dienste erstellen, die unterschiedliche Arten von Wetterdaten darstellen (z. B. einen Winddienst, der hat Geschwindigkeits- und Richtungseigenschaften und ein Temperaturdienst mit Strom-, Min- und Max-Eigenschaften usw.).

Danke. Sie haben ausdrücklich "für den persönlichen Gebrauch" erwähnt. Warum Huckepack nur für den persönlichen Gebrauch geeignet ist? Ist es der "richtige" Ansatz, ihm tatsächlich sowohl ein benutzerdefiniertes Profil als auch einen benutzerdefinierten Service zu geben?
Serial Port Profile (SPP) ist in der Bluetooth Classic-Spezifikation definiert. Bei Bluetooth Low Energy (BLE) gibt es so etwas nicht. Unter BLE werden alle Eigenschaften/Merkmale (ausgetauschte Daten) auf GAT/GATT-Ebene gehandhabt. Sie können jedoch selbst einen SSP emulieren.
Jose hat Recht, dass SPP kein Teil des GATT ist. Ich habe meine Antwort aktualisiert, um dies widerzuspiegeln.
Ich habe den persönlichen Gebrauch erwähnt, weil alle von Bluetooth SIG übernommenen vordefinierten Dienste nur für diesen Zweck verwendet werden sollten. Zum Beispiel habe ich ein Beispielprojekt verwendet, das den Herzfrequenzdienst verwendet, ich habe Eigenschaften hinzugefügt und Daten gesendet, die nichts mit einem Herzfrequenzsensor zu tun hatten, bis ich mit dem Prozess vertraut war und alles funktionierte. Ich habe es dann einfach in meinen eigenen benutzerdefinierten Dienst geändert. Andernfalls könnte ein Gerät oder eine laufende App die Werbung für den Herzfrequenzdienst gesehen und gedacht haben, es handele sich um einen Herzfrequenzsensor.

Wenn es keinen öffentlichen Dienst für Wetterdaten gibt, erstellen Sie einen privaten (benutzerdefinierten) Dienst. Das ist der kanonische Ansatz. Deshalb hat BLE private Dienste.

[ Ich bin in einer ähnlichen Situation wie das OP. Ich füge BLE zu einer Industriepumpe hinzu. Offensichtlich ist für eine Pumpe kein öffentlicher Dienst definiert. ]

Ich verstehe. Aber ist es ein benutzerdefinierter Service oder ein benutzerdefiniertes Profil, das benötigt wird?
Der Zollservice sollte ausreichen. Der Client kann einen Dienst ohne Profil erkennen. Ich habe das mit Android 4.3 getestet.
Oh, richtig. Ich wusste nicht, dass Profile optional sind.