Aus Raspberry Pi Geek 06/2022

Den BME688 ausreizen

© Devilpup, Fotolia

Guter Riecher

Bernhard Bablok

Mit etwas Geschick reizen Sie den Luftqualitätssensor BME688 über das bloße Messen von Temperatur, Luftdruck- und Feuchte hinaus aus.

Umweltsensoren erfreuen sich großer Beliebtheit, es gibt sie in allen Preisklassen. Die meisten messen allerdings nur ein oder zwei Parameter, typischerweise Temperatur und Luftfeuchte oder Temperatur und Luftdruck. Der Bosch Sensortec BME688 (Abbildung 1) liefert dagegen wie schon sein Vorgänger BME680 gleich vier Sensorwerte: Temperatur, Luftfeuchte, Luftdruck und “Luftqualität” – allerdings zu einem nicht geringen Aufpreis.

Abbildung 1: Der BME688-Sensor, fertig montiert auf einem Breadboard im Verbund mit dem RasPi Pico.

Abbildung 1: Der BME688-Sensor, fertig montiert auf einem Breadboard im Verbund mit dem RasPi Pico.

“Luftqualität” steht hier in Anführungszeichen, weil der Sensor einen Widerstandswert ausgibt, der von verschiedenen Parametern abhängt und dessen Interpretation schwerfällt. Zum Messen heizt eine integrierte Metallplatte die Luft kurzzeitig auf und registriert den Widerstand des Gases. Aus diesem Grund bleiben bei der Messung auch stabile Gase wie Stickstoff oder CO2 außen vor, denn diese reagieren nicht. Echte CO2-Sensoren kosten allerdings das Vier- bis Fünffache des BME688. Der Kasten “Alternativen zum BME688” gibt einen Überblick über Chips für solche und ähnliche Anwendungszwecke.

Alternativen zum BME688

Am unteren Ende der Preis- und Leistungsskala liegen Chips wie der LM75A – nicht sehr genau, aber günstig und mit dem SOP-8 Format für das SMD-Selbstlöten geeignet. Breakouts gibt es ab 3,50 Euro, den Chip selbst je nach Menge deutlich billiger. Der Baustein misst nur die Temperatur und gibt diese via I2C aus. Er eignet sich perfekt für Anwendungsfälle, in denen das Über- oder Unterschreiten einer Grenztemperatur Alarm auslösen soll.

Noch immer weitverbreitet, aber nicht mehr empfehlenswert sind die Sensoren DHT11 und DHT22. Sie arbeiten zu ungenau, ohne preisliche Vorteile gegenüber neueren Chips mitzubringen (DHT11: 5 Stück 11 Euro, DHT22: etwa 8 Euro). Gerade den DHT22 gibt es oft in Verbindung mit dem ESP-01 zum selben Preis, beide zusammen bilden einen einfachen Remote-Sensor.

Als günstiger und besserer Nachfolger des DHT22 gilt der AM2320 (3 Euro) mit sehr ähnlichem äußeren Aufbau und Abmessungen. Er misst Temperatur und Luftfeuchte ebenso gut wie die Bosch-Sensoren, lässt sich aber über die I2C-Schnittstelle aber deutlich einfacher in Betrieb nehmen. Allerdings gibt es für diesen Chip noch keine Standardbibliotheken.

Wer außer Temperatur auch den Luftdruck messen möchte, kommt früher oder später mit den beliebten Sensoren von Bosch Sensortec in Berührung. Der BMP280 (ca. 4 Euro) misst beide Werte. Der BME280 (ab 7 Euro) bietet zusätzlich noch das Messen der Luftfeuchtigkeit an und erweist sich damit als nützlicher, wenn auch nicht ganz billiger Allrounder. Achten Sie beim Kauf aber darauf, den richtigen Sensor zu kaufen, denn rein äusserlich unterscheiden sich beide nicht. Windige Verkäufer drehen daher gern arglosen Kunden den BMP280 statt dem BME280 an. Am oberen Ende der BM-Reihe sitzen der BME680 und der BME688. Warum der BME680 noch zum Verkauf steht, bleibt ein Rätsel, denn er leistet weniger als der BME688, ist aber sogar etwas teurer.

