#include <DHTesp.h>
DHTesp dhtInternalSensor; // Capteur interne
DHTesp dhtExternalSensor; // Capteur externe
// Définition des broches des capteurs DHT
const int DHT_PIN = 16; // Capteur interne (réfrigérateur)
const int DHT_PIN2 = 4; // Capteur externe
// Définition des broches pour l'ultrason
int trig = 27;
int echo = 26;
int distance;
// Définition des broches des LEDs
#define LED_RED 12
#define LED_YELLOW 17
#define LED_GREEN 18
void setup() {
// Initialisation de la communication série
Serial.begin(115200);
// Configurer les broches du capteur ultrasonique
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
// Configurer les capteurs DHT
dhtInternalSensor.setup(DHT_PIN, DHTesp::DHT22); // Capteur interne
dhtExternalSensor.setup(DHT_PIN2, DHTesp::DHT22); // Capteur externe
// Configurer les LEDs
pinMode(LED_RED, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
}
void loop() {
// Lire les données du capteur interne
TempAndHumidity internalData = dhtInternalSensor.getTempAndHumidity();
// Lire les données du capteur externe
TempAndHumidity externalData = dhtExternalSensor.getTempAndHumidity();
// Vérifier les lectures des capteurs DHT
if (isnan(internalData.temperature) || isnan(internalData.humidity)) {
Serial.println("Erreur de lecture du capteur interne");
} else {
// Afficher les données du capteur interne
Serial.print("Temp. interne: ");
Serial.print(internalData.temperature);
Serial.print("°C, Humi. interne: ");
Serial.print(internalData.humidity);
Serial.println("%");
}
if (isnan(externalData.temperature) || isnan(externalData.humidity)) {
Serial.println("Erreur de lecture du capteur externe");
} else {
// Afficher les données du capteur externe
Serial.print("Temp. externe: ");
Serial.print(externalData.temperature);
Serial.print("°C, Humi. externe: ");
Serial.print(externalData.humidity);
Serial.println("%");
}
// Calculer la distance avec le capteur ultrasonique
digitalWrite(trig, HIGH);
delay(10); // Réduction du délai pour améliorer la précision
digitalWrite(trig, LOW);
long reading = pulseIn(echo, HIGH);
// Si la lecture est inférieure à une certaine valeur, considérer cela comme une erreur
if (reading > 0) {
distance = (reading * 0.034 / 2); // Calculer la distance en cm
} else {
distance = -1; // Indiquer une erreur de lecture
}
// Afficher la distance dans le Moniteur Série
if (distance == -1) {
Serial.println("Erreur de lecture du capteur ultrasonique");
} else {
Serial.print("Distance (cm): ");
Serial.println(distance);
}
// Allumer/éteindre la LED rouge en fonction de la distance
if (distance > 200 || distance == -1) {
digitalWrite(LED_RED, HIGH); // Distance trop grande ou erreur, allumer la LED rouge
} else {
digitalWrite(LED_RED, LOW); // Distance correcte, éteindre la LED rouge
}
// Allumer/éteindre la LED jaune en fonction de l'humidité interne
if (internalData.humidity > 50) {
digitalWrite(LED_YELLOW, HIGH); // Humidité interne > 50%, allumer la LED jaune
} else {
digitalWrite(LED_YELLOW, LOW); // Humidité interne < 50%, éteindre la LED jaune
}
// Allumer/éteindre la LED verte en fonction de la température interne
if (internalData.temperature > 25) {
digitalWrite(LED_GREEN, HIGH); // Température interne > 25°C, allumer la LED verte
} else {
digitalWrite(LED_GREEN, LOW); // Température interne < 25°C, éteindre la LED verte
}
// Ajouter un délai pour ralentir la boucle
delay(2000); // Attendre 2 secondes avant de répéter
}