🛠 Lire température et gaz avec le BME688
Objetivos
Leer los sensores de entorno del Nicla Sense ME mediante la biblioteca Arduino_BHY2. Punto importante, fuente de numerosos errores en los foros y en fichas de terceros: esta tarjeta no incorpora un BME680, sino un BME688 (U6), un sensor Bosch de nueva generación sensible a gases (eNose) que también mide temperatura, humedad y presión; no se lee directamente mediante I²C bit-bang como en un shield clásico, sino que es gestionado por el hub de sensores BHI260AP, que actúa como maestro del bus. Por lo tanto, se accede a través de sensores virtuales identificados por SENSOR_ID_TEMP (ID 128) y SENSOR_ID_GAS (ID 131), y mediante la cola de mensajes BHY2.update, que debe llamarse continuamente.
Material
- Tarjeta Arduino Nicla Sense ME (ABX00050) y cable micro-USB
- Arduino IDE con el paquete « Arduino Mbed OS Nicla Boards » y la biblioteca « Arduino_BHY2 » instalados a través del gestor de librerías
- >
Código completo
#include "Arduino.h"
#include "Arduino_BHY2.h"
Sensor temp(SENSOR_ID_TEMP); // ID 128 : temperature du BME688
Sensor gas(SENSOR_ID_GAS); // ID 131 : resistance gaz du BME688
void setup {
Serial.begin(115200);
while (!Serial);
BHY2.begin; // demarre l'interface avec le hub BHI260AP
temp.begin;
gas.begin;
}
void loop {
static auto printTime = millis;
BHY2.update; // OBLIGATOIRE : pompe les donnees du hub
if (millis - printTime >= 1000) {
printTime = millis;
if (temp.dataAvailable) {
Serial.println(String("Temperature : ") + String(temp.value, 2) + " C");
temp.clearDataAvailFlag;
}
if (gas.dataAvailable) {
Serial.println(String("Gaz : ") + String(gas.value, 0) + " ohms");
gas.clearDataAvailFlag;
}
}
}
Verificación esperada
Se muestra una línea de temperatura y una línea de resistencia de gas cada segundo. Sople sobre la tarjeta o acérquela a una fuente de calor: la temperatura cambia en pocos segundos. La resistencia del gas tarda varios minutos en estabilizarse al encenderse (rodaje de la capa de óxido metálico, ciclo de medición típico de 10,8 s); los valores muy elevados al principio son normales.
Errores frecuentes
- Olvidar
BHY2.updateen loop: ningún sensor virtual recibe nunca datos,dataAvailablepermanece falso indefinidamente. - Esperar un sensor BME680 y buscar una dirección I²C 0x76/0x77: el BME688 no está expuesto directamente, es esclavo del BHI260AP.
- Bucle de lectura demasiado verboso sin temporización: el monitor serie se satura; se limita la visualización a 1 Hz como se muestra arriba.
- Confundir la resistencia de gas con el índice de calidad del aire: para un IAQ utilizable, se necesita la clase SensorBSEC (consulte los tutoriales avanzados) en lugar de la resistencia bruta.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
led_rgb.inoArduinoimu_bhi260.inoArduinorotation_fusion.inoArduinopression_bmp390.inoArduinonose_electronique.inoArduinoboussole_bmm150.inoArduino