Le BME680 est un capteur numérique environnemental qui mesure le gaz, la pression, l’humidité et la température. Dans ce guide, vous apprendrez à utiliser le module capteur BME680 avec la carte Arduino. Le capteur communique avec un microcontrôleur à l’aide des protocoles de communication I2C ou SPI.

Vous apprendrez à connecter le capteur à la carte Arduino, à installer les bibliothèques requises et à utiliser un simple croquis pour afficher les lectures du capteur dans le moniteur série.
Présentation du module de capteur environnemental BME680
Le BME680 est un capteur environnemental qui combine des capteurs de gaz, de pression, d’humidité et de température. Le capteur de gaz peut détecter une large gamme de gaz comme les composés organiques volatils (COV). Pour cette raison, le BME680 peut être utilisé dans le contrôle de la qualité de l’air intérieur.

Mesures du BME680
Le BME680 est un capteur numérique 4 en 1 qui mesure :
- Température
- Humidité
- Pression barométrique
- Gaz : Composés organiques volatils (COV) comme l’éthanol et le monoxyde de carbone
Capteur de gaz
Le BME680 contient un capteur MOX (oxyde métallique) qui détecte les COV dans l’air. Ce capteur vous donne une idée qualitative de la somme des COV/contaminants dans l’air ambiant – ce n’est pas spécifique pour une molécule de gaz spécifique.
Les capteurs MOX sont composés d’une surface en oxyde métallique, d’une puce de détection pour mesurer les changements de conductivité et d’un élément chauffant. Il détecte les COV par adsorption de molécules d’oxygène sur sa couche sensible. Le BME680 réagit à la plupart des COV polluant l’air intérieur (à l’exception du CO2).
Lorsque le capteur entre en contact avec les gaz réducteurs, les molécules d’oxygène réagissent et augmentent la conductivité à travers la surface. En tant que signal brut, le BME680 émet des valeurs de résistance. Ces valeurs changent en raison des variations des concentrations de COV :

- Plus haute concentration de COV » Inférieur la résistance
- Inférieur concentration de COV » Plus haute la résistance
Les réactions qui se produisent à la surface du capteur (donc la résistance) sont influencées par des paramètres autres que la concentration en COV comme la température et l’humidité.
Informations pertinentes concernant le capteur de gaz
Le capteur de gaz vous donne une idée qualitative des gaz COV dans l’air ambiant. Ainsi, vous pouvez obtenir des tendances, comparer vos résultats et voir si la qualité de l’air augmente ou diminue. Pour obtenir des mesures précises, vous devez étalonner le capteur par rapport à des sources connues et créer une courbe d’étalonnage.
Lorsque vous obtenez le capteur pour la première fois, il est recommandé de le faire fonctionner pendant 48 heures après avoir commencé à collecter des données « réelles ». Après cela, il est également recommandé de faire fonctionner le capteur pendant 30 minutes avant d’obtenir une lecture de gaz.
Précision BME680
Voici la précision des capteurs de température, d’humidité et de pression du BME680 :
Capteur | Précision |
Température | +/- 1,0 ºC |
Humidité | +/- 3 % |
Pression | +/- 1 hPa |
Plage de fonctionnement du BME680
Le tableau suivant indique la plage de fonctionnement des capteurs de température, d’humidité et de pression du BME680.
Capteur | Opération Varier |
Température | -40 à 85 ºC |
Humidité | 0 à 100 % |
Pression | 300 à 1100 hPa |
Brochage du BME680
Voici le brochage du BME680 :
VCC | Alimente le capteur |
GND | GND commun |
SCL | Broche SCL pour la communication I2C Broche SCK pour la communication SPI |
SDA | Broche SDA pour la communication I2C Broche SDI (MOSI) pour la communication SPI |
SDO | Broche SDO (MISO) pour la communication SPI |
CS | Broche de sélection de puce pour la communication SPI |
Interface BME680
Le BME680 prend en charge les interfaces I2C et SPI.

BME680 I2C
Pour utiliser le protocole de communication I2C, utilisez les broches suivantes :
BME680 SPI
Pour utiliser le protocole de communication SPI, utilisez les broches suivantes :
BME680 | Arduino |
SCL (horloge SCK SPI) | D13 |
SDA (SDI MOSI) | D11 |
SDO (MISO) | D12 |
CS (sélection de puce) | D10 |
Pièces requises

