Skip to main content

Prolazak kroz profil grijača u sekvencijalnom načinu rada

Što ovaj primjer prikazuje​

U sekvencijalnom načinu rada senzor sam prolazi kroz profil grijača i spava između mjerenja. Primjer postavlja profil od deset koraka (temperature grijača od 100 do 320 °C, po 150 ms) i spavanje od 250 ms između koraka. Zatim ispisuje svako novo mjerenje zajedno s korakom profila u kojem je izmjereno.

Primjer stvara senzor pomoću BME690(), pa na portovima esp32 i esp8266 koristi I2C(0) sa SDA na pinu 21 i SCL na pinu 22, na adresi 0x76.

Kod primjera​

# 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)

🔗Otvorite cijeli primjer

Examples/bme690-sequentialMode.py u commitu 91a07b5

→

Očekivani rezultat:

ShellMicroPython
Timestamp(ms), Temperature(C), Pressure(Pa), Humidity(%), Gas resistance(Ohm), Status, Gas index

Svako novo polje zatim ispisuje jedan redak: brojač milisekundi, temperaturu u °C, tlak u Pa, vlažnost u % r.H. i otpor plina u Ω (svako na dvije decimale), statusni bajt u heksadecimalnom zapisu i korak profila grijača, od 0 do 9. 0xb0 u statusu znači nove podatke, valjano mjerenje plina i stabilan grijač.

Korištene funkcije​

BME690(i2c=None, address=BME69X_I2C_ADDR_LOW, amb_temp=25)returns BME690

Stvara objekt senzora. Softverski resetira senzor, provjerava ID čipa (0x61) i čita podatke za kalibraciju. Javlja iznimku ako senzor ne odgovara ili je na toj adresi drugi čip; sve ostale funkcije svoj rezultat bilježe u status umjesto da javljaju iznimku.

ReturnsObjekt senzora.

Parametri

TipNazivOpis
I2Ci2cSpreman objekt machine.I2C. Ako se izostavi, modul otvara I2C(0) sa SCL na pinu 22 i SDA na pinu 21 na portovima esp32 i esp8266 te na jednom firmveru Soldered pločice, a na bilo kojem drugom portu javlja iznimku.
intaddressI2C adresa: BME69X_I2C_ADDR_LOW (0x76, zadano) ili BME69X_I2C_ADDR_HIGH (0x77).
intamb_tempTemperatura okoline u °C, koristi se za izračun postavke grijača. Zadano je 25.
sensor.set_tph(os_temp=BME69X_OS_2X, os_pres=BME69X_OS_16X, os_hum=BME69X_OS_1X)returns None

Postavlja naduzorkovanje za temperaturu, tlak i vlažnost. Pozvana bez argumenata, kao ovdje, postavlja zadane vrijednosti Arduino biblioteke.

ReturnsNišta. Rezultat je u statusu.

Parametri

TipNazivOpis
intos_tempNaduzorkovanje temperature, od BME69X_OS_NONE do BME69X_OS_16X.
intos_presNaduzorkovanje tlaka, od BME69X_OS_NONE do BME69X_OS_16X.
intos_humNaduzorkovanje vlažnosti, od BME69X_OS_NONE do BME69X_OS_16X.
sensor.set_seq_sleep(odr=BME69X_ODR_0_59_MS)returns None

Postavlja koliko dugo senzor spava između dva mjerenja u sekvencijalnom načinu rada.

ReturnsNišta. Rezultat je u statusu.

Parametri

TipNazivOpis
intodrBME69X_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 ili BME69X_ODR_NONE. Primjer koristi BME69X_ODR_250_MS.
sensor.set_heater_prof(temp, dur, shared_heatr_dur=None)returns None

Postavlja profil grijača plina i uključuje grijač. S popisom temperatura i popisom trajanja te bez zajedničkog trajanja, kao ovdje, zapisuje profil za sekvencijalni način rada, jedan korak za svaki unos popisa. Temperature iznad 400 °C ograničavaju se na 400 °C.

ReturnsNišta. Rezultat je u statusu.

Parametri

TipNazivOpis
listtempTemperatura grijača svakog koraka u °C. Primjer koristi HEATER_TEMP.
listdurTrajanje zagrijavanja svakog koraka u ms. Primjer koristi HEATER_DUR.
intshared_heatr_durSamo za paralelni način rada; u sekvencijalnom načinu rada izostavite ga.
sensor.set_op_mode(op_mode)returns None

Stavlja senzor u stanje spavanja, a zatim postavlja traženi način rada. S BME69X_SEQUENTIAL_MODE senzor sam počinje prolaziti kroz profil. Način rada se pamti za fetch_data() i get_data().

ReturnsNišta. Rezultat je u statusu.

Parametri

TipNazivOpis
intop_modeBME69X_SLEEP_MODE, BME69X_FORCED_MODE, BME69X_PARALLEL_MODE ili BME69X_SEQUENTIAL_MODE.
sensor.check_status()returns int

Sažima status koji je ostavila zadnja funkcija.

ReturnsBME69X_ERROR (-1) nakon pogreške, BME69X_WARNING (1) nakon upozorenja, inače BME69X_OK (0).

sensor.status_string()returns str

Opisuje trenutni kôd statusa u nekoliko riječi, na primjer Communication failure ili No new data.

ReturnsOpis, prazan niz znakova kada je status OK.

sensor.fetch_data()returns int

Čita tri polja rezultata senzora u međuspremnik modula i sortira ih tako da najstariji novi uzorak dođe prvi. Kada nema ničeg novog, status glasi No new data.

ReturnsBroj novih polja podataka, 0 kada ih nema.

sensor.get_data()returns tuple

Daje sljedeće novo polje iz međuspremnika kao objekt BME690Data s temperature (°C), pressure (Pa), humidity (% r.H.), gas_resistance (Ω), status, gas_index (korak profila) i meas_index.

Returns(data, fields_left): BME690Data ili None kada nema novih podataka, te koliko je novih polja ostalo nakon ovog.

Sve zajedno​

Nakon set_tph(), set_seq_sleep() i set_heater_prof(), poziv set_op_mode(BME69X_SEQUENTIAL_MODE) ostavlja senzor da sam prolazi kroz profil. Petlja svakih 100 ms traži nova polja od fetch_data() i čita ih jedno po jedno pomoću get_data() dok fields_left ne dosegne 0. Stupac gas_index pokazuje u kojem od deset koraka grijača je redak izmjeren.