Forum: Mikrocontroller und Digitale Elektronik CSV-Tabelle per BLE übertragen?


von Zonk (Gast)


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?

von Harry L. (mysth)


Lesenswert?

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.

von Dirk B. (dirkb2)


Lesenswert?

BLE begrenzt erstmal auf 20 Byte.

Also ist die Frage, wie man mit „BLE more than 20 Bytes“ sendet.

von npn (Gast)


Lesenswert?

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.

von Dirk B. (dirkb2)


Lesenswert?

npn schrieb:
> Bau ein Protokoll drumherum, dann kannst du unbegrenzte Anzahl
> übertragen.

das LE begrenzt die Sendezeit.  Beliebig lange darf man nicht senden.

von Harry L. (mysth)


Lesenswert?

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?

von Sven B. (scummos)


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.

von Sebastian S. (amateur)


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...

von Frank K. (fchk)


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

von Dirk B. (dirkb2)


Lesenswert?

Du kannst auch WLAN nehmen. Das braucht zwar mehr Strom, ist aber 
deutlich schneller. Dadurch gleicht sich das wieder aus.

von Flip B. (frickelfreak)


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.

von Zonk (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.