#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Définitions pour le DHT22
#define DHTPIN 2
#define DHTTYPE DHT22
// Définitions pour le LCD I2C
#define LCD_ADDRESS 0x27 // Adresse I2C typique 0x27 ou 0x3F
#define LCD_COLS 16
#define LCD_ROWS 2
// Initialiser les objets
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLS, LCD_ROWS);
// Variables pour stocker les mesures
float temperature;
float humidity;
float heatIndex;
void setup() {
// Initialiser la communication série
Serial.begin(9600);
Serial.println("DHT22 + LCD I2C - Initialisation");
// Initialiser le DHT22
dht.begin();
// Initialiser l'écran LCD
lcd.init();
lcd.backlight();
// Afficher le message de démarrage
lcd.setCursor(0, 0);
lcd.print("DHT22 + LCD");
lcd.setCursor(0, 1);
lcd.print("Initialisation...");
delay(2000);
lcd.clear();
}
void loop() {
// Lecture des données du DHT22
readSensorData();
// Affichage sur le moniteur série
printSerialData();
// Affichage sur l'écran LCD
printLCDData();
// Attendre 2 secondes avant la prochaine lecture
delay(2000);
}
void readSensorData() {
// Lecture de l'humidité
humidity = dht.readHumidity();
// Lecture de la température en Celsius
temperature = dht.readTemperature();
// Calcul de l'indice de chaleur (heat index)
heatIndex = dht.computeHeatIndex(temperature, humidity, false);
// Vérifier si les lectures ont échoué
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Erreur lecture DHT22 !");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Erreur capteur");
lcd.setCursor(0, 1);
lcd.print("Verifiez cablage");
// Réinitialiser les variables
temperature = 0;
humidity = 0;
heatIndex = 0;
}
}
void printSerialData() {
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print("°C | Humidite: ");
Serial.print(humidity);
Serial.print("% | Indice Chaleur: ");
Serial.print(heatIndex);
Serial.println("°C");
}
void printLCDData() {
// Effacer l'écran
lcd.clear();
// Première ligne : Température
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature, 1); // 1 décimale
lcd.print((char)223); // Symbole degré
lcd.print("C");
// Deuxième ligne : Humidité
lcd.setCursor(0, 1);
lcd.print("Hum: ");
lcd.print(humidity, 1); // 1 décimale
lcd.print("%");
// Alternance d'affichage toutes les 4 secondes
delay(2000);
// Effacer et afficher l'indice de chaleur
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Indice Chaleur:");
lcd.setCursor(0, 1);
lcd.print(heatIndex, 1);
lcd.print((char)223);
lcd.print("C");
}