Station météo connectée avec ESP32 et capteur BME280 : le projet complet

Station météo connectée avec girouette, pluviomètre et abri de capteurs

Savoir s’il va faire chaud demain, vérifier si la chambre des enfants est trop humide, ou voir la pression chuter avant un orage : tout ça, une petite station météo faite maison sait le faire. Et la bonne nouvelle, c’est qu’elle ne coûte pas cher et qu’elle se monte en un après-midi.

Dans ce projet, on va construire ensemble une station connectée avec une carte ESP32 et un capteur BME280. À la fin, vous ouvrirez une page sur votre téléphone et vous verrez la température, l’humidité et la pression de l’air, mises à jour toutes seules. On avance étape par étape, sans sauter de marche.

Ce qu’il vous faut

La liste est courte. Vous avez peut-être déjà une partie du matériel dans un tiroir :

  • Une carte ESP32 : c’est le cerveau de la station. Elle lit le capteur et elle parle au Wi-Fi de la maison. Une ESP32-DevKitC-VE fait parfaitement l’affaire.
  • Un module BME280 : une petite plaquette avec le capteur déjà soudé et quatre broches à brancher.
  • Une breadboard : c’est une plaque d’essai sans soudure, pleine de petits trous, pour tester le montage sans fer à souder.
  • Quatre fils de connexion et un câble USB pour relier la carte à l’ordinateur.
  • Un chargeur de téléphone USB pour alimenter la station quand elle sera installée.

Le BME280, c’est quoi ?

Le BME280 est une puce fabriquée par Bosch. Elle est minuscule, à peine 2,5 millimètres de côté, mais elle mesure trois choses à la fois : la température, l’humidité de l’air et la pression atmosphérique. Pour un usage à la maison, sa précision est très correcte : environ un degré pour la température, quelques pour cent pour l’humidité et un hectopascal pour la pression.

Attention à un piège très courant. Il existe un cousin presque identique, le BMP280. Même taille, même forme, mais il ne mesure pas l’humidité. Sur une photo, on les confond très facilement. Pas d’inquiétude : le programme de test plus bas vous dira tout de suite lequel vous avez.

Gros plan sur la puce Bosch BME280, un petit boîtier métallique carré avec un trou d’aération rond
La puce BME280 vue de très près : ce petit trou laisse entrer l’air à mesurer. Photo : Laserlicht, CC BY-SA 4.0, via Wikimedia Commons

Le capteur discute avec l’ESP32 grâce à une liaison appelée I2C. Retenez juste l’idée : deux fils suffisent pour se parler. Le fil SDA transporte les données, et le fil SCL donne le rythme, un peu comme un chef d’orchestre. Les deux autres fils servent à l’alimentation. C’est tout.

Étape 1 : le câblage

Posez l’ESP32 et le module BME280 sur la breadboard, puis reliez-les avec quatre fils :

  • VIN (ou VCC) du capteur vers la broche 3V3 de l’ESP32.
  • GND du capteur vers une broche GND de l’ESP32.
  • SDA du capteur vers la broche GPIO 21.
  • SCL du capteur vers la broche GPIO 22.

Branchez bien le capteur sur le 3,3 volts et pas sur le 5 volts. L’ESP32 travaille en 3,3 V, et la plupart des modules BME280 aussi. Si ce point vous semble flou, notre comparatif Arduino ou ESP32 explique pourquoi la tension compte autant.

Étape 2 : préparer le logiciel

On programme l’ESP32 avec le logiciel Arduino IDE, gratuit. Si vous ne l’avez pas encore, suivez notre guide pour installer Arduino IDE pas à pas. Ensuite, il reste deux petites choses à ajouter :

  1. Le support de l’ESP32 : ouvrez le gestionnaire de cartes, tapez « esp32 » et installez le paquet d’Espressif.
  2. La bibliothèque du capteur : dans le gestionnaire de bibliothèques, cherchez « Adafruit BME280 » et installez-la. Le logiciel vous propose d’ajouter les bibliothèques dont elle a besoin : acceptez.

Une bibliothèque, c’est du code déjà écrit par d’autres. Grâce à elle, lire la température tient en une seule ligne.

Étape 3 : un premier test

Avant d’ajouter le Wi-Fi, on vérifie que le capteur répond. Copiez ce petit programme, envoyez-le sur la carte, puis ouvrez le moniteur série (la petite loupe en haut à droite) réglé sur 115200 :

#include <Wire.h>
#include <Adafruit_BME280.h>

Adafruit_BME280 bme;

void setup() {
  Serial.begin(115200);
  if (!bme.begin(0x76)) {
    Serial.print("Capteur introuvable. Identifiant lu : 0x");
    Serial.println(bme.sensorID(), HEX);
    while (true) delay(1000);
  }
  Serial.println("BME280 detecte !");
}

void loop() {
  Serial.print(bme.readTemperature()); Serial.print(" C  ");
  Serial.print(bme.readHumidity());    Serial.print(" %  ");
  Serial.print(bme.readPressure() / 100.0); Serial.println(" hPa");
  delay(2000);
}

Si tout va bien, le message « BME280 detecte ! » apparaît, puis trois valeurs toutes les deux secondes. Soufflez doucement sur le capteur : l’humidité grimpe. Ça marche !

Le message « Capteur introuvable » s’affiche ? Pas de panique, regardez l’identifiant lu. S’il vaut 56, 57 ou 58, votre plaquette porte en fait un BMP280 : il faudra utiliser la bibliothèque « Adafruit BMP280 » et vous passer de l’humidité. S’il vaut 0, le capteur ne répond pas du tout. Le plus souvent, les fils SDA et SCL sont inversés. Sinon, remplacez 0x76 par 0x77 dans le code : c’est l’adresse du capteur, et elle change selon les modèles de plaquettes.

