CSV-Tabelle per BLE übertragen?

Gast #6082028
Lesenswert?

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?
#6082161
Lesenswert?

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.
#6082166
Lesenswert?

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...
#6082169
Lesenswert?

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
#6082233
Lesenswert?

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.
Gast #6082441
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren