Ein Heizprofil im Sequential Mode durchlaufen
Was dieses Beispiel zeigt
Im Sequential Mode durchläuft der Sensor ein Heizprofil selbstständig und schläft zwischen den Messungen. Das Beispiel legt ein Profil mit zehn Schritten fest (Heizertemperaturen von 100 bis 320 °C, je 150 ms) und eine Pause von 250 ms zwischen den Schritten. Anschließend gibt es jede neue Messung zusammen mit dem Profilschritt aus, bei dem sie gemessen wurde.
Das Beispiel erzeugt den Sensor mit BME690(), daher verwendet es auf den Ports esp32 und esp8266
I2C(0) mit SDA an Pin 21 und SCL an Pin 22, unter der Adresse
0x76.
Der Beispielcode
# FILE: bme690-sequentialMode.py
# AUTHOR: Josip Simun Kuci @ Soldered
# BRIEF: Run the BME690 in sequential mode, where the sensor steps through a
# heater profile on its own, sleeping between the measurements
# WORKS WITH: BME690 breakout board: solde.red/333411
# LAST UPDATED: 2026-09-16
from bme690 import (
BME690,
BME69X_ERROR,
BME69X_ODR_250_MS,
BME69X_SEQUENTIAL_MODE,
)
import time
# Heater temperature profile in degrees Celsius.
HEATER_TEMP = [320, 100, 100, 100, 200, 200, 200, 320, 320, 320]
# Heating duration profile in milliseconds.
HEATER_DUR = [150, 150, 150, 150, 150, 150, 150, 150, 150, 150]
sensor = BME690()
sensor.set_tph()
# Sleep duration between two measurements of the profile.
sensor.set_seq_sleep(BME69X_ODR_250_MS)
sensor.set_heater_prof(HEATER_TEMP, HEATER_DUR)
sensor.set_op_mode(BME69X_SEQUENTIAL_MODE)
if sensor.check_status() == BME69X_ERROR:
raise Exception("BME690 setup failed: " + sensor.status_string())
print(
"Timestamp(ms), Temperature(C), Pressure(Pa), Humidity(%), "
"Gas resistance(Ohm), Status, Gas index"
)
while True:
if sensor.fetch_data():
fields_left = 1
while fields_left:
data, fields_left = sensor.get_data()
print(
"{}, {:.2f}, {:.2f}, {:.2f}, {:.2f}, 0x{:02x}, {}".format(
time.ticks_ms(),
data.temperature,
data.pressure,
data.humidity,
data.gas_resistance,
data.status,
data.gas_index,
)
)
time.sleep_ms(100)
🔗Vollständiges Beispiel öffnen
Examples/bme690-sequentialMode.py im Commit 91a07b5
Erwartetes Ergebnis:
Timestamp(ms), Temperature(C), Pressure(Pa), Humidity(%), Gas resistance(Ohm), Status, Gas index
Jedes neue Datenfeld gibt dann eine Zeile aus: den Millisekundenzähler, die Temperatur in °C,
den Druck in Pa, die Luftfeuchtigkeit in % r.F. und den Gaswiderstand in Ω (jeweils mit zwei
Nachkommastellen), das Statusbyte in Hexadezimalschreibweise und den Heizprofilschritt von 0 bis 9.
0xb0 im Status bedeutet neue Daten, eine gültige Gasmessung und einen stabilen
Heizer.
Verwendete Funktionen
BME690(i2c=None, address=BME69X_I2C_ADDR_LOW, amb_temp=25)returns BME690Erzeugt das Sensorobjekt. Es setzt den Sensor per Soft-Reset zurück, prüft seine Chip-ID (0x61) und liest die Kalibrierdaten aus. Es löst eine Exception aus, wenn der Sensor nicht antwortet oder sich ein anderer Chip unter der Adresse befindet; jede andere Funktion hält ihr Ergebnis im Status fest, statt eine Exception auszulösen.
ReturnsDas Sensorobjekt.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
I2C | i2c | Ein fertiges machine.I2C-Objekt. Wird es weggelassen, öffnet das Modul auf den Ports esp32 und esp8266 sowie mit der Firmware eines Soldered-Boards I2C(0) mit SCL an Pin 22 und SDA an Pin 21, auf jedem anderen Port löst es eine Exception aus. |
int | address | Die I2C-Adresse: BME69X_I2C_ADDR_LOW (0x76, der Standardwert) oder BME69X_I2C_ADDR_HIGH (0x77). |
int | amb_temp | Umgebungstemperatur in °C, mit der die Heizereinstellung berechnet wird. Standardmäßig 25. |
sensor.set_tph(os_temp=BME69X_OS_2X, os_pres=BME69X_OS_16X, os_hum=BME69X_OS_1X)returns NoneLegt das Oversampling für Temperatur, Druck und Luftfeuchtigkeit fest. Ohne Argumente aufgerufen, wie hier, setzt es die Standardwerte der Arduino-Bibliothek.
ReturnsNichts. Das Ergebnis steht im Status.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
int | os_temp | Oversampling der Temperatur, BME69X_OS_NONE bis BME69X_OS_16X. |
int | os_pres | Oversampling des Drucks, BME69X_OS_NONE bis BME69X_OS_16X. |
int | os_hum | Oversampling der Luftfeuchtigkeit, BME69X_OS_NONE bis BME69X_OS_16X. |
sensor.set_seq_sleep(odr=BME69X_ODR_0_59_MS)returns NoneLegt fest, wie lange der Sensor im Sequential Mode zwischen zwei Messungen schläft.
ReturnsNichts. Das Ergebnis steht im Status.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
int | odr | BME69X_ODR_0_59_MS, BME69X_ODR_10_MS, BME69X_ODR_20_MS, BME69X_ODR_62_5_MS, BME69X_ODR_125_MS, BME69X_ODR_250_MS, BME69X_ODR_500_MS, BME69X_ODR_1000_MS oder BME69X_ODR_NONE. Das Beispiel verwendet BME69X_ODR_250_MS. |
sensor.set_heater_prof(temp, dur, shared_heatr_dur=None)returns NoneLegt das Heizprofil des Gassensors fest und schaltet den Heizer ein. Mit einer Liste von Temperaturen und einer Liste von Dauern und ohne gemeinsame Dauer, wie hier, schreibt es ein Profil für den Sequential Mode, einen Schritt pro Listeneintrag. Temperaturen über 400 °C werden auf 400 °C begrenzt.
ReturnsNichts. Das Ergebnis steht im Status.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
list | temp | Heizertemperatur jedes Schritts in °C. Das Beispiel verwendet HEATER_TEMP. |
list | dur | Heizdauer jedes Schritts in ms. Das Beispiel verwendet HEATER_DUR. |
int | shared_heatr_dur | Nur im Parallel Mode; im Sequential Mode weglassen. |
sensor.set_op_mode(op_mode)returns NoneVersetzt den Sensor in den Schlafmodus und setzt dann den gewünschten Modus. Mit BME69X_SEQUENTIAL_MODE beginnt der Sensor, das Profil selbstständig abzuarbeiten. Der Modus wird für fetch_data() und get_data() gespeichert.
ReturnsNichts. Das Ergebnis steht im Status.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
int | op_mode | BME69X_SLEEP_MODE, BME69X_FORCED_MODE, BME69X_PARALLEL_MODE oder BME69X_SEQUENTIAL_MODE. |
sensor.check_status()returns intFasst den Status zusammen, den die zuletzt aufgerufene Funktion hinterlassen hat.
ReturnsBME69X_ERROR (-1) nach einem Fehler, BME69X_WARNING (1) nach einer Warnung, sonst BME69X_OK (0).
sensor.status_string()returns strBeschreibt den aktuellen Statuscode in wenigen Worten, etwa Communication failure oder No new data.
ReturnsDie Beschreibung, ein leerer String, wenn der Status OK ist.
sensor.fetch_data()returns intLiest die drei Ergebnisfelder des Sensors in den Puffer des Moduls und sortiert sie so, dass die älteste neue Messung zuerst kommt. Ist nichts Neues vorhanden, lautet der Status No new data.
ReturnsDie Anzahl der neuen Datenfelder, 0, wenn es keine gibt.
sensor.get_data()returns tupleGibt das nächste neue Feld aus dem Puffer als BME690Data-Objekt zurück, mit temperature (°C), pressure (Pa), humidity (% r.F.), gas_resistance (Ω), status, gas_index (der Profilschritt) und meas_index.
Returns(data, fields_left): das BME690Data-Objekt oder None, wenn es keine neuen Daten gibt, sowie die Anzahl der neuen Felder, die nach diesem noch übrig sind.
Alles zusammen
Nach set_tph(), set_seq_sleep() und set_heater_prof() lässt der Aufruf
set_op_mode(BME69X_SEQUENTIAL_MODE) den Sensor das Profil selbstständig durchlaufen. Alle 100 ms fragt die Schleife mit fetch_data() nach neuen Feldern und
liest sie mit get_data() einzeln aus, bis fields_left den Wert 0 erreicht. Die
Spalte gas_index zeigt, bei welchem der zehn Heizschritte eine Zeile gemessen wurde.