#include <DHT.h>
#include <ESP32Servo.h>
#include <WiFi.h>
#include "ThingSpeak.h"
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASS = "";
const int myChannelNumber = 2550208;
const char* write_API_Key = "9DP0SSAY2SG7Y2MC";
const char* server = "api.thingspeak.com";
#define RED_PIN 14
#define GREEN_PIN 33
#define BLUE_PIN 27
#define DHTPIN 15
#define DHTTYPE DHT22
#define ldrPin 35
#define CO2Pin 34
#define servoPin 25
const int ledPins[] = {23, 22, 21, 19, 18, 5, 4, 2, 12, 13};
int ledLevel = 0;
int CO2Value = 0;
float temperature=0.0;
float hum=0;
int ldrValue = 0;
bool fenetresOuvertes = false;
const int seuilDark = 100;
const int seuilLight = 500;
const int seuilBright = 800;
const int seuilVerybright = 1000;
DHT dht(DHTPIN, DHTTYPE);
Servo myServo;
WiFiClient Client;
void setup() {
Serial.begin(9600);
dht.begin();
myServo.attach(servoPin);
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
pinMode(CO2Pin, INPUT);
pinMode(ldrPin, INPUT);
for (int i = 0; i < 10; i++) {
pinMode(ledPins[i], OUTPUT);
}
WiFi.begin(WIFI_NAME, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
ThingSpeak.begin(Client);
}
void loop() {
CO2Value = analogRead(CO2Pin);
Serial.print("Valeur Potentiomètre: ");
Serial.println(CO2Value);
temperature = dht.readTemperature();
Serial.print("Valeur Temperateur: ");
Serial.println(temperature);
hum = dht.readHumidity();
Serial.print("Humidité: ");
Serial.print(hum);
ldrValue = analogRead(ldrPin);
Serial.print("Valeur LDR: ");
Serial.println(ldrValue);
if (temperature > 25) {
activerClimatisation();
} else if (temperature < 18) {
activerChauffage();
} else {
eteindreClimatisationChauffage();
}
if(!fenetresOuvertes && CO2Value>1000){
ouvrirFenetres();
fenetresOuvertes = true;
delay(20000);
}
else if (fenetresOuvertes && CO2Value <= 1000){
fermerFenetres();
fenetresOuvertes = false;
delay(20000);
}
if ( ldrValue <seuilDark) {
Serial.println("Niveau: Sombre");
activerLEDs(1);
delay(1000);
} else if (ldrValue < seuilLight) {
Serial.println("Niveau: Lumiere");
activerLEDs(1);
activerLEDs(2);
delay(1000);
} else if (ldrValue < seuilBright) {
Serial.println("Niveau: Brillant");
activerLEDs(1);
activerLEDs(2);
activerLEDs(3);
delay(1000);
} else if (ldrValue < seuilVerybright) {
Serial.println("Niveau: Tres Brillant");
activerLEDs(1);
activerLEDs(2);
activerLEDs(3);
activerLEDs(4);
delay(1000);
} else {
Serial.println("Niveau: Tres Tres Brillant");
delay(1000);
}
sendDataToThingSpeak();
}
void sendDataToThingSpeak() {
ThingSpeak.setField(1, temperature);
ThingSpeak.setField(2, hum);
ThingSpeak.setField(3, CO2Value);
ThingSpeak.setField(4, ldrValue);
int indicatorColor = 0; // Couleur par défaut
if (ldrValue < seuilDark) {
indicatorColor = 1; // Code pour la couleur rouge
} else if (ldrValue >= seuilDark && ldrValue < seuilLight) {
indicatorColor = 2; // Code pour la couleur jaune
} else {
indicatorColor = 3; // Code pour la couleur verte
}
// Utilisez un champ numérique pour représenter la couleur de l'indicateur
int writeResult = ThingSpeak.writeField(myChannelNumber, 4, indicatorColor , write_API_Key);
if (writeResult == 200) {
Serial.println("Data pushed successfully");
} else {
Serial.println("Push error: " + String(writeResult));
}
Serial.println("---");
}
void ouvrirFenetres() {
for (int POS = 0; POS<= 90; POS++) {
myServo.write(POS);
delay(10);
}
}
void fermerFenetres() {
for (int POS= 90; POS >= 0; POS--) {
myServo.write(POS);
delay(10);
}
}
void activerClimatisation() {
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, HIGH);
}
void activerChauffage() {
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
}
void eteindreClimatisationChauffage() {
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, LOW);
}
void activerLEDs(int numLEDs) {
for (int i = 0; i < 10; i++) {
if (i < numLEDs) {
digitalWrite(ledPins[i], HIGH);
} else {
digitalWrite(ledPins[i], LOW);
}
}
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
rgb1:R
rgb1:COM
rgb1:G
rgb1:B
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND
ldr1:VCC
ldr1:GND
ldr1:DO
ldr1:AO
pot1:VCC
pot1:SIG
pot1:GND
bargraph1:A1
bargraph1:A2
bargraph1:A3
bargraph1:A4
bargraph1:A5
bargraph1:A6
bargraph1:A7
bargraph1:A8
bargraph1:A9
bargraph1:A10
bargraph1:C1
bargraph1:C2
bargraph1:C3
bargraph1:C4
bargraph1:C5
bargraph1:C6
bargraph1:C7
bargraph1:C8
bargraph1:C9
bargraph1:C10
gnd1:GND
servo1:GND
servo1:V+
servo1:PWM