Étape 4 : afficher la météo sur votre téléphone

Maintenant, la partie la plus amusante. L’ESP32 va créer sa propre petite page web. Remplacez le programme précédent par celui-ci, en mettant le nom et le mot de passe de votre Wi-Fi à la place des exemples :

#include <WiFi.h>
#include <WebServer.h>
#include <Wire.h>
#include <Adafruit_BME280.h>

const char* WIFI_NOM = "MonWiFi";
const char* WIFI_MDP = "MonMotDePasse";

Adafruit_BME280 bme;
WebServer serveur(80);

void pageMeteo() {
  String page = "<html><head><meta charset='utf-8'>";
  page += "<meta http-equiv='refresh' content='30'></head>";
  page += "<body style='font-family:sans-serif'><h1>Ma station météo</h1>";
  page += "<p>Température : " + String(bme.readTemperature(), 1) + " °C</p>";
  page += "<p>Humidité : " + String(bme.readHumidity(), 0) + " %</p>";
  page += "<p>Pression : " + String(bme.readPressure() / 100.0, 0) + " hPa</p>";
  page += "</body></html>";
  serveur.send(200, "text/html", page);
}

void setup() {
  Serial.begin(115200);
  bme.begin(0x76);
  WiFi.begin(WIFI_NOM, WIFI_MDP);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.print("\nOuvrez http://");
  Serial.println(WiFi.localIP());
  serveur.on("/", pageMeteo);
  serveur.begin();
}

void loop() {
  serveur.handleClient();
}

Une fois la carte connectée, le moniteur série affiche une adresse du genre http://192.168.1.25. Tapez-la dans le navigateur de votre téléphone, connecté au même Wi-Fi. Votre météo apparaît, et la page se recharge seule toutes les trente secondes.

Petite astuce : l’ESP32 classique ne capte que le Wi-Fi 2,4 GHz. Si votre box diffuse deux réseaux, choisissez celui qui n’a pas « 5G » dans son nom.

Comprendre la pression affichée

La pression baisse quand on monte : environ un hectopascal tous les huit mètres près du sol. À Rabat, au bord de la mer, vous lirez autour de 1013 hPa. À Ifrane, à plus de 1600 mètres, plutôt 830 hPa. Ce n’est pas une erreur ! Ce qui compte pour prévoir le temps, c’est la variation. Si la pression descend vite en quelques heures, sortez le parapluie.

Étape 5 : installer la station dehors

Un capteur placé en plein soleil peut indiquer plusieurs degrés de trop, parfois même dix. Les météorologues le savent depuis longtemps : ils mettent leurs thermomètres dans un abri blanc, à l’ombre, avec des lamelles qui laissent passer l’air.

Abri météorologique blanc à lamelles posé sur un pied, dans un terrain dégagé
Un abri météo à lamelles : blanc pour renvoyer le soleil, ajouré pour laisser circuler l’air. Photo : CambridgeBayWeather, domaine public, via Wikimedia Commons

Vous pouvez faire pareil en petit. Quelques règles simples :

  • À l’ombre et à l’air libre : loin d’un mur exposé au soleil, d’un climatiseur ou d’une fenêtre de cuisine.
  • À hauteur d’homme : entre 1,25 et 2 mètres du sol, comme les vraies stations.
  • Un petit abri maison : une pile de soucoupes de pots de fleurs blanches, espacées de deux centimètres, protège très bien de la pluie et du soleil.
  • Le capteur un peu à l’écart : l’ESP32 chauffe légèrement quand il travaille. Éloignez le BME280 d’une dizaine de centimètres avec des fils plus longs.

Et la carte ? Elle n’aime ni la pluie ni la poussière. Rangez-la dans un boîtier étanche IP67, avec le chargeur USB, et faites sortir seulement les fils du capteur par un presse-étoupe, c’est-à-dire un passe-câble étanche qui se visse sur la paroi. Surtout, ne mettez pas le BME280 dans la boîte fermée : il mesurerait l’air de la boîte, pas celui du jardin.

Pour aller plus loin

Votre station marche ? Bravo ! Voici quelques idées pour la faire évoluer, une à la fois :

  • La faire tourner sur batterie : l’ESP32 peut dormir entre deux mesures et ne se réveiller que toutes les dix minutes. Avant de choisir la batterie, faites le calcul avec notre méthode pour estimer l’autonomie d’un projet IoT.
  • Garder un historique : envoyez les mesures vers une application gratuite de tableaux de bord pour voir les courbes de la semaine.
  • Installer la station très loin : au fond d’un champ, le Wi-Fi ne suffit plus. La radio LoRa porte à plusieurs kilomètres. Nous avons rassemblé des exemples concrets dans notre article sur les applications LoRa au Maroc.
  • Ajouter des capteurs : un pluviomètre, un capteur de lumière ou un anémomètre pour le vent.

En résumé

Une carte, un capteur, quatre fils et quelques dizaines de lignes de code : c’est tout ce qu’il faut pour avoir votre propre station météo connectée. Le plus long, c’est souvent de trouver le bon endroit pour l’installer !

Pour choisir votre carte, comparez les modèles de notre rayon cartes ESP32, de la DevKitC classique aux versions plus récentes comme l’ESP32-C6, compatible Wi-Fi 6. Et si vous bloquez sur une étape, écrivez-nous : on vous aidera à faire marcher votre station.

Ce site utilise des cookies pour vous offrir une meilleure expérience de navigation. En naviguant sur ce site, vous acceptez notre utilisation des cookies.