#define BLYNK_TEMPLATE_ID "TMPL2L2b1hD0A"
#define BLYNK_TEMPLATE_NAME "temperature"
#define BLYNK_AUTH_TOKEN "_0hkAZ3lG-iJ46BXxePZ5crjK5Z7FXNP"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Définir les broches pour les relais et le capteur de température
#define HEAT_RELAY_PIN 16
#define COOL_RELAY_PIN 17
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
// Variables pour suivre l'état des boutons
bool heatEnabled = false;
bool coolEnabled = false;
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(HEAT_RELAY_PIN, OUTPUT);
pinMode(COOL_RELAY_PIN, OUTPUT);
digitalWrite(HEAT_RELAY_PIN, LOW);
digitalWrite(COOL_RELAY_PIN, LOW);
Blynk.begin(auth, ssid, pass);
timer.setInterval(2000L, envoyerTemperature);
Serial.println("ESP32 Temp Control Initialized");
}
void loop() {
Blynk.run();
timer.run();
}
void envoyerTemperature() {
float currentTemperature = dht.readTemperature();
if (isnan(currentTemperature)) {
Serial.println("Erreur de lecture du capteur de température!");
return;
}
Blynk.virtualWrite(V0, currentTemperature);
Serial.print("Température actuelle: ");
Serial.print(currentTemperature);
Serial.println(" °C");
// Contrôle automatique
if (currentTemperature < 22) {
if (!heatEnabled) {
heat(); // Activer le chauffage si la température < 22
}
} else {
stopHeating(); // Désactiver le chauffage si la température >= 22
}
if (currentTemperature > 35) {
if (!coolEnabled) {
cool(); // Activer le refroidissement si la température > 35
}
} else {
stopCooling(); // Désactiver le refroidissement si la température <= 35
}
}
BLYNK_WRITE(V1) { // Bouton pour désactiver le chauffage
heatEnabled = param.asInt();
if (!heatEnabled) {
stopHeating(); // Désactiver le chauffage
} else {
// Vérifiez si le refroidissement est actif et désactivez-le
if (coolEnabled) {
stopCooling();
}
heat(); // Activer le chauffage
}
}
BLYNK_WRITE(V2) { // Bouton pour désactiver le refroidissement
coolEnabled = param.asInt();
if (!coolEnabled) {
stopCooling(); // Désactiver le refroidissement
} else {
// Vérifiez si le chauffage est actif et désactivez-le
if (heatEnabled) {
stopHeating();
}
cool(); // Activer le refroidissement
}
}
BLYNK_WRITE(V3) { // Bouton d'arrêt d'urgence
stopHeating();
stopCooling();
heatEnabled = false;
coolEnabled = false;
Serial.println("Système arrêté");
}
void heat() {
digitalWrite(HEAT_RELAY_PIN, HIGH);
heatEnabled = true; // Mettez à jour l'état du chauffage
Blynk.virtualWrite(V1, 1); // Activer le bouton de chauffage sur Blynk
Serial.println("Chauffage activé (Relais de chauffage activé)");
}
void cool() {
digitalWrite(COOL_RELAY_PIN, HIGH);
coolEnabled = true; // Mettez à jour l'état du refroidissement
Blynk.virtualWrite(V2, 1); // Activer le bouton de refroidissement sur Blynk
Serial.println("Refroidissement activé (Relais de refroidissement activé)");
}
void stopHeating() {
digitalWrite(HEAT_RELAY_PIN, LOW);
heatEnabled = false; // Mettez à jour l'état du chauffage
Blynk.virtualWrite(V1, 0); // Désactiver le bouton de chauffage sur Blynk
Serial.println("Chauffage désactivé (Relais de chauffage désactivé)");
}
void stopCooling() {
digitalWrite(COOL_RELAY_PIN, LOW);
coolEnabled = false; // Mettez à jour l'état du refroidissement
Blynk.virtualWrite(V2, 0); // Désactiver le bouton de refroidissement sur Blynk
Serial.println("Refroidissement désactivé (Relais de refroidissement désactivé)");
}