#define BLYNK_TEMPLATE_ID "TMPL2bUhx2aU7"
#define BLYNK_TEMPLATE_NAME "tp2"
#define BLYNK_AUTH_TOKEN "19_Uo0KzoY-nfZIJDHuAvHbxeg9dEavy"
#include <DHT.h>
#include <BlynkSimpleEsp32.h>
#define DHTPIN 18 // Broche GPIO à laquelle est connecté le capteur DHT
#define DHTTYPE DHT22 // Type de capteur DHT utilisé
#define RELAY_PIN_1 23 // Broche GPIO connectée au relais 1
#define RELAY_PIN_2 21 // Broche GPIO connectée au relais 2
#define RELAY_PIN_3 19 // Broche GPIO connectée au relais 3
#define PIR_PIN 4
const char *ssid = "Wokwi-GUEST"; // SSID de votre réseau WiFi
const char *pass = ""; // Mot de passe de votre réseau WiFi
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
bool switchOnFor30Secs = false;
void sendSensor() {
float temperature = dht.readTemperature(); // Lecture de la température
float humidity = dht.readHumidity(); // Lecture de l'humidité
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Échec de lecture du capteur DHT !");
return;
}
// Envoi des données de température et d'humidité à Blynk
Blynk.virtualWrite(V3, temperature);
Blynk.virtualWrite(V4, humidity);
}
void setup() {
Serial.begin(9600);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
dht.begin();
pinMode(RELAY_PIN_1, OUTPUT);
pinMode(RELAY_PIN_2, OUTPUT);
pinMode(RELAY_PIN_3, OUTPUT);
Serial.begin(115200);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// You can also specify server:
//Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass, "blynk.cloud", 80);
//Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass, IPAddress(192,168,1,100), 8080);
dht.begin();
// Setup a function to be called every second
timer.setInterval(1000L, sendSensor);
}
void loop() {
Blynk.run();
timer.run();
int pirState = digitalRead(PIR_PIN);
static unsigned long previousMillis = 0;
const long interval = 10000; // 30 secondes
// Si un mouvement est détecté
if (pirState == HIGH) {
digitalWrite(RELAY_PIN_1, HIGH);
digitalWrite(RELAY_PIN_2, HIGH);
digitalWrite(RELAY_PIN_3, HIGH);
switchOnFor30Secs = true;
Blynk.virtualWrite(V0, 1); // Activer le switch (button) 1 sur Blynk
Blynk.virtualWrite(V1, 1); // Activer le switch (button) 2 sur Blynk
Blynk.virtualWrite(V2, 1); // Activer le switch (button) 3 sur Blynk
previousMillis = millis(); // Réinitialiser le compteur de temps
}
// Éteindre les relais après 30 secondes
if (switchOnFor30Secs && millis() - previousMillis >= interval) {
digitalWrite(RELAY_PIN_1, LOW);
digitalWrite(RELAY_PIN_2, LOW);
digitalWrite(RELAY_PIN_3, LOW);
switchOnFor30Secs = false;
Blynk.virtualWrite(V0, 0); // Désactiver le switch (button) 1 sur Blynk
Blynk.virtualWrite(V1, 0); // Désactiver le switch (button) 2 sur Blynk
Blynk.virtualWrite(V2, 0); // Désactiver le switch (button) 3 sur Blynk
}
}
BLYNK_WRITE(V0) {
int relayState = param.asInt();
digitalWrite(RELAY_PIN_1, relayState);
}
BLYNK_WRITE(V1) {
int relayState = param.asInt(); // Récupère l'état du widget (1 pour allumé, 0 pour éteint)
digitalWrite(RELAY_PIN_2, relayState); // Contrôle le relais 2 en fonction de l'état du widget
}
BLYNK_WRITE(V2) {
int relayState = param.asInt(); // Récupère l'état du widget (1 pour allumé, 0 pour éteint)
digitalWrite(RELAY_PIN_3, relayState); // Contrôle le relais 3 en fonction de l'état du widget
}