Alle hier erwähnten Sensoren gibt es auch als Breakouts. Die billigen Versionen kommen mit Pins im Standardraster von 2,54 Millimeter, es gibt aber auch teurere Varianten mit Stemma/Qt- oder Grove-Anschlüssen. Nicht alle Sensoren vertragen 5 Volt, besonders luxuriöse Breakouts sorgen deshalb selbständig für das Level-Shifting. Auf dem Markt finden sich noch viele weitere Sensoren, die meisten aber ohne Maker-freundliches Breakout. Den absoluten Spitzensensor gibt es sowieso nicht, selbst identische Sensoren zeigen bei Parallelmessungen Abweichungen jenseits der in den Datenblättern versprochenen Genauigkeit.

Hardware

Die nächsten Abschnitte zeigen, wie Sie einen Raspberry Pi Pico im Zusammenspiel mit dem BME688 zu einer Schnüffelnase umfunktionieren. Im Prinzip funktioniert das Breakout dank der I2C-Schnittstelle aber mit jedem anderen Mikrocontroller und Kleinrechner. Der Sensor liefert über I2C jedoch nur Rohwerte, die der Host aufwendig mit Korrekturwerten aus diversen Sensorregistern umrechnen muss (Abbildung 2). Diese komplexen 32-Bit-Operationen sprengen insbesondere die Programmspeicher von kleinen 8-Bit-MCUs. Dem RasPi Pico bereiten sie aber keine Probleme.

Abbildung 2: Berechnung der Sensorwerte. Das Bild zeigt nur Ausschnitte, die Formeln für den Luftdruck füllen eine ganze Seite.

Abbildung 2: Berechnung der Sensorwerte. Das Bild zeigt nur Ausschnitte, die Formeln für den Luftdruck füllen eine ganze Seite.

Der RasPi selbst eignet sich nicht als Host für Temperatursensoren, denn schon ohne Last produziert seine CPU soviel Abwärme, dass diese die Temperaturmessungen auf Dauer verfälscht. Metall leitet bekanntlich gut Wärme, die über die I2C-Verbindung dann irgendwann beim Sensor ankommt.

Da hier aber das Messen des Gassensors im Mittelpunkt steht, belassen wir den Pico per USB-Kabel an einem RasPi Zero. Das Programm für den Pico gibt die Daten einfach mit printf() auf der seriellen USB-Schnittstelle aus, der Zero dient als Datenlogger. Wie das elegant und ohne viel Aufwand auch kontaktlos per Bluetooth funktioniert, erfahren Sie in der kommenden Ausgabe des Raspberry Pi Geek.

Programme und Bibliotheken

Das Pico-Programm für den Sensor setzt auf die offizielle Bosch-API auf [2]. Die Details unterscheiden sich nicht wesentlich von dem im Workshop [3] zur Pico-Programmierung [4] gezeigtem Vorgehen [5]. Dabei ging es ebenfalls um einen Bosch-Sensor (BME280 beziehungsweise BMP280). Sie finden diese Artikel auch im Download-Bereich zu diesem Beitrag.

Der einzige Unterschied besteht darin, dass sich der Code auf mehrere Projekte aufteilt. So erstellt das Projekt pico-bme688 [6] die Pico-spezifische Schnittstellenbibliothek, während pico-bme688-scan [7] das eigentliche Anwendungsprogramm enthält. Nach demselben Schema gibt es vom Autor noch weitere Repos, die den BME688 nutzen. Für eigene Projekte lässt sich das Scan-Projekt als Vorlage nutzen.

Als Anwender und Programmierer müssen Sie sich aber nicht um die Details kümmern, Sie klonen einfach das Scanprogramm und initialisieren die Subprojekte (Listing 1). Das kopiert diese dann automatisch mit der Bibliothek und der Bosch-API auf die heimische Platte. Das Vorgehen für die Kompilation und Installation beschreibt der Beitrag “Durchstarten” aus RPG 11-12/2021 [4].

Listing 1

Projekt initialisieren

$ git clone https://github.com/bablokb/pico-bme688-scan.git
$ git submodule update --init --recursive

Betriebsmodi

Der BME688 unterstützt die vier Betriebsmodi Sleep, Forced, Parallel und Sequential. Letzterer schaffte es immer noch nicht in das Datenblatt des Sensors. Der Sleep-Modus versetzt den Sensor in einen Zustand mit niedriger Energieaufnahme. Beim Forced-Modus macht er eine Messung und wechselt danach automatisch wieder in den Tiefschlaf.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 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