#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 heatButtonActive = false;
bool coolButtonActive = 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");
// Vérifiez l'état des boutons avant d'activer le chauffage ou le refroidissement
if (!heatButtonActive && !coolButtonActive) {
if (currentTemperature < 23) {
heat(); // Activer le chauffage
} else if (currentTemperature > 39) {
cool(); // Activer le refroidissement
} else {
stopHeating(); // Désactiver le chauffage
stopCooling(); // Désactiver le refroidissement
}
}
}
BLYNK_WRITE(V1) {
heatButtonActive = param.asInt();
if (heatButtonActive) {
heat();
Blynk.virtualWrite(V2, 0); // Désactiver le bouton de refroidissement
Blynk.virtualWrite(V3, 0); // Désactiver le bouton d'arrêt
} else {
stopHeating();
}
}
BLYNK_WRITE(V2) {
coolButtonActive = param.asInt();
if (coolButtonActive) {
cool();
Blynk.virtualWrite(V1, 0); // Désactiver le bouton de chauffage
Blynk.virtualWrite(V3, 0); // Désactiver le bouton d'arrêt
} else {
stopCooling();
}
}
BLYNK_WRITE(V3) {
bool stopButton = param.asInt();
if (stopButton) {
stopHeating();
stopCooling();
heatButtonActive = false;
coolButtonActive = false;
Serial.println("Système arrêté");
}
}
void heat() {
digitalWrite(HEAT_RELAY_PIN, HIGH);
digitalWrite(COOL_RELAY_PIN, LOW);
Serial.println("Chauffage activé (Relais de chauffage activé)");
}
void cool() {
digitalWrite(HEAT_RELAY_PIN, LOW);
digitalWrite(COOL_RELAY_PIN, HIGH);
Serial.println("Refroidissement activé (Relais de refroidissement activé)");
}
void stopHeating() {
digitalWrite(HEAT_RELAY_PIN, LOW);
Serial.println("Chauffage désactivé (Relais de chauffage désactivé)");
}
void stopCooling() {
digitalWrite(COOL_RELAY_PIN, LOW);
Serial.println("Refroidissement désactivé (Relais de refroidissement désactivé)");
}