Vorwort:
Wir bei aconno nutzen BLE-Advertisements, um Sensordaten und andere Informationen an interessierte Zuhörer wie mobile Apps, Gateways und andere Empfänger zu senden.
Bevor Sie mit dem Lesen dieses Dokuments fortfahren, stellen Sie bitte sicher, dass Sie die Grundlagen der BLE-Werbung verstehen, indem Sie einige der verfügbaren Literatur lesen oder den Inhalt dieser Seiten studieren:
BLE-Werbefibel
BLE-Werbung – ein Einsteiger-Tutorial
Besorgen Sie sich außerdem einige BLE-Tools, die Ihnen die Rohdaten und die interpretierten Daten anzeigen.
Unsere Sensorics App ist ein guter Einstieg in dieses Thema: Google Play Link
Quellen: GitHub repository
Auch unser BLE Sniffer ist eine große Hilfe, um diese Daten zu lesen und zu verstehen.
Quellen: GitHub repository
Oder Sie verwenden einfach das gute alte NRF connect
Wie wir die BLE-Anzeige verwenden:
Die BLE-Anzeige hat 37 Bytes, von denen einige fest/reserviert sind und andere für uns frei nutzbar sind.
So kann eine Beispielanzeige aussehen.
0xA0 | 0xB1 | 0x55 | 0x21 | 0x45 | 0x09 | 0x07 | 0x09 | H | E | L | L | O |
Die ersten 6 Bytes sind für die MAC-Adresse reserviert (hier im Beispiel A0:B1:55:21:45:09). Dieser Teil der Anzeige ist der einzige Teil, der immer an der gleichen Stelle bleibt und die gleiche Größe hat. Nach dem MAC können Felder unterschiedlicher Art folgen. Jedes Feld beginnt mit einem Längenbyte und einem Typ.
Im obigen Beispiel sagt uns das 0x07, dass die nächsten 7 Bytes, einschließlich dieses einen Längenbytes, zusammengehören. Nach dem Längenbyte wird der Feldtyp angekündigt, in unserem Fall 0x09, der für den vollständigen Namen der Bake steht.
Beispiel für eine typische AcnSensa-Anzeige (nicht vollständig):
0xA0 | 0xB1 | 0x55 | 0x21 | 0x45 | 0x09 | 0x1F | 0xff | 0X59 | 0X00 | 0X69 | 0X08 | 0x80 | 0X00 | 0X01 | 0X10 | 0X01 | 0X21 | 0X22 | 0X11 |
Bei aconno verwenden wir das Feld namens Herstellerdaten (0xFF). Dies ist ein freier Block, bei dem die ersten beiden Bytes nach 0XFF für den HW-Hersteller, in diesem Fall Nordic, reserviert sind. Die folgenden Bytes beschreiben, um welches aconno-Produkt es sich handelt und welche Version der Firmware es hat.
Siehe die Tabelle für weitere Informationen:
Feldname | Größe | Beschreibung |
---|---|---|
MSD Größe | 1B | Größe |
MSD-ID | 1B | 0xFF |
Nordische ID | 2B | 0x5900 |
Aconno ID | 1B | 0x69 |
Produkt-ID | 1B | 0x08 |
Einstellungsunterstützung | 1b | 0b1 |
Versionsnummer | 7b | 0x0 |
Daten | Bis zu 24B | Daten |
Datenfeld:
Diese Anzeige enthält alle Daten für 3D-Werte (Kreisel, Beschleunigungsmesser und Magnetometer). Zusätzlich enthält diese Anzeige auch den Skalierungsfaktor für den Beschleunigungsmesser.
Feldname | Größe | Beschreibung |
---|---|---|
Werbung ID | 1B | 0x00 |
Gyroskop (X-Achse) | 2B | int16 Daten |
Gyroskop (Y-Achse) | 2B | int16 Daten |
Gyroskop (Z-Achse) | 2B | int16 Daten |
Beschleunigungsmesser (X-Achse) | 2B | int16 Daten |
Beschleunigungsmesser (Y-Achse) | 2B | int16 Daten |
Beschleunigungsmesser (Z-Achse) | 2B | int16 Daten |
Magnetometer (X-Achse) | 2B | int16 Daten |
Magnetometer (Y-Achse) | 2B | int16 Daten |
Magnetometer (Z-Achse) | 2B | int16 Daten |
Beschleunigungsmesser LSB-Wert | 2B | uint16 Daten |
Um das Anzeigenformat zwischen verschiedenen Geräten zu vereinheitlichen, haben wir ein Beschreibungsformat für diese Daten mit JSON definiert, das von Apps, Gateways und anderen gelesen und in sinnvolle Zahlen und Zeichen umgewandelt werden kann. Die sogenannten Deserializer definieren die Position, Länge und Reihenfolge der zu interpretierenden Bytes als Datentyp und den Namen dafür. Klingt kompliziert, oder?
Keine Sorge, hier ist ein Beispiel:
In diesem Ausschnitt einer aktuellen Deserialisierung sieht man, dass z.B. Gyroscope X ein SINT16 ist, ein zwei Byte signierter Integer, an der Position 6 und 7 (die 8 ist exklusiv) und umgekehrt (little endian->die 2 Bytes werden vertauscht). Außerdem ist eine Formel enthalten, die beschreibt, wie der Wert vor der Anzeige zu berechnen ist.
Hier ist eine Liste der verfügbaren Deserialisierer:













