Aus Raspberry Pi Geek 11/2022

Bluetooth Low Energy für den Raspberry Pi (Seite 3)

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.

Abbildung 5: Die UART-Ausgabe als Plot mit Bluefruit LE Connect.

Abbildung 5: Die UART-Ausgabe als Plot mit Bluefruit LE Connect.

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

  1. Bluetooth-Kommunikation: Bernhard Bablok, “Kommunikationsfreudig”, RPG 08/2022, S. 40, https://www.raspi-geek.de/47207
  2. Bluetooth Low Energy Primer: https://www.bluetooth.com/bluetooth-resources/the-bluetooth-low-energy-primer/
  3. Offizielle UUIDs für standardisierte Profile und Services: https://btprodspecificationrefs.blob.core.windows.net/assigned-values/16-bit%20UUID%20Numbers%20Document.pdf
  4. Bleak: https://github.com/hbldh/bleak
  5. Entwicklerbereich bei Nordic Semiconductor: https://devzone.nordicsemi.com/
  6. Github-Repository zum Artikel: https://github.com/bablokb/ble-playground
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben