You are currently viewing Pression et température en Bluetooth avec Arduino
Pression et température en Bluetooth avec Arduino

Premier programme Arduino avec le capteur BMP280

Ce premier programme Arduino (ou plutôt ces premiers programmes, car ils diffèrent pour chaque interface) va simplement lire les valeurs de température et de pression du capteur BMP280 puis les afficher sur le Moniteur série.

Bibliothèque de gestion du capteur BMP280

Je vous invite à installer la bibliothèque Arduino nommée “BMP280_DEV” by Martin Lindupp. Pour plus d’information sur la procédure d’installation d’une bibliothèque sous Arduino, reportez-vous au chapitre “Installation d’une bibliothèque pour l’écran OLED” de l’article “Température et humidité avec Arduino”.

Écriture du programme de gestion de ce capteur BMP280

La bibliothèque BMP280_DEV choisie pour ce projet se déclare de la façon suivante afin de pouvoir l’utiliser dans notre croquis :

#include <BMP280_DEV.h>

Nous déclarons en globale une instance capteur_G de la classe principale BMP280_DEV de cette bibliothèque de même nom. Ce sont les paramètres de cette déclaration d’instance qui vont définir le type d’interface utilisé.

Pour l’interface SPI, le numéro de la broche CSB est passé en paramètre :

BMP280_DEV      capteur_G(5);

Pour l’interface I2C, il n’est pas nécessaire de passer de paramètre :

BMP280_DEV      capteur_G;

Une différence de code est également présente entre les 2 interfaces lors de l’appel de la méthode begin() qui gère la configuration matérielle. On utilise les valeurs par défaut pour l’interface SPI:

capteur_G.begin();

Les valeur par défaut de l’interface I2C utilisent l’adresse 0x77 ce qui oblige à câbler la broche SDO sur le 3V3. Afin de minimiser le nombre de câbles utilisés, nous forçons l’adresse 0x76 :

capteur_G.begin(0x76); // SDO sur GND ou en l'air

Le capteur BMP280 est capable d’effectuer des acquisitions en continu. Ce mode de fonctionnement est déclenché par la méthode startNormalConversion() de notre objet capteur_G.

capteur_G.startNormalConversion();

Dans cet exemple, nous paramétrons au préalable une période d’une seconde entre 2 acquisitions à l’aide de la méthode setTimeStandby().

capteur_G.setTimeStandby(TIME_STANDBY_1000MS);

Les valeurs de température et de pression sont obtenues par l’appel de la méthode getMeasurements() dont nous testons le retour afin de n’afficher qu’une seule fois chaque acquisition:

if (capteur_G.getMeasurements(temperature_L, pression_L, altitude_L))

Il est à noter que cette méthode retourne également une estimation de l’altitude, calculée à partir de la pression et de la température mesurée. Cette grandeur d’altitude calculée ne nous intéresse pas dans ce projet.

Voici le code source Arduino pour la lecture des données du BMP280 par l’interface SPI:

/* Déclaration des bibliothèques utilisées */
#include <BMP280_DEV.h>

/* Déclaration globales */
BMP280_DEV      capteur_G(5);

// Fonction de démarrage, s'exécute une seule fois:
void setup() 
{
  // Ouverture du port série pour les traces
  Serial.begin(115200);

  // Configuration du capteur BMP280
  capteur_G.begin();
  capteur_G.setTimeStandby(TIME_STANDBY_1000MS); // Définie un temps de repos d'1 seconde
  capteur_G.startNormalConversion();  // Démarre des acquisitions en continu, espacées par le temps de repos défini précédemment.
}

// Fonction principale du programme, s'exécute en boucle:
void loop() 
{
  float temperature_L, pression_L, altitude_L;
  char tampon_l[60];

  if (capteur_G.getMeasurements(temperature_L, pression_L, altitude_L))
  {
    /* Une mesure a été réalisée */
    sprintf(tampon_l, "Temperature: %4.2f°C \t\t Pression: %4.2fhPa", temperature_L, pression_L);
    Serial.println(tampon_l);
  }
}

et le code source Arduino pour la lecture des données du BMP280 par l’interface I2C:

/* Déclaration des bibliothèques utilisées */
#include <BMP280_DEV.h>

/* Déclaration globales */
BMP280_DEV      capteur_G;

// Fonction de démarrage, s'exécute une seule fois:
void setup() 
{
  // Ouverture du port série pour les traces
  Serial.begin(115200);

  // Configuration du capteur BMP280
  capteur_G.begin(0x76); // SDO sur GND ou en l'air
  capteur_G.setTimeStandby(TIME_STANDBY_1000MS); // Définie un temps de repos d'1 seconde
  capteur_G.startNormalConversion();  // Démarre des acquisitions en continu, espacées par le temps de repos défini précédemment.
}

// Fonction principale du programme, s'exécute en boucle:
void loop() 
{
  float temperature_L, pression_L, altitude_L;
  char tampon_l[60];

  if (capteur_G.getMeasurements(temperature_L, pression_L, altitude_L))
  {
    /* Une mesure a été réalisée */
    sprintf(tampon_l, "Temperature: %4.2f°C \t\t Pression: %4.2fhPa", temperature_L, pression_L);
    Serial.println(tampon_l);
  }
}

Compilation et test de ce programme de lecture des données du BMP280

Une fois ce programme compilé et transféré dans l’ESP32-DevKit, le moniteur affiche en continu la température et la pression de la pièce obtenues par le capteur BMP280:

Affichage sur le Moniteur série de la température et de la pression mesurées par le BMP280
Affichage sur le Moniteur série de la température et de la pression mesurées par le BMP280

Maintenant que nous avons vérifié, la bonne gestion du capteur BMP280 par Arduino, intéressons nous à l’interface Bluetooth et à l’appli sur le smartphone.

S’abonner
Notification pour
guest
0 Commentaires
Commentaires en ligne
Afficher tous les commentaires