DOMOTIQUE : Mesure de la température avec le BMP280

03 février 2019 rdorigny 0 commentaires

Le BMP280 est un capteur météo capable de mesurer la température, la pression et l'humidité. Il est une évolution du BMP180 que je vous avez présenté dans un article précédent.

Dans cette article, je vais vous expliquer comment mettre en oeuvre ce capteur avec un ESP32, dans votre jardin par exemple. Deux conditions seront néanmoins nécessaire pour que notre système fonctionne correctement, il faudra disposer d'une prise électrique extérieure et avoir de la réception au réseau wifi.





Le BMP280 communique avec l'ESP32 en I2C, à noter qu'il existe des modèles avec ports SPI. Le schéma de montage est assez basique sachant qu'on l'alimente par le port USB de l'ESP32 avec un alimentation de téléphone classique.


Le code de configuration de l'ESP32:
#include (WiFi.h) //remplacer les () par <>
#include (HTTPClient.h)  //remplacer les () par <>
#include (Wire.h)  //remplacer les () par <>
#include "Adafruit_BME280.h"
#include "esp_system.h"

#define I2C_SDA 21
#define I2C_SCL 22
#define SEALEVELPRESSURE_HPA (1013.25)
#define BME280_ADD 0x76
 
const char* ssid = "yourssid";
const char* password =  "yourcode";

int cpt=0;

Adafruit_BME280 bme(I2C_SDA, I2C_SCL);
 
void setup() {
 
  Serial.begin(115200);
  delay(4000);   //Delay needed before calling the WiFi.begin

 //Connexion au wifi
  WiFi.begin(ssid, password); 
  while (WiFi.status() != WL_CONNECTED) { //Check la connexion
    delay(1000);
    Serial.println("Tentative de connexion au WiFi...");
    cpt++;
    if (cpt>30)
      {
      Serial.println("Pas de connexion au wifi! Reboot automatique...");
      esp_restart();
      }
  }
  Serial.println("Connexion au réseau local wifi");

  //Connexion au BMP280
  bool status;
  status = bme.begin(BME280_ADD);
  if (!status) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }
  delay(1000);
}
 
void loop() {
 
 if(WiFi.status()== WL_CONNECTED){   //Check WiFi connection status
   //Emission de la requete vers l'API
   HTTPClient http;   
   float pr=bme.readPressure();
   pr=pr/100;
   http.begin("http://www.votresite.fr/api.php?tp="+String(bme.readTemperature())
+"&hum="+String(bme.readHumidity())+"&pr="+String(pr)+"&sonde=5");  //Specify destination for HTTP request
   http.addHeader("Content-Type", "text/plain");             //Specify content-type header
   int httpResponseCode = http.POST("POSTING from ESP32");   //Send the actual POST request
   if(httpResponseCode>0){
     String response = http.getString();                       //Get the response to the request
    Serial.println(httpResponseCode);   //Print return code
    Serial.println(response);           //Print request answer
   }else{ 
    Serial.print("Error on sending POST: ");
    Serial.println(httpResponseCode); 
   }
   http.end();  //Free resources
 }else{
    Serial.println("Perte de la connexion WIFI. Reboot automatique."); 
    esp_restart();
 }
 
delay(900000);  //Emission toutes les 15 minutes
//delay(60000); //Si besoin de tests
}

Les données sont transmises par une requête web sur une api écrite en php. Vous trouverez un exemple de code api.php ici.

Réalisation:
Pour la réalisation, j'ai soudé l'ESP32 sur plaque PCB de prototypage, le tout installé dans une petite boite en plastique pour protéger la plaquette.


L'ESP32 ne chauffe pas énormément mais suffisamment pour fausser les mesures de 2 ou 3 degrés. Donc j'ai fait en sorte de sortir le capteur BMP280 du boitier plastique.


J'alimente le tout avec une vieille alimentation de téléphone (5V) sur le port usb de l'ESP32.









Pseudonyme (obligatoire) :
Adresse mail (obligatoire) :
Site web :




© 2019 www.doritique.fr par Robert DORIGNY