Pour terminer ce tutoriel, vous avez besoin des pièces suivantes :
Vous pouvez utiliser les liens précédents ou aller directement sur MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !
Schéma – Arduino avec BME680
Le BME680 peut communiquer en utilisant les protocoles de communication I2C ou SPI.
Arduino avec BME680 en utilisant I2C
Suivez le schéma suivant pour câbler le BME680 à l’Arduino à l’aide des broches I2C.

Arduino avec BME680 utilisant SPI
Vous pouvez également utiliser le protocole de communication SPI à la place. Dans ce cas, suivez le schéma suivant pour câbler le BME680 à l’Arduino à l’aide des broches SPI.

Installation de la bibliothèque BME680
Pour obtenir des lectures du module de capteur BME680, nous utiliserons le Bibliothèque Adafruit_BME680. Suivez les étapes suivantes pour installer la bibliothèque dans votre IDE Arduino :
Ouvrez votre IDE Arduino et accédez à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques. Le gestionnaire de bibliothèque devrait s’ouvrir.
Rechercher « adafruit bme680 » dans la zone de recherche et installez la bibliothèque.

Installation de la bibliothèque Adafruit_Sensor
Pour utiliser la bibliothèque BME680, vous devez également installer le Bibliothèque Adafruit_Sensor. Suivez les étapes suivantes pour installer la bibliothèque dans votre IDE Arduino :
Aller à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques et tapez « Capteur unifié Adafruit » dans le champ de recherche. Faites défiler jusqu’en bas pour trouver la bibliothèque et l’installer.

