Tutoriel - Bibliothèque STM32_BME680
Interface pour communiquer avec le capteur environnemental BME680 (Température, Humidité, Pression, Gaz/QAI).
Consultez la librairie sur GitHub.
- 1. Introduction au BME680
- 2. Introduction à la Librairie STM32_BME680
- 3. Compatibilité et Prérequis
- 4. Fichiers de la librairie
- 5. Installation et Intégration
- 6. Utilisation simple sans qualité de l'air (QAI)
- 7. Utilisation avec qualité de l'air (QAI)
- 8. Gestion des erreurs
- 9. Fonctions et Structures détaillées
- 10. Calibration et Burn-in
- 11. Constantes importantes
- 12. Dépannage
- 13. Conclusion
1. Introduction au BME680
Le BME680 de Bosch Sensortec est un capteur environnemental numérique polyvalent qui combine plusieurs fonctions de mesure en un seul boîtier compact. Il est capable de mesurer :
- Température ambiante
- Humidité relative
- Pression barométrique
- Gaz Organiques Volatils (COV) / Qualité de l'Air Intérieur (QAI) via un capteur de gaz à oxyde métallique (MOX).
Il communique typiquement via I2C (utilisé par cette librairie) ou SPI et est conçu pour des applications à faible consommation.
2. Introduction à la Librairie STM32_BME680
La librairie STM32_BME680
a pour but de simplifier l'intégration et l'utilisation du capteur
BME680 avec les microcontrôleurs STM32, en s'appuyant sur la couche d'abstraction matérielle (HAL) de
STM32Cube. Elle encapsule l'API officielle de Bosch et l'adapte pour l'écosystème STM32.
Fonctionnalités principales :
- Initialisation et configuration simplifiées.
- Lecture des données de température, humidité, pression et résistance du gaz.
- Fonctions d'assistance pour estimer un indice de qualité de l'air (QAI).
- Gestion des modes d'alimentation (veille et forcé).
3. Compatibilité et Prérequis
Compatibilité Matérielle
- Toutes les familles de microcontrôleurs STM32 supportant HAL et disposant d'un périphérique I2C.
- Capteur BME680.
Prérequis Logiciels
- Un microcontrôleur STM32.
- STM32CubeIDE.
- Le bus I2C sur lequel se troue votre capteur doit être configuré et initialisé dans votre projet.
- La librairie HAL
STM32_BME680
présente dans le répertoire STM32_Libraries.
4. Fichiers de la librairie
La librairie est composée de trois fichiers principaux :
STM32_BME680.h
: Fichier d'en-tête exposant l'API publique de la librairie (fonctions de haut niveau, structures de données utilisateur).STM32_BME680.c
: Fichier source contenant l'implémentation des fonctions deSTM32_BME680.h
, y compris les wrappers I2C et délai spécifiques à STM32.STM32_BME680_defs.h
: Fichier d'en-tête contenant les définitions de bas niveau de l'API Bosch (adresses de registres, constantes, structures de données du capteur, etc.).
N'oubliez pas de vérifier et adapter si besoin l'inclusion du fichier HAL principal dans
STM32_BME680.h
:
#include "stm32l0xx_hal.h" // Remplacez stm32l0xx_hal.h par ex: stm32f4xx_hal.h si vous utilisez une autre série.
5. Installation et Intégration
- Créez un dossier nommé
STM32_BME680
(par exemple dans le répertoireDrivers
de votre projet STM32) et copiez-y les trois fichiersSTM32_BME680.h
,STM32_BME680.c
etSTM32_BME680_defs.h
. - Ajoutez les chemins d'inclusion : dans les propriétés de votre projet STM32CubeIDE, allez dans "C/C++
General" > "Paths and Symbols" > Onglet "Includes". Dans la section "GNU C", ajoutez le chemin
vers le dossier où vous avez placé les fichiers de la librairie (ex:
Drivers/STM32_BME680
).
N'oubliez pas d'activer le support des nombres flottants dans les propriétés du projet si vous
souhaitez utiliser printf
pour afficher des valeurs flottantes (température, humidité, etc.).
6. Utilisation simple sans qualité de l'air (QAI)
Voici les étapes pour intégrer et utiliser la librairie BME680 dans votre projet STM32 (typiquement dans
main.c
).
6.1 Inclusion
Incluez le fichier d'en-tête principal de la librairie dans la section USER CODE BEGIN Includes
:
/* USER CODE BEGIN Includes */
#include <stdio.h> // Pour utiliser printf
#include "STM32_BME680.h" // pour utiliser la librairie BME680
/* USER CODE END Includes */
6.2 Variable globale
Déclarez les variables globales dans la section USER CODE BEGIN PV
:
/* USER CODE BEGIN PV */
struct bme680_dev gas_sensor; // Structure pour le capteur BME680
struct bme680_field_data data; // Structure pour stocker les données de mesure
/* USER CODE END PV */
6.3 Redirection de printf
Pour afficher les résultats sur un terminal série (par exemple, via UART pour les messages d'initialisation
ou les données simples), vous devez rediriger la sortie de
printf
. Voici un exemple pour l'UART2 dans la section USER CODE BEGIN 0
:
/* USER CODE BEGIN 0 */
// Fonction de redirection de printf vers UART2
int __io_putchar(int ch)
{
HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF); // Pour Envoyer le caractère via UART
// ITM_SendChar(ch); // Option alternative pour envoyer le caractère via ITM
return ch;
}
/* USER CODE END 0 */
6.4 initialisation
Configurez les paramètres d'initialisation dans la section USER CODE BEGIN 2
:
/* USER CODE BEGIN 2 */
HAL_Delay(250); // Attendre 250 ms pour permettre au système de se stabiliser
printf("Initialisation du BME680 avec les paramètres par défaut...\r\n");
int8_t status = BME680_OK; // Initialiser le statut à OK
// Initialiser le capteur BME680 avec la structure de périphérique, le gestionnaire I2C et les paramètres par défaut
status = BME680_Start(&gas_sensor, &hi2c1, NULL);
if (status == BME680_OK) // Vérifier si l'initialisation a réussi
{
printf("BME680 initialisé avec succès !\r\n");
}
else // Si l'initialisation échoue, afficher le statut
{
printf("Échec de l'initialisation du BME680 ! Statut : %d\r\n", status);
Error_Handler();
}
// Configurer les paramètres de mesure
uint16_t meas_period; // Durée de mesure
bme680_get_profile_dur(&meas_period, &gas_sensor); // Calculer la durée de mesure
printf("Durée de mesure : %d ms\r\n", meas_period); // Afficher la durée de mesure
/* USER CODE END 2 */
6.5 Lecture des mesures
Pour lire les données (température, humidité, pression) en mode forcé, placez le code suivant dans la boucle
while(1)
(section USER CODE BEGIN WHILE
) :
/* USER CODE BEGIN WHILE */
while (1)
{
status = bme680_set_sensor_mode(&gas_sensor); // Passer le capteur en mode forcé
if (status != BME680_OK) // Si le passage en mode forcé a échoué
{
printf("Échec du passage du capteur en mode forcé, statut : %d\r\n", status);
// Continuer pour voir si la lecture fonctionne quand même, mais c'est peu probable.
}
// Attendre que la mesure soit complète
HAL_Delay(meas_period + 20); // meas_period est calculé par bme680_get_profile_dur
// Lire les données
status = bme680_get_sensor_data(&data, &gas_sensor); // Lire les données du capteur
if (status == BME680_OK) // Si la lecture à réussie
{
// Afficher les données de température, pression et humidité
printf("Température : %.2f C, Pression : %.2f hPa, Humidité : %.2f %%\r\n",
data.temperature,
data.pressure / 100.0f, // Conversion Pa vers hPa pour l'affichage
data.humidity);
// Si data.status est OK & BME680_NEW_DATA_MSK est faux, les données ne sont pas nouvelles.
// Si data.status est OK & BME680_GASM_VALID_MSK est faux (pour le gaz) ou si d'autres bits d'erreur sont présents.
// Pour TPH, BME680_NEW_DATA_MSK est le principal indicateur.
if (!(data.status & BME680_NEW_DATA_MSK)) // Si les données ne sont pas nouvelles
{
printf("Avertissement : Les données pourraient ne pas être nouvelles ou valides. Statut : 0x%X\r\n", data.status);
}
}
else // Si la lecture échoue
{
printf("Échec de la lecture des données du capteur, statut : %d\r\n", status);
}
HAL_Delay(1000); // Attendre 1 seconde avant le début de la prochaine mesure
/* USER CODE END WHILE */
7. Utilisation avec qualité de l'air (QAI)
La librairie inclut des fonctions pour estimer un indice de QAI. Cet indice est basé sur les variations de la résistance du capteur de gaz, compensées par l'humidité.
- Initialisation du tracker QAI: Appelez
initIAQTracker(&iaq_tracker, burn_in_cycles, humidity_slope);
après avoir initialisé le BME680.burn_in_cycles
: Nombre de mesures pour stabiliser la ligne de base du gaz (ex: 300 pour 5 minutes si 1 mesure/sec).humidity_slope
: Pente pour la compensation d'humidité (valeur typique entre 0.01 et 0.09, à ajuster).
- Obtention de la QAI: Après chaque lecture de données du BME680, passez les valeurs
(température, humidité, résistance du gaz) à la fonction
getIAQ(&iaq_tracker, bme_data_for_iaq)
. - Interprétation: La fonction
getIAQCategory(iaq_value)
convertit la valeur numérique de QAI (0-100) en une catégorie textuelle (Excellent, Bon, etc.). Pendant la période de "burn-in",getIAQ
retourneNAN
.
Voici les étapes pour intégrer et utiliser la librairie BME680 dans votre projet STM32 (typiquement dans
main.c
).
7.1 Inclusion
Incluez le fichier d'en-tête principal de la librairie dans la section USER CODE BEGIN Includes
de votre main.c
:
/* USER CODE BEGIN Includes */
#include <stdio.h> // Pour utiliser printf
#include "STM32_BME680.h" // pour utiliser la librairie BME680
/* USER CODE END Includes */
7.2 Variable globale
Déclarez les variables globales dans la section USER CODE BEGIN PV
de votre main.c
:
/* USER CODE BEGIN PV */
struct bme680_dev gas_sensor; // Instance principale du capteur
BME680_InitialSettings initial_settings; // Paramètres d'initialisation
IAQTracker iaq_tracker; // Optionnel, pour la QAI
/* USER CODE END PV */
7.3 Redirection de printf
Pour afficher les résultats sur un terminal série (ex: via UART), vous devez rediriger la sortie de
printf
. Voici un exemple pour l'UART2 dans la section USER CODE BEGIN 0
:
/* USER CODE BEGIN 0 */
// Fonction de redirection de printf vers UART2
int __io_putchar(int ch) {
HAL_UART_Transmit(&huart2, (uint8_t*) &ch, 1, HAL_MAX_DELAY); // Envoyer le caractère via UART
return ch; // Retourner le caractère envoyé
}
/* USER CODE END 0 */
7.4 Configuration avec IAQ actif
Configurez les paramètres d'initialisation dans la section USER CODE BEGIN 2
de votre main.c
:
/* USER CODE BEGIN 2 */
HAL_Delay(250); // Attendre 250 ms pour permettre au système de se stabiliser
printf("Initialisation du BME680 avec une configuration personnalisée pour IAQ...\r\n");
BME680_InitialSettings custom_settings; // Paramètres personnalisés pour l'initialisation
// Paramètres TPH (Température, Pression, Humidité)
custom_settings.tph_sett.os_hum = BME680_OS_2X; // Oversampling humidité x2
custom_settings.tph_sett.os_pres = BME680_OS_4X; // Oversampling pression x4
custom_settings.tph_sett.os_temp = BME680_OS_8X; // Oversampling température x8
custom_settings.tph_sett.filter = BME680_FILTER_SIZE_3; // Coefficient du filtre IIR
// Paramètres du capteur de gaz pour IAQ
custom_settings.gas_sett.run_gas = BME680_RUN_GAS_ENABLE; // Activer la mesure de gaz
custom_settings.gas_sett.nb_conv = 0; // Utiliser le profil de chauffage/mesure 0
custom_settings.gas_sett.heatr_temp = 320; // Température de chauffage cible (ex: 320°C)
custom_settings.gas_sett.heatr_dur = 150; // Durée de chauffage (ex: 150 ms)
// Mode d'alimentation
custom_settings.power_mode = BME680_FORCED_MODE; // Mode forcé pour des mesures ponctuelles
int8_t status = BME680_OK; // Variable pour stocker le statut de l'initialisation
status = BME680_Start(&gas_sensor, &hi2c1, user_delay_ms, &custom_settings); // Initialiser le capteur BME680 avec les paramètres personnalisés
if (status == BME680_OK) // Si le statut de l'initialisation est OK
{
printf("BME680 initialisé avec succès !\r\n"); // Afficher le message de succès
}
else // Sinon
{
printf("Échec de l'initialisation du BME680 ! Statut : %d\r\n", status); // Afficher le message d'erreur
error_handler(); // Gérer l'erreur (fonction à définir selon votre projet)
}
// Initialiser le tracker IAQ
// Ces valeurs (burn_in_cycles, iaq_slope) sont des exemples et peuvent nécessiter un ajustement.
// burn_in_cycles: nombre de cycles de mesure pour stabiliser la baseline du gaz (ex: 300 cycles = 5 minutes si 1 mesure/sec)
// iaq_slope: pente pour la compensation d'humidité de la résistance du gaz (valeur typique entre 0.01 et 0.09).
initIAQTracker(&iaq_tracker, 300, 0.03f); // Initialiser le tracker IAQ avec 300 cycles de burn-in et une pente d'humidité de 0.03 (courant pour la plupart des applications)
printf("Tracker IAQ initialisé. Phase de burn-in pour la calibration du gaz en cours...\r\n");
uint16_t meas_period; // Variable pour contenir la durée de mesure calculée
bme680_get_profile_dur(&meas_period, &gas_sensor); // Calcule de la durée de mesure
// Pour le mode forcé, nous devons déclencher la première mesure avant d'entrer dans la boucle.
if (gas_sensor.power_mode == BME680_FORCED_MODE) // Si le mode d'alimentation est forcé
{
status = bme680_set_sensor_mode(&gas_sensor); // Déclencher la mesure
if (status != BME680_OK) // Si le statut n'est pas OK
{
printf("Échec du déclenchement initial du capteur en mode forcé, statut : %d\r\n", status);
Error_Handler(); // Ou une autre gestion d'erreur appropriée
}
}
struct bme680_field_data raw_data; // Structure pour stocker les données brutes du capteur
/* USER CODE END 2 */
7.5 Lecture des mesures
Pour lire les données (température, humidité, pression, résistance du gaz) en mode forcé, placez le code
suivant dans la boucle while(1)
(section USER CODE BEGIN WHILE
) :
/* USER CODE BEGIN WHILE */
while (1)
{
// Attendre que la mesure (déclenchée à l'itération précédente ou avant la boucle) soit complète
HAL_Delay(meas_period + 20); // +20ms de marge
status = bme680_get_sensor_data(&raw_data, &gas_sensor); // Lire les données brutes du capteur
if (status == BME680_OK) // Si la lecture des données est réussie
{
BME680Data bme_data;
bme_data.temperature = raw_data.temperature; // raw_data.temperature est déjà en °C
bme_data.pressure = raw_data.pressure / 100.0f; // Conversion Pa vers hPa
bme_data.humidity = raw_data.humidity; // raw_data.humidity est déjà en %RH
// Initialiser gas_resistance en fonction de la validité des données de gaz
int gas_measurement_is_valid = (raw_data.status & BME680_GASM_VALID_MSK);
int was_burn_in_active = (iaq_tracker.burn_in_cycles_remaining > 0);
if (gas_measurement_is_valid)
{
bme_data.gas_resistance = raw_data.gas_resistance; // raw_data.gas_resistance est en Ohms
printf("Temperature: %.1f °C, Pressure: %.1f hPa, Humidity: %.1f %%, Gas: %.1f kOhms\r\n",
bme_data.temperature, bme_data.pressure, bme_data.humidity, bme_data.gas_resistance / 1000.0);
}
else
{
bme_data.gas_resistance = NAN; // Not-A-Number, pour indiquer des données de gaz invalides à getIAQ
printf("Temperature: %.1f °C, Pressure: %.1f hPa, Humidity: %.1f %%, Gas: N/A (not valid)\r\n",
bme_data.temperature, bme_data.pressure, bme_data.humidity);
}
float iaq = getIAQ(&iaq_tracker, bme_data); // Toujours appeler pour la gestion du burn-in
if (!isnan(iaq))
{
// IAQ est une valeur valide, donc le burn-in est terminé et les données de gaz étaient valides.
printf("IAQ: %.2f%% - Qualité de l'air : %s\r\n", iaq, getIAQCategory(iaq));
}
else // iaq is NAN
{
if (was_burn_in_active) // Si le burn-in était la raison pour laquelle iaq est NAN
{
printf("IAQ Burn-in in progress... (Cycles restants: %d)\r\n", iaq_tracker.burn_in_cycles_remaining > 0 ?
iaq_tracker.burn_in_cycles_remaining : 0);
}
else // Le burn-in est terminé, donc iaq est NAN à cause de données de gaz invalides
{
printf("IAQ: N/A (Gas data was not valid for current reading)\r\n");
}
}
}
else
{
printf("Failed to get sensor data, status: %d\r\n", status);
}
// Si on est en mode forcé, redéclencher une mesure pour la prochaine itération
if (gas_sensor.power_mode == BME680_FORCED_MODE)
{
status = bme680_set_sensor_mode(&gas_sensor);
if (status != BME680_OK)
{
printf("Failed to set sensor to forced mode again, status: %d\r\n", status);
}
}
HAL_Delay(1000); // Délai avant la prochaine lecture/cycle de mesure
/* USER CODE END WHILE */
8 Gestion des erreurs
La plupart des fonctions de la librairie retournent un statut de type int8_t
. Il est crucial de
vérifier cette valeur. Les codes de retour importants sont définis dans STM32_BME680_defs.h
:
BME680_OK
(0): Opération réussie.BME680_E_NULL_PTR
(-1): Pointeur nul passé en argument.BME680_E_COM_FAIL
(-2): Échec de communication I2C.BME680_E_DEV_NOT_FOUND
(-3): Capteur non détecté sur le bus I2C.BME680_E_INVALID_LENGTH
(-4): Longueur de données invalide.BME680_W_NO_NEW_DATA
(1): Avertissement, pas de nouvelles données disponibles (après une lecture).BME680_I_MIN_CORRECTION
,BME680_I_MAX_CORRECTION
: Codes d'information liés à la compensation.
9. Fonctions et Structures détaillées
Voici quelques fonctions et structures clés de la librairie :
Structures Principales
struct bme680_dev gas_sensor
: Instance principale représentant le capteur. Contient l'ID du chip, l'adresse I2C, les pointeurs de fonction pour la communication et le délai, les données de calibration, les paramètres de mesure (TPH et gaz), et le mode d'alimentation.BME680_InitialSettings initial_settings
: Utilisée avecBME680_Start
pour une configuration initiale groupée et simplifiée.struct bme680_field_data data
: Contient les résultats des mesures :temperature
(centi-°C),pressure
(Pa),humidity
(milli-%RH),gas_resistance
(Ohms), etstatus
(indiquant si de nouvelles données sont prêtes).IAQTracker iaq_tracker
: Structure pour le suivi et le calcul de la QAI.BME680Data bme_data_for_iaq
: Structure simplifiée pour passer les données àgetIAQ
, avec des valeurs en unités standards (float).
Fonctions Clés
int8_t BME680_Start(struct bme680_dev *dev, I2C_HandleTypeDef *i2c_handle, bme680_delay_fptr_t delay_fptr, const BME680_InitialSettings *settings)
: Fonction de haut niveau pour initialiser la librairie et le capteur. Configure les pointeurs de communication, détecte le capteur, lit les calibrations et applique les paramètres initiaux.int8_t bme680_init(struct bme680_dev *dev)
: Initialisation de bas niveau (style API Bosch), appelée parBME680_Start
. Lit l'ID, effectue un soft reset, et récupère les données de calibration.int8_t bme680_set_sensor_settings(uint16_t desired_settings, struct bme680_dev *dev)
: Configure les paramètres TPH (suréchantillonnage, filtre) et gaz. Utilise des masques (BME680_OST_SEL
, etc.) pour spécifier quels paramètres configurer.int8_t bme680_set_sensor_mode(struct bme680_dev *dev)
: Définit le mode d'alimentation. En mode forcé (BME680_FORCED_MODE
), cela déclenche une nouvelle mesure.int8_t bme680_get_sensor_data(struct bme680_field_data *data, struct bme680_dev *dev)
: Lit les données brutes des registres et les convertit en valeurs compensées.void bme680_get_profile_dur(uint16_t *duration, const struct bme680_dev *dev)
: Calcule la durée typique d'un cycle de mesure en fonction des paramètres actuels.void initIAQTracker(IAQTracker *tracker, int burn_in_total_cycles, float ph_slope)
: Initialise la structure de suivi QAI.float getIAQ(IAQTracker *tracker, BME680Data bme_data)
: Calcule la valeur QAI.const char* getIAQCategory(float iaq)
: Convertit la valeur QAI en catégorie textuelle.
10. Calibration et Burn-in
Calibration du capteur TPH : Le BME680 stocke des coefficients de calibration en interne
pour la température, la pression et l'humidité. Ces coefficients sont lus par la fonction
bme680_init
(appelée par BME680_Start
) et utilisés automatiquement lors de la
lecture des données pour fournir des valeurs compensées. Aucune calibration manuelle de ces paramètres n'est
typiquement requise par l'utilisateur.
Capteur de Gaz et Burn-in pour la QAI : Le capteur de gaz MOX nécessite une période de stabilisation initiale, appelée "burn-in", pour que ses lectures deviennent fiables et que la ligne de base pour le calcul de la QAI puisse être établie.
- Lorsqu'il est neuf ou après une longue période d'inactivité, le capteur de gaz peut prendre de quelques minutes à plusieurs heures pour se stabiliser complètement.
- La fonction
initIAQTracker
permet de définir un nombre de cycles de mesure initiaux (burn_in_total_cycles
) pendant lesquels la fonctiongetIAQ
retourneraNAN
(Not a Number). - Pendant cette période, la librairie collecte des données pour établir une ligne de base de la résistance du gaz. Une fois le burn-in terminé, le calcul de la QAI devient actif.
- La ligne de base de la QAI est adaptative, c'est-à-dire qu'elle continue de s'ajuster lentement en fonction des lectures récentes pour compenser les dérives à long terme du capteur.
11. Constantes importantes
La plupart des constantes sont définies dans STM32_BME680_defs.h
:
- Adresses I2C:
BME680_I2C_ADDR_PRIMARY
(0x76),BME680_I2C_ADDR_SECONDARY
(0x77). La librairie essaie les deux. - ID du Chip:
BME680_CHIP_ID
(0x61). - Modes d'alimentation:
BME680_SLEEP_MODE
,BME680_FORCED_MODE
. - Paramètres de suréchantillonnage (TPH):
BME680_OS_NONE
,BME680_OS_1X
, ...,BME680_OS_16X
. - Paramètres de filtre IIR (TP):
BME680_FILTER_SIZE_0
, ...,BME680_FILTER_SIZE_127
. - Contrôle de la mesure de gaz:
BME680_RUN_GAS_ENABLE
,BME680_RUN_GAS_DISABLE
. - Masques pour
bme680_set_sensor_settings
:BME680_OST_SEL
,BME680_OSP_SEL
,BME680_OSH_SEL
,BME680_FILTER_SEL
,BME680_GAS_SENSOR_SEL
. - Constantes pour la QAI (dans
STM32_BME680.h
):GAS_CAL_DATA_WINDOW_SIZE
, seuils pour les catégories de QAI.
12. Dépannage
- Erreur d'initialisation (
BME680_E_DEV_NOT_FOUND
,BME680_E_COM_FAIL
):- Vérifiez le câblage du capteur BME680 (SDA, SCL, VCC, GND).
- Assurez-vous que les résistances de pull-up sont présentes sur les lignes SDA et SCL (généralement 4.7kΩ à 10kΩ).
- Vérifiez l'adresse I2C du capteur. Le BME680 peut être à 0x76 ou 0x77 (souvent sélectionnable par une broche SDO). La librairie teste les deux.
- Utilisez un scanner I2C pour vérifier si le capteur est détecté sur le bus.
- Assurez-vous que le périphérique I2C du STM32 est correctement initialisé avant d'appeler
BME680_Start
.
- Pas de nouvelles données (
BME680_W_NO_NEW_DATA
retourné parbme680_get_sensor_data
):- Assurez-vous d'attendre suffisamment longtemps après avoir déclenché une mesure en mode forcé.
Utilisez
bme680_get_profile_dur
pour obtenir la durée de mesure et attendez au moins cette durée.
- Assurez-vous d'attendre suffisamment longtemps après avoir déclenché une mesure en mode forcé.
Utilisez
- Lectures de QAI incorrectes ou bloquées sur "burn-in":
- Laissez suffisamment de temps pour la période de burn-in. Cela peut prendre plusieurs minutes.
- Vérifiez les paramètres
heatr_temp
etheatr_dur
. Des valeurs incorrectes peuvent affecter la sensibilité du capteur de gaz. - Le placement du capteur est crucial pour la QAI. Évitez les courants d'air, la lumière directe du soleil, et les sources de chaleur ou de COV à proximité.
- Essayez d'ajuster le paramètre
humidity_slope
dansinitIAQTracker
si les lectures semblent fortement corrélées à l'humidité de manière incorrecte.
- Pas de sortie
printf
:- Assurez-vous que l'UART est correctement configuré et que la fonction
__io_putchar
(ou équivalent) est implémentée et fonctionnelle. - Vérifiez que le support des flottants est activé pour
printf
si vous affichez des nombres décimaux.
- Assurez-vous que l'UART est correctement configuré et que la fonction
- Problèmes avec
user_delay_ms
:- La fonction
user_delay_ms
fournie dansSTM32_BME680.c
utiliseHAL_Delay
. Assurez-vous queHAL_Delay
fonctionne correctement dans votre projet (dépend de la configuration du SysTick).
- La fonction
13. Conclusion
La bibliothèque STM32_BME680
vise à simplifier l'utilisation du capteur environnemental BME680
avec les microcontrôleurs STM32. En encapsulant la complexité de la communication I2C, la configuration du
capteur, la compensation des données et le calcul de la QAI, elle permet aux développeurs de se concentrer
sur l'application finale. En suivant ce tutoriel, vous devriez être en mesure de configurer, lire et
interpréter les données de votre capteur BME680.