//l'importation des bibliothèques nécessaires
#include <WiFi.h>
#include "DHT.h"
#include "ThingSpeak.h"
#include <ESP32Servo.h>
// le nom du réseau WiFi et le mot de passe pour se connecter.
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASS = "";
//Définition des broches de connexion.
//capteur DHT22
const int DHT_PIN = 15;
//Définition du type de capteur DHT (DHT22)
#define DHTTYPE DHT22
DHT dht(DHT_PIN, DHTTYPE);
//déclaraton un objet de type Servo pour controler le servomoteur
Servo s ;
#define LED_BLEUE 32 // Broche de la LED climatisation
#define LED_ROUGE 33 // Broche de la LED chauffage
#define SEUIL_CLIMATISATION 30.0 // Seuil de température pour activer la climatisation
#define SEUIL_CHAUFFAGE 20.0 // Seuil de température pour activer le chauffage
//photoresistor config
#define light_PIN 35
const float GAMMA = 0.7;
const float RL10 = 50;
//LED BAR CONFIG
#define LedBarNumber 4
const int led_bar[] = {19,21,22,23};
//Déclaration et initialisation de temp, hum, co2 et light pour stocker les données de capteur de différents capteurs.
float temp = 0;
float hum = 0;
int co2 = 0;
int light = 0;
int potentiometer=36;
//Informations pour la connexion à ThingSpeak
const int myChannelNumber = 2542402;
const char* write_API_Key = "ZG5V86LLS6J3AKAW";
const char* server = "api.thingspeak.com";
// établir et gérer les connexions
WiFiClient client;
int pot=13;
/* déclaration et initialisation des seuil de température et Humidity pour
les prendre en compte lors de l'ouverture progressive des fenêtres */
float seuilTemperature = 25.0;
float seuilHumidite = 70.0;
void setup() {
// initialisation de serial monitor
Serial.begin(115200);
//broche de servo moteur
s.attach(12);
// initialisation du capteur DHT
dht.begin();
//mettons les leds comme sorties.
pinMode(LED_BLEUE, OUTPUT);
pinMode(LED_ROUGE, OUTPUT);
pinMode(13, INPUT);
//mettons les leds de bar light comme sorties.
for (int thisLed = 0; thisLed < LedBarNumber; thisLed++) {
pinMode(led_bar[thisLed], OUTPUT);
}
// Vérifion la connexion au WIFI
WiFi.begin(WIFI_NAME, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED){
delay(1000);
Serial.println("Wifi not connected");
}
Serial.println("Wifi connected !");
WiFi.mode(WIFI_STA);
//initialisation de la connexion avec le ThingSpeak
ThingSpeak.begin(client);
}
void loop() {
// Scénario : CO2 élevé
int analogValue = analogRead(potentiometer);
// Rescale to potentiometer's voltage
int voltage = map(analogValue, 0, 4095, 180, 0);
if (temp > seuilTemperature && hum > seuilHumidite) {
// Envoyer la valeur au servomoteur
s.write(180);
}else{
s.write(voltage);}
co2 = voltage;
if (isnan(hum) || isnan(temp) ){
Serial.println(F("Échec de la lecture du capteur DHT !"));
return;
}
// Scénario : Température
// Lecture des données via DHT et potentiometer
hum = dht.readHumidity();
temp = dht.readTemperature();
if(temp >= SEUIL_CLIMATISATION) {
Serial.println("---");
Serial.println(F("climat activer"));
Serial.println("---");
digitalWrite(LED_BLEUE, HIGH);
digitalWrite(LED_ROUGE, LOW);
} else if(temp<=SEUIL_CHAUFFAGE){
Serial.println("---");
Serial.println(F("chaufage activer"));
Serial.println("---");
digitalWrite(LED_BLEUE, LOW);
digitalWrite(LED_ROUGE, HIGH);
}
else{
Serial.println(F("l'atmosphère est bien"));
digitalWrite(LED_BLEUE, LOW);
digitalWrite(LED_ROUGE, LOW);
}
//Scénario : Luminosité
int analogValue_light = analogRead(35); // Read from ADC pin 35
float voltage_light = analogValue_light / 4095.0 * 3.3; // transformer la valeur lue en volts
light = analogValue_light;
//high AnalogValue => low light
//high voltageValue => high light
// Output the results
digitalWrite(19, HIGH);
Serial.println("voltage value: " + String(voltage_light));
HandleLedBar(voltage_light +1 );
Serial.println("Température : " + String(temp) + "°C");
Serial.println("Humidity : " + String(hum) + "%");
Serial.println("CO2 : " + String(co2));
Serial.println("Light : " + String(light) + " lux");
Serial.println("---");
delay(1000);
// Envoyer les données au ThingSpeak
sendToAPI();
}
void HandleLedBar(int lightLevel){
for (int thisLed = 0; thisLed < 4; thisLed++) {
if (thisLed < lightLevel) {
digitalWrite(led_bar[thisLed], HIGH);
}else {
digitalWrite(led_bar[thisLed], LOW);
}
}
}
void sendToAPI() {
ThingSpeak.setField(1,temp);
delay(500);
ThingSpeak.setField(2,hum);
delay(500);
ThingSpeak.setField(3,co2);
delay(500);
ThingSpeak.setField(4,light);
int writeResult = ThingSpeak.writeFields(myChannelNumber,write_API_Key);
if(writeResult == 200){
Serial.println("Data pushed successfull");
}else{
Serial.println("Push error" + String(writeResult));
}
Serial.println("---");
}