Après avoir installé les bibliothèques, redémarrez votre IDE Arduino.
Code Arduino – Lecture du gaz, de la pression, de l’humidité et de la température BME680
Pour lire le gaz, la pression, la température et l’humidité, nous utiliserons un exemple de croquis de la bibliothèque.
Après avoir installé la bibliothèque BME680 et la bibliothèque Adafruit_Sensor, ouvrez l’IDE Arduino et accédez à Déposer > Exemples > Bibliothèque Adafruit BME680 > bme680async.
/***
Read Our Complete Guide: https://Raspberryme.com/bme680-sensor-arduino-gas-temperature-humidity-pressure/
Designed specifically to work with the Adafruit BME680 Breakout ----> http://www.adafruit.com/products/3660 These sensors use I2C or SPI to communicate, 2 or 4 pins are required to interface. Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Limor Fried & Kevin Townsend for Adafruit Industries. BSD license, all text above must be included in any redistribution
***/
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"
/*#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10*/
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME680 bme; // I2C
//Adafruit_BME680 bme(BME_CS); // hardware SPI
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);
void setup() {
Serial.begin(115200);
while (!Serial);
Serial.println(F("BME680 async test"));
if (!bme.begin()) {
Serial.println(F("Could not find a valid BME680 sensor, check wiring!"));
while (1);
}
// Set up oversampling and filter initialization
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320*C for 150 ms
}
void loop() {
// Tell BME680 to begin measurement.
unsigned long endTime = bme.beginReading();
if (endTime == 0) {
Serial.println(F("Failed to begin reading :("));
return;
}
Serial.print(F("Reading started at "));
Serial.print(millis());
Serial.print(F(" and will finish at "));
Serial.println(endTime);
Serial.println(F("You can do other work during BME680 measurement."));
delay(50); // This represents parallel work.
// There's no need to delay() until millis() >= endTime: bme.endReading()
// takes care of that. It's okay for parallel work to take longer than
// BME680's measurement time.
// Obtain measurement results from BME680. Note that this operation isn't
// instantaneous even if milli() >= endTime due to I2C/SPI latency.
if (!bme.endReading()) {
Serial.println(F("Failed to complete reading :("));
return;
}
Serial.print(F("Reading completed at "));
Serial.println(millis());
Serial.print(F("Temperature = "));
Serial.print(bme.temperature);
Serial.println(F(" *C"));
Serial.print(F("Pressure = "));
Serial.print(bme.pressure / 100.0);
Serial.println(F(" hPa"));
Serial.print(F("Humidity = "));
Serial.print(bme.humidity);
Serial.println(F(" %"));
Serial.print(F("Gas = "));
Serial.print(bme.gas_resistance / 1000.0);
Serial.println(F(" KOhms"));
Serial.print(F("Approx. Altitude = "));
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(F(" m"));
Serial.println();
delay(2000);
}
Comment fonctionne le code
Continuez à lire cette section pour savoir comment fonctionne le code, ou passez à la Manifestation section.
Bibliothèques
Le code commence par inclure les bibliothèques nécessaires : le fil bibliothèque pour utiliser I2C, le SPI bibliothèque (si vous souhaitez utiliser SPI au lieu d’I2C), le Adafruit_Sensor et Adafruit_BME680 bibliothèques pour s’interfacer avec le capteur BME680.
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"
Communication SPI
Nous préférons utiliser le protocole de communication I2C avec le capteur. Cependant, le code est préparé si vous souhaitez utiliser SPI. Il vous suffit de décommenter les lignes de code suivantes qui définissent les broches SPI.
/*#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10*/
Pression au niveau de la mer
Une variable appelée SEALEVELPRESSURE_HPA est créé.
#define SEALEVELPRESSURE_HPA (1013.25)
Cette variable enregistre la pression au niveau de la mer en hectopascal (équivalent au milibar). Cette variable permet d’estimer l’altitude pour une pression donnée en la comparant à la pression au niveau de la mer. Cet exemple utilise la valeur par défaut, mais pour des résultats précis, remplacez la valeur par la pression actuelle au niveau de la mer à votre emplacement.
I2C
Cet exemple utilise le protocole de communication I2C par défaut. La ligne suivante crée un Adafruit_BME680 objet appelé bme sur les broches Arduino I2C : D5 (SCL), D4 (SDA).
Adafruit_BME680 bme; // I2C
Pour utiliser SPI, vous devez commenter cette ligne précédente et décommenter la ligne suivante.
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI
mettre en place()
Dans le mettre en place() démarrer une communication série.
Serial.begin(115200);
Init BME680 Capteur
Initialisez le capteur BME680 :
if (!bme.begin()) {
Serial.println(F("Could not find a valid BME680 sensor, check wiring!"));
while (1);
}
Configurez les paramètres suivants (suréchantillonnage, filtre et chauffage au gaz) pour le capteur.
// Set up oversampling and filter initialization
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320*C for 150 ms
Pour augmenter la résolution des données brutes du capteur, il prend en charge le suréchantillonnage. Nous utiliserons les paramètres de suréchantillonnage par défaut, mais vous pouvez les modifier.
- setTemperatureSuréchantillonnage(): régler le suréchantillonnage de la température.
- setHumiditySuréchantillonnage(): régler le suréchantillonnage d’humidité.
- setPressureSuréchantillonnage(): régler le suréchantillonnage de la pression.
Ces méthodes peuvent accepter l’un des paramètres suivants :
- BME680_OS_NONE: désactiver la lecture ;
- BME680_OS_1X
- BME680_OS_2X
- BME680_OS_4X
- BME680_OS_8X
- BME680_OS_16X
Le capteur BME680 intègre un filtre IIR interne pour réduire les changements à court terme des valeurs de sortie du capteur causés par des perturbations externes. le setIIRFilterSize() La méthode définit le filtre IIR. Il accepte la taille du filtre en paramètre :
- BME680_FILTER_SIZE_0 (pas de filtrage)
- BME680_FILTER_SIZE_1
- BME680_FILTER_SIZE_3
- BME680_FILTER_SIZE_7
- BME680_FILTER_SIZE_15
- BME680_FILTER_SIZE_31
- BME680_FILTER_SIZE_63
- BME680_FILTER_SIZE_127
Le capteur de gaz intègre un réchauffeur. Réglez le profil de chauffage à l’aide du setGasHeater() méthode qui accepte comme arguments :
- la température du radiateur (en degrés centigrades)
- l’heure à laquelle le chauffage doit être allumé (en millisecondes)
Nous utiliserons les paramètres par défaut : 320 ºC pendant 150 ms.
boucler()
Dans le boucler(), nous obtiendrons les mesures du capteur BME680.
D’abord, dites au capteur de démarrer une lecture asynchrone avec bme.beginReading(). Cela renvoie l’heure à laquelle la lecture serait prête.
// Tell BME680 to begin measurement.
unsigned long endTime = bme.beginReading();
if (endTime == 0) {
Serial.println(F("Failed to begin reading :("));
return;
}
Serial.print(F("Reading started at "));
Serial.print(millis());
Serial.print(F(" and will finish at "));
Serial.println(endTime);
Ensuite, appelez le finLecture() méthode pour terminer une lecture asynchrone. Si la lecture asynchrone est toujours en cours, bloquer jusqu’à ce qu’elle se termine.
if (!bme.endReading()) {
Serial.println(F("Failed to complete reading :("));
return;
}
Après cela, nous pouvons obtenir les lectures comme suit :
- bme.température: renvoie la lecture de la température
- bme.pression: renvoie la lecture de la pression
- bme.humidité: renvoie la lecture de l’humidité
- bme.gas_resistance: renvoie la résistance au gaz
Serial.print(F("Temperature = "));
Serial.print(bme.temperature);
Serial.println(F(" *C"));
Serial.print(F("Pressure = "));
Serial.print(bme.pressure / 100.0);
Serial.println(F(" hPa"));
Serial.print(F("Humidity = "));
Serial.print(bme.humidity);
Serial.println(F(" %"));
Serial.print(F("Gas = "));
Serial.print(bme.gas_resistance / 1000.0);
Serial.println(F(" KOhms"));
Serial.print(F("Approx. Altitude = "));
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(F(" m"));
Pour plus d’informations sur les méthodes de la bibliothèque, consultez le Adafruit_BME680 Référence de classe.
Manifestation
Téléchargez le code sur votre carte Arduino. Aller à Outils > Conseil et sélectionnez la carte Arduino que vous utilisez. Aller à Outils > Port et sélectionnez le port auquel votre carte est connectée. Ensuite, cliquez sur le bouton de téléchargement.
Ouvrez le moniteur série à un débit en bauds de 115 200, appuyez sur le bouton RST intégré. Les mesures du capteur seront affichées.

