Accueil > ARDUINO > Capteurs > Arduino & BME280 (BMP280) : Mesure de température, pression et humidité (...)
vendredi 4 novembre 2016, par
Remarque : dans la suite, nous allons utiliser le bus I2C pour communiquer avec le capteur.
Rôle des broches.
Broche | fonction |
---|---|
Vcc | alimentation ( 3.6V max) |
GND | masse |
SDI | Données. A relier à SDA dans le cas du bus I2C |
SCK | Horloge (clock). A relier à SCL dans le cas du bus I2C |
CSB | permet de passer du mode SPI au mode I2C. Par défaut, CSB=1 donc mode I2C. Si CSB=0 au démarrage, alors le mode SPI est utilisé |
SD0 | choix de l’adresse I2C. Si SD0=0, alors l’adresse est 0x76, si SD0=1, alors l’adresse est 0x77 |
La broche SD0 permet de fixer l’adresse sur le bus I2C. Dans ce cas, SD0 est relié à GND, ce qui correspond à l’adresse 0x76 du capteur.
J’ai utilisé la bibliothèque de Marshall Taylor de SparkFun Electronics sous Licence MIT.
https://github.com/sparkfun/SparkFun_BME280_Arduino_Library
Pour l’installer, il faut décompresser le fichier suivant dans ..Arduino/libraries/
Le programme suivant va permettre de lire les 3 grandeurs physiques Température, Pression et humidité relative et les afficher sur le moniteur série.
La configuration du capteur
Le capteur dispose de plusieurs paramètres de configuration (dans la boucle "void setup" ). Il faut se référer à la documentation du BME280 pour avoir les details de fonctionnement.
capteur.settings.commInterface = I2C_MODE | communication sur bus I2C |
capteur.settings.commInterface = SPI_MODE | communication sur bus SPI |
capteur.settings.I2CAddress = 0x76 | adresse du capteur si SD0=0 |
capteur.settings.I2CAddress = 0x77 | adresse du capteur si SD0=1 |
capteur.settings.runMode = 0 | mode "sleep" |
capteur.settings.runMode = 1 ou 2 | mode "forced".Lorsque une mesure est effectuée, le capteur retourne en mode "sleep". Pour réaliser une autre mesure, il faut activer à nouveau le mode "Forced". |
capteur.settings.runMode = 3 | mode "Normal". Le capteur passe en mode "sleep" entre 2 mesures. Permet d’économiser la consommation |
capteur.settings.tStandby = 0 | durée du standby entre 2 mesures 0.5ms |
capteur.settings.tStandby = 1 | durée du standby entre 2 mesures 62.5ms |
capteur.settings.tStandby = 2 | durée du standby entre 2 mesures 125ms |
capteur.settings.tStandby = 3 | durée du standby entre 2 mesures 250ms |
capteur.settings.tStandby = 4 | durée du standby entre 2 mesures 500ms |
capteur.settings.tStandby = 5 | durée du standby entre 2 mesures 1000ms |
capteur.settings.tStandby = 6 | durée du standby entre 2 mesures 10ms |
capteur.settings.tStandby = 7 | durée du standby entre 2 mesures 20ms |
capteur.settings.filter = 0 | pas de filtrage |
capteur.settings.filter = 1 | coefficient de filtrage 2 |
capteur.settings.filter = 2 | coefficient de filtrage 4 |
capteur.settings.filter = 3 | coefficient de filtrage 8 |
capteur.settings.filter = 4 | coefficient de filtrage 16 |
capteur.settings.tempOverSample=0 | pas de mesure de la température. |
capteur.settings.tempOverSample=1 | sur-échantillonnage x1. Résolution : 16 bit / 0.0050°C |
capteur.settings.tempOverSample=2 | sur-échantillonnage x2. Résolution : 17 bit / 0.0025°C |
capteur.settings.tempOverSample=3 | sur-échantillonnage x4. Résolution : 18 bit / 0.0012°C |
capteur.settings.tempOverSample=4 | sur-échantillonnage x8. Résolution : 19 bit / 0.0006°C |
capteur.settings.tempOverSample=5 | sur-échantillonnage x16. Résolution : 20 bit / 0.0003°C |
capteur.settings.pressOverSample =0 | pas de mesure de pression |
capteur.settings.pressOverSample =1 | sur-échantillonnage x 1. Résolution 16 bit / 2.62 Pa |
capteur.settings.pressOverSample =2 | sur-échantillonnage x 2. Résolution 17 bit / 1.31 Pa |
capteur.settings.pressOverSample =3 | sur-échantillonnage x 4. Résolution 18 bit / 0.66 Pa |
capteur.settings.pressOverSample =4 | sur-échantillonnage x 8. Résolution 19 bit / 0.33 Pa |
capteur.settings.pressOverSample =5 | sur-échantillonnage x 16. Résolution 20 bit / 0.16 Pa |
capteur.settings.humidOverSample =0 | pas de mesure d’humidité |
capteur.settings.humidOverSample =1 | sur-échantillonnage x 1. |
capteur.settings.humidOverSample =2 | sur-échantillonnage x 2. |
capteur.settings.humidOverSample =3 | sur-échantillonnage x 4. |
capteur.settings.humidOverSample =4 | sur-échantillonnage x 8. |
capteur.settings.humidOverSample =5 | sur-échantillonnage x 16. |
Le programme :
#include "SparkFunBME280.h" //Library allows either I2C or SPI, so include both. #include "Wire.h" #include "SPI.h" BME280 capteur; void setup() { Serial.begin(9600); while (!Serial) { // Attente de l'ouverture du port série pour Arduino LEONARDO } //configuration du capteur capteur.settings.commInterface = I2C_MODE; capteur.settings.I2CAddress = 0x76; capteur.settings.runMode = 3; capteur.settings.tStandby = 0; capteur.settings.filter = 0; capteur.settings.tempOverSample = 1 ; capteur.settings.pressOverSample = 1; capteur.settings.humidOverSample = 1; Serial.println("Starting BME280... "); delay(10); // attente de la mise en route du capteur. 2 ms minimum // chargement de la configuration du capteur capteur.begin(); } void loop() { Serial.print("Température: "); Serial.print(capteur.readTempC(), 2); Serial.print(" °C"); Serial.print("\t Pression: "); Serial.print(capteur.readFloatPressure(), 2); Serial.print(" Pa"); Serial.print("\t humidité relative : "); Serial.print(capteur.readFloatHumidity(), 2); Serial.println(" %"); delay(1000); }
Si on ouvre le "Moniteur série", on obtient :