Ich habe eine ESP32-Applikation, welche aktuell Temperatur, Feuchtigkeit
und ein paar andere Daten einzeln per Bluetooth LE überträgt. Dabei
handelt es sich immer nur um den aktuell gemessenen Wert, das
funktioniert problemlos.
Jetzt würde ich auch gerne gespeicherte Messreihen übertragen, am Besten
im CSV-Format, von mir aber auch in was anderem, passenden. Allerdings
kann ich nirgends im BLE-Standard irgendwas entdecken, was sich eignet,
um Daten zu übertragen, die größer als ein paar Bytes sind.
Deswegen: wie kann ich diese Datenreihen per BLE übertragen?
Zonk schrieb:> Jetzt würde ich auch gerne gespeicherte Messreihen übertragen, am Besten> im CSV-Format, von mir aber auch in was anderem, passenden. Allerdings> kann ich nirgends im BLE-Standard irgendwas entdecken, was sich eignet,
Das hat auch rein gar nix mit dem BLE-Standard zu tun.
Dirk B. schrieb:> BLE begrenzt erstmal auf 20 Byte.>> Also ist die Frage, wie man mit „BLE more than 20 Bytes“ sendet.
Bau ein Protokoll drumherum, dann kannst du unbegrenzte Anzahl
übertragen.
npn schrieb:> Bau ein Protokoll drumherum, dann kannst du unbegrenzte Anzahl> übertragen.
das LE begrenzt die Sendezeit. Beliebig lange darf man nicht senden.
Dirk B. schrieb:> npn schrieb:>> Bau ein Protokoll drumherum, dann kannst du unbegrenzte Anzahl>> übertragen.>> das LE begrenzt die Sendezeit. Beliebig lange darf man nicht senden.
Was genau hast du an "Protokoll" nicht verstanden?
CSV ist ungeeignet zur Datenübertragung, weil du ja deine Messdaten im
Dezimalformat in einem Zeichensatz wie Unicode darstellst und dann
kodierst. Aus dem Byte "129" werden dann 3 Byte. Das ist nicht
effiziezt.
Du kannst dir ja mal überlegen, ob eine "Zeile" deiner Daten mehr als 20
Byte hat. Vielleicht passen die da ja schon rein, wenn du sie geschickt
kodierst.
Am einfachsten Du zerlegst Dein Datenpaket in Häppchen von jeweils 18
oder 19 Bytes.
Das erste Byte enthält die Anzahl an gültigen Bytes (0 ... 18/19)
Das zweite könnte eine Prüfsumme beinhalten.
Dann so oft Pakete senden, bis Dir die Daten ausgehen.
Ob Dauersenden allerdings das Gelbe vom Ei ist, wenn Du BLE verwendest,
ist eine andere Sache.
Sollen nur ASCII-Zeichen verschickt werden, so kannst Du Dir u.U. auch
das Feld mit der Länge sparen und einfach das Letze Paket mit ungültigen
Zeichen auffüllen. Z.B. '\0' was die C-Sprachler bevorzugen würden. So
weiß der Empfänger, wann der seine Sachen packen kann und nachhause
gehen kann.
Oder so...
Zonk schrieb:> Ich habe eine ESP32-Applikation, welche aktuell Temperatur, Feuchtigkeit> und ein paar andere Daten einzeln per Bluetooth LE überträgt. Dabei> handelt es sich immer nur um den aktuell gemessenen Wert, das> funktioniert problemlos.>> Jetzt würde ich auch gerne gespeicherte Messreihen übertragen, am Besten> im CSV-Format, von mir aber auch in was anderem, passenden. Allerdings> kann ich nirgends im BLE-Standard irgendwas entdecken, was sich eignet,> um Daten zu übertragen, die größer als ein paar Bytes sind.>> Deswegen: wie kann ich diese Datenreihen per BLE übertragen?
Wenn Du einen Wert übertragen kannst, kannst Du das ja auch mehrmals
machen. Schick einfach immer einen Zeitstempel (z.B. als time_t) mit,
dann kannst Du die einzelnen Werte zeitlich zuordnen.
fchk
Optimal für ble ist zuerst mal, die MTU auf 517 byte hochzustellen. Das
müssen beide geräte unterstützen. Neben der verminderung der datenmenge
(ohne zu viel overhead und ineffizientes encoding) lassen sich die daten
in mehrere pakete aufteilen, von denen idealerweise bis zu 6 je
connection interval senden lassen.
Das mit dem separaten Protokoll ist grundsätzlich eine gute Idee,
allerdings möchte ich mir auf der Empfängerseite jetzt keine eigene App
basteln müssen. Deswegen ja auch die Idee mit dem CSV-Format:
- ich empfange die Messdaten mit z.B. nRF (oder einer anderen geeigneten
App)
- ich speichere die Daten und öffne sie dann mit einer anderen App, die
mir die CSV-Daten als Graph darstellte
In beiden Fällen kann ich auf fertige und frei verfügbare Apps
zurückgreifen und muss mir nicht selber noch was zusammenbauen.