#define BLYNK_TEMPLATE_ID "TMPL2nGVzBKsk"
#define BLYNK_TEMPLATE_NAME "ESP32 Project"
#define BLYNK_AUTH_TOKEN "e38LP-smsbUCToqc9FXRi-1qwzVfJzMf"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHTesp.h> // Bibliothèque pour le capteur DHT
// Informations WiFi
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Broches des capteurs et LEDs
const int DHT_PIN = 15; // Broche pour le capteur DHT22
const int LED_climatiseur = 26; // Broche pour la LED du climatiseur
const int LED_chf = 27; // Broche pour la LED de chauffage
const int PIR_PIN = 13; // Broche pour le capteur PIR
DHTesp dht;
BlynkTimer timer;
bool mouvementDetecte = false; // Indicateur de mouvement
// Fonction pour envoyer les données du capteur DHT
void sendSensor()
{
TempAndHumidity data = dht.getTempAndHumidity();
// Vérification des données valides
if (isnan(data.temperature) || isnan(data.humidity))
{
Serial.println("Erreur de lecture du capteur DHT !");
return;
}
// Affichage des données sur le moniteur série
Serial.print("Température : ");
Serial.print(data.temperature);
Serial.println(" °C");
Serial.print("Humidité : ");
Serial.print(data.humidity);
Serial.println(" %");
// Envoi des données vers Blynk
Blynk.virtualWrite(V2, data.temperature);
Blynk.virtualWrite(V1, data.humidity);
// Gestion des LEDs en fonction des seuils
if (data.temperature > 40 || data.humidity > 20)
{
digitalWrite(LED_climatiseur, HIGH);
Serial.println("LED_climatiseur ALLUMÉE !");
}
else
{
digitalWrite(LED_climatiseur, LOW);
Serial.println("LED_climatiseur ÉTEINTE !");
}
if (data.temperature < 18)
{
digitalWrite(LED_chf, HIGH);
Serial.println("LED_chf ALLUMÉE !");
}
else
{
digitalWrite(LED_chf, LOW);
Serial.println("LED_chf ÉTEINTE !");
}
}
// Fonction pour surveiller le capteur PIR
void checkMotion()
{
if (digitalRead(PIR_PIN) == HIGH)
{
if (!mouvementDetecte)
{
mouvementDetecte = true;
Serial.println("Mouvement détecté !");
Blynk.virtualWrite(V3, "Mouvement détecté !");
}
}
else
{
if (mouvementDetecte)
{
mouvementDetecte = false;
Serial.println("Aucun mouvement détecté.");
Blynk.virtualWrite(V3, "Aucun mouvement.");
}
}
}
void reconnectWiFi()
{
if (WiFi.status() != WL_CONNECTED)
{
Serial.println("Connexion WiFi perdue. Tentative de reconnexion...");
WiFi.begin(ssid, pass);
// Tentatives de reconnexion
int retryCount = 0;
while (WiFi.status() != WL_CONNECTED && retryCount < 10)
{
delay(1000);
Serial.print(".");
retryCount++;
}
if (WiFi.status() == WL_CONNECTED)
{
Serial.println("\nWiFi reconnecté !");
Blynk.connect();
}
else
{
Serial.println("\nImpossible de se reconnecter au WiFi.");
}
}
}
void setup()
{
// Initialisation des broches
pinMode(LED_climatiseur, OUTPUT);
pinMode(LED_chf, OUTPUT);
pinMode(PIR_PIN, INPUT);
// Initialisation du moniteur série
Serial.begin(115200);
// Initialisation du capteur DHT
dht.setup(DHT_PIN, DHTesp::DHT22);
// Connexion au WiFi
Serial.println("Connexion à WiFi...");
WiFi.begin(ssid, pass);
// Attente de la connexion WiFi
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.print(".");
}
Serial.println("\nWiFi connecté !");
Serial.println("Adresse IP : ");
Serial.println(WiFi.localIP());
// Initialisation de Blynk
Blynk.begin(auth, ssid, pass);
// Configuration des timers
timer.setInterval(1000, sendSensor); // Exécuter sendSensor() toutes les 1 seconde
timer.setInterval(500, checkMotion); // Vérifier le capteur PIR toutes les 0.5 seconde
}
void loop()
{
reconnectWiFi();
Blynk.run();
timer.run();
}