Forum: Mikrocontroller und Digitale Elektronik BLE Tempsensor, stromsparendes Kommunikationsprotokoll


von Paul H. (powl)


Lesenswert?

Hi,

ich experimentiere zur Zeit an einem BLE-Funksensor, welcher über 
Energy-Harvesting autark aus einer Wärmequelle versorgt werden soll. 
Konkret kann ich innerhalb von 10min ca. 0.5-1J sammeln. Das sollte 
reichen um innerhalb dieser Zeit alle paar Sekunden eine 
Temperaturmessung durchzuführen und die Daten über BLE an eine 
entsprechende Empfangsstelle, ich nenne sie mal Master zu senden. 
Allerdings steige ich noch nicht so ganz durch, was unter Verwendung von 
BLE konkret ein geeigneter Kommunikationsablauf ist.

BLE kann ja Advertising-Pakete raussenden. Schon diese können Daten 
enthalten (31 bytes payload afaik, das würde reichen). Allerdings sind 
diese erst mal unverschlüsselt und von jedem Empfänger einsehbar sowie 
so ohne weiteres nicht einer bestimmen gesicherten Quelle zuordbar 
(sofern ich z.b. ganz viele dieser Funk-Sensoren betreibe, die auch noch 
alle gleich heißen. Oder haben die alle eine unique ID?).

Nachdem ein Advertising-Paket vom Master detektiert wurde kann sich 
dieses mit meinem BLE-Funksensor connecten. Nach dem Herstellen der 
Verbindung können dann Daten ausgetauscht werden. Hier steige ich aber 
noch nicht ganz durch, wie das mit den Protokollen/Services 
funktioniert. Was ich zuletzt gelesen habe sagt, BLE kann kein 
herkömmliches serielles Protokoll. Stattdessen wird das Protokoll von 
der Applikationsebene, d.h. meiner eigenen Software bestimmt, also 
eigentlich doch wieder einfach serielle Kommunikation. Dann gibts da 
allerdings noch GATT, d.h. irgendwie so eine Art Kommunikation mittels 
Austausch von Schlüssel-Werte-Paaren, was für mich ja eher unbrauchbar 
ist. Oder ist das auch nur ein Protokoll, Service, wie auch immer man es 
nennt, das jedes mal aufs neue von der Software, welche das BLE-device 
bedient, selbst zu Fuß implementiert wird? Eigentlich möchte ich am 
liebsten einfach nur schnell connecten, ein paar Daten seriell 
austauschen und schnell wieder disconnecten.

Oder macht es Sinn, die Connection über längere Zeit aufrecht zu 
erhalten und nur ab und zu Daten zu senden? Oder verbraucht schon das 
Aufrechterhalten der Connection dauerhaft viel Strom?

Kann ich eine Connection nur als Antwort auf ein Advertising-Paket 
etablieren? Kann also mein Master gar nicht selbst bestimmen, wann es 
Zeit wäre, Daten abzurufen, weil mein BLE-Funksensor gar nicht zuhört, 
wenn er nicht zuvor ein Advertising-Paket gesendet hat?

Wie lange hat mein Master denn überhaupt Zeit, nachdem der Funksensor 
ein Advertising-Paket gesendet hat, um sich zu connecten? Ich stelle mir 
das so vor, dass er das Advertising-Paket raushaut und dann ein paar 
...Millisekunden oder den Empfänger scharf schaltet um auf eingehende 
Connection-Anfragen reagieren zu können.

Wäre nett, wenn mich jemand aufklären könnte. Die häppchenweise 
verteilten Informationen im Internet sind ziemlich zäh verdaulich.

lg Paul

von Jim M. (turboj)


Lesenswert?

Paul H. schrieb:
> Oder haben die alle eine unique ID?

MAC Addresse haben alle BLE Geräte, und die wird beim Advertising mit 
gesendet.

Paul H. schrieb:
> Oder macht es Sinn, die Connection über längere Zeit aufrecht zu
> erhalten und nur ab und zu Daten zu senden?

Ja, denn das verbraucht deutlich weniger Strom.

Bei Advertising muss man beachten dass es ja 3 Frequenzbänder gibt und 
so 60% der Pakete nicht empfangen werden können - weil Sender und 
Empfänger absichlich nicht synchron sind.

Bei einer Connection kann man das "Connection Intervall" ziemlich lang 
machen, und der "Slave" darf optional auch Intervalle weglassen (Slave 
Latency).

Paul H. schrieb:
> Kann ich eine Connection nur als Antwort auf ein Advertising-Paket
> etablieren?

Ja, denn nur dann ist der Empfänger "scharf". Ansonsten ist der BTLE 
Empfänger zuwecks Stromsparen aus.

Paul H. schrieb:
> Oder verbraucht schon das
> Aufrechterhalten der Connection dauerhaft viel Strom?

Nö. Da man wengen oben genannter Beschränkung nicht beliebig tief in der 
Advertising Frequenz gehen kann (sollte), ist eine langsame Verbindung 
sogar deutlich stromsparender. Habe ich hier mal mit NRF51x Modulen 
gemessen.

Es gibt für BT LE Temperatursensoren ein vordefiniertes Protokoll - und 
sogar Beispielcode im NordicSemi SDK.

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Paul H. schrieb:
> Wie lange hat mein Master denn überhaupt Zeit, nachdem der Funksensor
> ein Advertising-Paket gesendet hat, um sich zu connecten? Ich stelle mir
> das so vor, dass er das Advertising-Paket raushaut und dann ein paar
> ...Millisekunden oder den Empfänger scharf schaltet um auf eingehende
> Connection-Anfragen reagieren zu können.

Das sind nur 150µs. In der Praxis läuft das dann so, dass Du dem BLE 
Stack sagst, er möge bitte mal nach Advertisments scannen und der 
liefert Dir dann, was er so findet. Dann pickst Du Dir eine Adresse raus 
und initierst einen Verbindungsaufbau. Dann scannt die Radio-Hardware 
ganz gezielt nach dieser einen Adresse und schickt sofort (150µs) nach 
dem Empfang einen Connection Request an das Device.

Neben den offensichtlichen Protokollparametern, wie Connection Interval 
und Slave Latency, bestimmt übrigens auch die Präzision der verwendeten 
Zeitgeber auf beiden Seiten, die benötigte Energie für eine Verbindung. 
Beim Verbindungsaufbau erhält das Peripheral die Präzision des 
Zeitgebers der Gegenseite, kombiniert dies mit der eigenen Präzision und 
berechnet daraus die Größe des Zeitfensters, in dem das Peripheral das 
Radio aktiv haben muss.

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.