// Définit la sortie de débogage sur le port série
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL2t-NjDsYl"
// Nom du modèle Blynk
#define BLYNK_TEMPLATE_NAME "Weather station"
// Inclut les bibliothèques nécessaires
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include "DHT.h"
#include <ESP32Servo.h>
// Initialise l'objet Servo et la position initiale
Servo servo;
int pos = 0;
// Variables pour stocker les données de capteurs
float temperature; // Paramètres
float humidity;
// Broches pour les composants
int buzzer = 21;
const int servoPin = 18;
const int motionSensorPin = 4;
const int analogPin = 34;
// Constantes pour certains paramètres
const float GAMMA = 0.7;
const float RL10 = 85;
// Identifiants de connexion Wi-Fi et Blynk
char auth[] = "t3QyIy4vyDqenaFz8P4MlJL1FyBY0GfF"; //jeton d'authentification
char ssid[] = "Wokwi-GUEST"; // nom du réseau Wi-Fi (SSID)
char pass[] = ""; // mot de passe du réseau Wi-Fi
// Broche utilisée par le capteur DHT
#define DHTPIN 15 // Le capteur DHT est connecté à D15
// Type de capteur DHT (DHT 22, AM2302, AM2321)
#define DHTTYPE DHT22
// Initialise le capteur DHT
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
// Gère l'état du commutateur virtuel V4 dans l'application Blynk
BLYNK_WRITE(V4) {
int switchState = param.asInt(); // Obtient l'état du commutateur (1 pour activé, 0 pour désactivé)
if (switchState == 1) {
// Code à exécuter lorsque le commutateur est activé
for (pos = 0; pos <= 180; pos += 1) {
servo.write(pos);
delay(15);
}
for (pos = 180; pos >= 0; pos -= 1) {
servo.write(pos);
delay(15);
}
} else {
// Code à exécuter lorsque le commutateur est désactivé
servo.write(0);
}
}
// Fonction pour convertir la valeur analogique en valeur de lux et la transmettre à l'application Blynk
void luminosite(int a) {
int analogValue = analogRead(a);
float lux = analogValue;
Serial.println(lux);
Blynk.virtualWrite(V2, lux);
}
// Fonction pour détecter le mouvement et activer le buzzer
void motion() {
int motionState = digitalRead(motionSensorPin);
Blynk.virtualWrite(V3, motionState);
if (motionState == HIGH) {
Serial.println("Détection de mouvement");
digitalWrite(buzzer, HIGH);
tone(8, 262, 250); // Émet un ton lorsque le mouvement est détecté
} else {
Serial.println("Absence de détection de mouvement");
digitalWrite(buzzer, LOW);
}
}
// Fonction pour lire les valeurs des capteurs et les transmettre à l'application Blynk
void sendSensor() {
humidity = dht.readHumidity();
temperature = dht.readTemperature();
luminosite(analogPin);
motion();
Serial.print("Humidité ");
Serial.println(humidity);
Serial.print("Température ");
Serial.println(temperature);
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Échec de la lecture du capteur DHT !");
return;
}
Blynk.virtualWrite(V0, temperature); // Transmet toutes les valeurs à leurs broches virtuelles respectives
Blynk.virtualWrite(V1, humidity);
}
void setup() {
Serial.begin(115200);
pinMode(buzzer, OUTPUT);
servo.attach(servoPin, 500, 2400);
pinMode(motionSensorPin, INPUT);
dht.begin();
delay(1000);
Blynk.begin(auth, ssid, pass);
delay(1000);
timer.setInterval(1000L, sendSensor); // La fonction sendSensor s'exécutera toutes les 1000 millisecondes
}
void loop() {
Blynk.run();
timer.run();
}