Conclusion
Le module capteur BME680 est un capteur numérique 4 en 1 qui combine des capteurs de gaz, de pression, de température et d’humidité. Le BME680 contient un capteur MOX qui détecte la présence de la plupart des gaz COV. Ce capteur vous donne une idée qualitative de la somme des COV/contaminants dans l’air ambiant. Pour cette raison, le BME680 peut être utilisé pour surveiller la qualité de l’air intérieur.
Nous espérons que vous avez trouvé ce guide de démarrage utile. Nous avons des guides pour d’autres capteurs populaires :
En savoir plus sur l’Arduino avec nos ressources :
Merci d’avoir lu.
-
Adafruit Capteur de température, Pression, humidité et gaz BME680Ce petit capteur contient la température, l'humidité, la pression barométrique et les capacités de détection de gaz COV. All over SPI or I2C at a great price! Précision de ± 3 %, pression barométrique avec une précision absolue de ± 1 hPa et une précision de ± 1,0 °C. Veuillez noter ce capteur, comme tous les capteurs de COV/gaz, a une variabilité et pour obtenir des mesures précises que vous voudrez calibrer contre les sources connues
-
Capteur BME680 Capteur d'Humidité et de Température CJMCU-680 BME680 Carte de Développement de Hauteur de Pression Ultra-petite【PETIT MODÈLE ET POIDS LÉGER】Ce capteur BME680 est petit et léger, facile à utiliser. 【HAUTE PRÉCISION ET HAUTE SENSIBILITÉ】Le capteur est sensible, carte de développement de hauteur de pression ultra-petite. 【INSTRUCTIONS】Ceci est une carte de capteur de température, d'humidité et de pression. 【SATISFACTION GARANTIE】Nous nous soucions du sentiment de chaque client. Si ce produit ne répond pas ou dépasse vos attentes, veuillez le renvoyer pour un remboursement à 100% sans poser de questions. 【DURABLE】Composé de composants électroniques haut de gamme, le capteur est durable.
-
Capteur d'humidité et de température de pression CJMCU-680 BME680, carte de développement de hauteur de Module de carte de rupture de capteur d'humidité de températureCarte de capteur 3-en-1 : Il s'agit d'une carte de capteur de température, d'humidité et de pression. [Durable]: Cette carte de capteur de température et d'humidité est composée de composants électroniques de haute qualité, durables pour une utilisation à long terme. Haute sensibilité: c'est une carte de développement de hauteur de pression ultra-petite, le capteur est sensible. Portable et pratique à utiliser : conception portable, petite et légère, pratique à utiliser. [Modèle] : CJMCU-680 BME680.