Station météo Arduino avec capteurs BME280, DHT11 et capteur de poussière

Station météo Arduino avec capteurs BME280, DHT11 et capteur de poussière

Ce projet permet de créer une station météo connectée Arduino capable de mesurer plusieurs paramètres environnementaux :

  • température
  • humidité
  • pression atmosphérique
  • qualité de l'air (poussière)
  • température ressentie
  • point de rosée

Les données sont affichées sur un écran LCD puis envoyées vers un serveur web via un module WiFi ESP8266.


Matériel utilisé

Carte microcontrôleur

  • Arduino UNO ou compatible

Capteurs

  • BME280 : température, humidité, pression atmosphérique
  • DHT11 : humidité et température
  • GP2Y1010AU0F : capteur de poussière

Communication

  • ESP8266 (utilisé en mode AT)
  • communication série via SoftwareSerial

Affichage

  • écran LCD 16x2

Fonctionnement du module

  1. lecture des capteurs environnementaux
  2. calcul du point de rosée
  3. mesure de la qualité de l'air (poussière)
  4. affichage des valeurs sur écran LCD
  5. envoi des données vers un serveur web via ESP8266

Calcul du point de rosée

Le point de rosée correspond à la température à laquelle l'humidité de l'air se condense.

double dewPoint(double celsius, double humidity) {

  const double a = 17.27;
  const double b = 237.7;

  double temp = (a * celsius) / (b + celsius) + log(humidity * 0.01);

  return (b * temp) / (a - temp);
}

Configuration du module WiFi ESP8266

Le module ESP8266 est utilisé en mode AT pour transmettre les données vers un serveur web via HTTP.

SoftwareSerial softSerial(10, 11);

String SSID = "";
String PASS = "";

Code Arduino complet

#include "SparkFunBME280.h"
#include "Wire.h"
#include "SPI.h"
#include "DHT.h"
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(3,4,5,6,9,8);

#define REFRESH 3000

#define DHTPIN 2
#define DHTTYPE DHT11

SoftwareSerial softSerial(10, 11);

String SSID = "";
String PASS = "";

DHT dht(DHTPIN, DHTTYPE);
BME280 capteur;

int dustPin = 7;
int ledPin = 0;

float voltsMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;
float Temperature = 0;
float Pression_at = 0;

double dewPoint(double celsius, double humidity) {

  const double a = 17.27;
  const double b = 237.7;

  double temp = (a * celsius) / (b + celsius) + log(humidity * 0.01);

  return (b * temp) / (a - temp);
}

void setup() {

  Serial.begin(9600);

  pinMode(ledPin, OUTPUT);

  capteur.settings.commInterface = I2C_MODE;
  capteur.settings.I2CAddress = 0x76;

  capteur.begin();

  dht.begin();

  lcd.begin(16,2);

  softSerial.begin(9600);
}

void loop() {

  voltsMeasured = analogRead(dustPin);

  calcVoltage = voltsMeasured * (5.0 / 1024.0);

  dustDensity = 0.17 * calcVoltage - 0.1;

  Temperature = capteur.readTempC();

  Pression_at = capteur.readFloatPressure();

  float humidity = dht.readHumidity();

  lcd.setCursor(0,0);

  lcd.print("Temp:");
  lcd.print(Temperature);

  lcd.setCursor(0,1);

  lcd.print("Hum:");
  lcd.print(humidity);

  delay(REFRESH);

}

Format des données envoyées au serveur

Exemple de requête HTTP envoyée :

GET /meteo/receive.php?capteur=1&temperature=22&pression=1013&humidite=45


Améliorations possibles

  • ajouter écran OLED
  • ajouter stockage carte SD
  • utiliser ESP32
  • envoi MQTT
  • boîtier étanche extérieur
  • historique des mesures

Conclusion

Cette station météo Arduino permet de collecter des données environnementales complètes et de les transmettre vers un serveur web. Elle constitue une excellente base pour un projet IoT ou domotique.

jensepas

Auteur de l'article

jensepas

Publié le : 01/06/2022
Mise à jour : 25/03/2026