
Ieri abbiamo preso in esame la scheda breakout Bosch BME690 distribuita da Pimoroni. Oggi vedremo la sua programmazione in C e in MicroPython
Questo sensore Bosch BME690 misura con precisione temperatura, pressione e umidità. Dispone anche di una funzione di scansione del gas potenziata dall’intelligenza artificiale (AI).
Primo programma (C)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
/** * Copyright (C) 2024 Bosch Sensortec GmbH * * SPDX-License-Identifier: BSD-3-Clause * */ #include <stdio.h> #include "bme69x.h" #include "common.h" #include "coines.h" /***********************************************************************/ /* Test code */ /***********************************************************************/ int main(void) { struct bme69x_dev bme; int8_t rslt; /* Interface preference is updated as a parameter * For I2C : BME69X_I2C_INTF * For SPI : BME69X_SPI_INTF */ rslt = bme69x_interface_init(&bme, BME69X_SPI_INTF); bme69x_check_rslt("bme69x_interface_init", rslt); rslt = bme69x_init(&bme); bme69x_check_rslt("bme69x_init", rslt); rslt = bme69x_selftest_check(&bme); bme69x_check_rslt("bme69x_selftest_check", rslt); if (rslt == BME69X_OK) { printf("Self-test passed\n"); } if (rslt == BME69X_E_SELF_TEST) { printf("Self-test failed\n"); } bme69x_coines_deinit(); return rslt; } |
Questo codice viene fornito con la libreria indicata nell’articolo di ieri. Dopo aver definito il tipo di protocollo di comunicazione (SPI o I2C), viene creato l’oggetto che interfacccerà i sensori della breakout. Terminata l’inizializzazione, viene lanciata la procedura di check. Se il self-test non passa, viene emessa una stringa di errore (il programma usa una printf(), ma è possibile utilizzare il serial monitor per stampare il risultato direttamente attravverso l’Arduino IDE.
Secondo programma (MicroPython)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
"""BME69X demo Demo of how to read the BME690 sensor. """ import machine import time from breakout_bme69x import BreakoutBME69X, STATUS_HEATER_STABLE bme = BreakoutBME69X(machine.I2C(), 0x76) # If this gives an error, try the alternative address # bme = BreakoutBME69X(machine.I2C(), 0x77) while True: temperature, pressure, humidity, gas, status, _, _ = bme.read() heater = "Stable" if status & STATUS_HEATER_STABLE else "Unstable" print("{:0.2f}c, {:0.2f}Pa, {:0.2f}%, {:0.2f} Ohms, Heater: {}".format( temperature, pressure, humidity, gas, heater)) time.sleep(1.0) |
Il secondo esempio, in MicroPython, è ancora più semplice.
Dopo aver importato i moduli necessari, viene creato l’oggetto BME69X con il suo relativo indirizzo I2C.
Il ciclo infinito acquisisce la tupla dei risultati con un solo metodo bme.read(). Viene poi controllato lo stato del riscaldatore interno per il sensore dei gas, utilizzato per l’acquisizione ed il conto delle nanoparticelle nell’aria.
Infine, se il riscaldatore è a temperatura giusta, viene stampata la stringa con i valori letti dal sensore. E’ previsto un ciclo di attesa di un secondo per ciascun loop.
Questi due esempi per il breakout Bosch BME690 mostrano la semplicità di accesso ai parametri di lettura della scheda.
Buon divertimento!
Iscriviti ai nostri gruppi Telegram
Link utili