🛠 Lire température et gaz avec le BME688
Objectifs
Lire les capteurs d'environnement du Nicla Sense ME via la bibliothèque Arduino_BHY2. Point important, source de nombreuses erreurs sur les forums et les fiches tierces : cette carte n'embarque pas de BME680 mais un BME688 (U6), un capteur Bosch de nouvelle génération à gaz sensible (eNose) qui mesure aussi température, humidité et pression ; il n'est pas lu directement en I²C bit-bang comme sur un shield classique, mais servi par le hub de capteurs BHI260AP qui tient rôle de maître de bus. On passe donc par des capteurs virtuels identifiés par SENSOR_ID_TEMP (ID 128) et SENSOR_ID_GAS (ID 131), et par la pompe à messages BHY2.update qu'il faut appeler en continu.
Matériel
- Carte Arduino Nicla Sense ME (ABX00050) et câble micro-USB
- Arduino IDE avec le pack « Arduino Mbed OS Nicla Boards » et la bibliothèque « Arduino_BHY2 » installée via le gestionnaire de librairies
- >
Code complet
#include "Arduino.h"
#include "Arduino_BHY2.h"
Sensor temp(SENSOR_ID_TEMP); // ID 128 : temperature du BME688
Sensor gas(SENSOR_ID_GAS); // ID 131 : résistance gaz du BME688
void setup {
Serial.begin(115200);
while (!Serial);
BHY2.begin; // démarre l'interface avec le hub BHI260AP
temp.begin;
gas.begin;
}
void loop {
static auto printTime = millis;
BHY2.update; // OBLIGATOIRE : pompe les données 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;
}
}
}
Vérification attendue
Une ligne de température et une ligne de résistance de gaz s'affichent chaque seconde. Soufflez sur la carte ou approchez-la d'une source de chaleur : la température bouge en quelques secondes. La résistance du gaz met plusieurs minutes à se stabiliser à la mise en route (rodage de la couche oxyde métallique, cycle de mesure typique 10,8 s) ; des valeurs très élevées au début sont normales.
Erreurs fréquentes
- Oubli de
BHY2.updatedans loop : aucun capteur virtuel ne reçoit jamais de donnée,dataAvailablereste faux indéfiniment. - Attendre un capteur BME680 et chercher une adresse I²C 0x76/0x77 : le BME688 n'est pas exposé directement, il est esclave du BHI260AP.
- Boucle de lecture trop bavarde sans temporisation : le moniteur série sature ; on limite l'affichage à 1 Hz comme ci-dessus.
- Confondre résistance de gaz et indice de qualité d'air : pour un IAQ exploitable, il faut la classe SensorBSEC (voir les tutoriels avancés) plutôt que la résistance brute.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_rgb.inoArduinoimu_bhi260.inoArduinorotation_fusion.inoArduinopression_bmp390.inoArduinonose_electronique.inoArduinoboussole_bmm150.inoArduino