Den Vorteil von UART dagegen zeigt die Abbildung 5. Adafruits App kann UART-Daten im CSV-Format auslesen, ohne die Details der Daten zu kennen; bei der Darstellung haben Sie die Wahl zwischen einer Textausgabe oder einem Plot. Für die BME280-Sensordaten eignet sich der gemeinsame Plot allerdings nicht wirklich. Die Werte für Temperatur, Luftfeuchte (zweistelliger Bereich) und Druck (vierstellig) liegen so weit auseinander, dass Details verloren gehen. Bei geeigneten Daten erweist sich die schnelle Visualisierung der Messwerte mittels UART-Plot aber als sehr nützlich.
Broadcasts
Eine besondere Art von Advertisements sind Broadcasts. Hier schickt das Peripheriegerät mit dem Advertisement gleich Nutzdaten mit. Andere Geräte müssen also gar nicht erst eine Verbindung aufbauen. Broadcasts sind die einzige Art, Daten von einem Gerät an viele andere zu senden.
Beliebt sind diese Broadcasts in der Indoor-Navigation mittels sogenannter Beacons oder in Museen. Hier enthält das Advertisement typischerweise eine URL zu einer Webseite, die ein Exponat näher erläutert. Ist der Sender in Bildnähe und funkt mit schwacher Leistung, empfangen passende Apps nur relevante Informationen.
In unserem Fall dient wieder das Setup mit Mikrocontroller und BME280-Sensor als Anwendungsbeispiel, Listing 4 zeigt die zugehörige Implementation. Auch dieses Programm einschließlich des passenden Clients, der die Daten ausliest, finden Sie im Projekt-Repository [6].
Listing 4
Advertisement mit Daten
import time
import board
from adafruit_bme280 import advanced as adafruit_bme280
import adafruit_ble_broadcastnet
print("This is BroadcastNet sensor:", adafruit_ble_broadcastnet.device_address)
i2c = board.I2C()
#BME280 sensor:
bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c,address=0x76)
[...]
while True:
measurement = adafruit_ble_broadcastnet.AdafruitSensorMeasurement()
measurement.temperature = bme280.temperature
measurement.relative_humidity = bme280.humidity
measurement.pressure = bme280.pressure/alt_fac
print(measurement)
adafruit_ble_broadcastnet.broadcast(measurement)
time.sleep(10)
Die Klasse AdafruitSensorMeasurement, eine Unterklasse von Advertisement, hat eine Reihe von vordefinierten Feldern, die das Programm mit den Messwerten des BME280 füllt (Zeilen 11 bis 14). Hinter dem Befehl aus Zeile 16 versteckt sich letztlich das Aussenden des Advertisements.
Beliebige andere Geräte können das Advertisement per Scan empfangen und die Daten extrahieren, sofern sie die interne Struktur kennen. Falls die Felder der Klasse AdafruitSensorMeasurement für Ihre eigenen Projekte nicht passen, dann kopieren Sie einfach die Klasse und passen Sie für Ihre Bedürfnisse an. Das klappt auch, wenn man nicht alle Details versteht.
Fazit
Bluetooth Low Energy eignet sich ideal für das Vernetzen von batteriegestützten Sensoren. Das Datenblatt für den kombinierten Bluetooth- und Wi-Fi-Chip CYW43439 auf dem neuen Raspberry Pi Pico W gibt zum Beispiel für BLE einen um den Faktor 1000 geringeren Energieverbrauch an als für WLAN (TX: 234 bis 351 µA versus 270 bis 320 mA).
Solange BLE auf dem Chip aber noch nicht freigeschaltet ist, müssen Sie zu anderen Mikrocontrollern greifen. Ganz so günstig wie beim Pico W kommen Sie dabei nicht weg, aber mit gut 10 Euro für den oben erwähnten XIAO nRF5280 bleibt BLE trotzdem erschwinglich. Da Smartphones den Funkstandard auch beherrschen, gibt es aber auch noch andere nette Projektideen. So könnte etwa der Raspberry Pi eine Anwendung nur dann freigeben, wenn ein bestimmtes Smartphone in der Nähe ist. (jlu)
Der Autor
Bernhard Bablok arbeitet bei der Allianz Technology SE als SAP-HR Entwickler. Wenn er nicht gerade Musik hört oder mit dem Rad respektive zu Fuß unterwegs ist, beschäftigt er sich mit Themen rund um Linux, Programmierung und Kleincomputer. Sie erreichen ihn unter mailto:[email protected].
Glossar
- Bluetooth SIG
-
Bluetooth Special Interest Group. Interessengemeinschaft von mehr als 30 000 Unternehmen zur Entwicklung und Verbreitung der Bluetooth-Technologie.
Infos
- Bluetooth-Kommunikation: Bernhard Bablok, “Kommunikationsfreudig”, RPG 08/2022, S. 40, https://www.raspi-geek.de/47207
- Bluetooth Low Energy Primer: https://www.bluetooth.com/bluetooth-resources/the-bluetooth-low-energy-primer/
- Offizielle UUIDs für standardisierte Profile und Services: https://btprodspecificationrefs.blob.core.windows.net/assigned-values/16-bit%20UUID%20Numbers%20Document.pdf
- Bleak: https://github.com/hbldh/bleak
- Entwicklerbereich bei Nordic Semiconductor: https://devzone.nordicsemi.com/
- Github-Repository zum Artikel: https://github.com/bablokb/ble-playground






