#include <ESP32Servo.h>
#include "DHTesp.h"
#include "DHT.h"
#include <WiFi.h>
#include "ThingSpeak.h"
const int DHT_PIN = 12;
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASS = "";
//thingspeak details
const int myChannelNumber = 2545327;
const char* write_API_Key = "OYCU4PU03FPZ1M1D";
const char* server = "api.thingspeak.com";
float humidity;
float temp;
//int detectCO2;
//DHT22 details
#define DHTTYPE DHT22
DHT dht(DHT_PIN, DHTTYPE);
WiFiClient client;
Servo servo;
int bleu = 33;
int green = 26;
int red = 14;
int dhtPin = 12;
int ldrPin = 2;
int co2Pin = 13;
int maxCO2_ = 1500;
int ledONE = 19;
int ledTWO = 18;
int ledTHREE = 5;
int ledFOUR = 17;
int seuilChauf = 15;
int seuilClima = 34;
//10K lux
int bright = 156;
//400lux
int light = 1100;
//10lux
int dark = 3431;
void colorRGB(int re_d , int gree_n , int ble_u)
{
analogWrite(red, re_d);
analogWrite(green, gree_n);
analogWrite(bleu, ble_u);
delay(4000);
}
void open(int p){
servo.write(p);
//delay(250);
}
void close(){
servo.write(0);
delay(250);
}
DHTesp dhtCaptur;
void setup() {
dht.begin();
WiFi.begin(WIFI_NAME, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED){
delay(1000);
Serial.println("Wifi not connected");
}
Serial.println("Wifi connected !");
Serial.println("Local IP: " + String(WiFi.localIP()));
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
servo.attach(23);
dhtCaptur.setup(dhtPin, DHTesp::DHT22);
pinMode(bleu, OUTPUT);
pinMode(green, OUTPUT);
pinMode(red, OUTPUT);
pinMode(ldrPin, INPUT);
pinMode(ledONE, OUTPUT);
pinMode(ledTWO, OUTPUT);
pinMode(ledTHREE, OUTPUT);
pinMode(ledFOUR, OUTPUT);
Serial.begin(115200);
Serial.println("Hello, ESP32!");
}
void sendDataToThingSpeak(){
ThingSpeak.setField(1,temp);
delay(500);
ThingSpeak.setField(2,humidity);
//ThingSpeak.setField(3,detectCO2);
}
void loop() {
int detectCO2 = map(analogRead(co2Pin), 0, 4095, 0, maxCO2_);
int ld_r = analogRead(ldrPin);
TempAndHumidity data = dhtCaptur.getTempAndHumidity();
float temp = data.temperature;
float humidity = data.humidity;
Serial.println("ldr:");
Serial.println(ld_r);
Serial.println("temp:");
Serial.println(temp);
Serial.println("humidity:");
Serial.println(humidity);
Serial.println("CO2:");
Serial.println(detectCO2);
humidity = dht.readHumidity();
temp = dht.readTemperature();
if (isnan(humidity) || isnan(temp) ){
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
if(detectCO2 > 1000 || temp > 25 || humidity > 70) open(90);
else if(detectCO2 > 700 && detectCO2<1000) open(30);
else close();
if(temp < seuilChauf) colorRGB(255, 0, 0);
else if(temp > seuilClima) colorRGB(0, 0, 255);
else colorRGB(0, 0, 0);
if(ld_r >= dark){
digitalWrite(ledONE, HIGH);
digitalWrite(ledTWO, LOW);
digitalWrite(ledTHREE, LOW);
digitalWrite(ledFOUR, LOW);
}
else if(ld_r < dark && ld_r > light)
{
digitalWrite(ledONE, HIGH);
digitalWrite(ledTWO, HIGH);
digitalWrite(ledTHREE, LOW);
digitalWrite(ledFOUR, LOW);
}
else if(ld_r <= light && ld_r > bright)
{
digitalWrite(ledONE, HIGH);
digitalWrite(ledTWO, HIGH);
digitalWrite(ledTHREE, HIGH);
digitalWrite(ledFOUR, LOW);
}
else if(ld_r <= bright)
{
digitalWrite(ledONE, HIGH);
digitalWrite(ledTWO, HIGH);
digitalWrite(ledTHREE, HIGH);
digitalWrite(ledFOUR, HIGH);
}
int writeResult = ThingSpeak.writeFields(myChannelNumber,write_API_Key);
Serial.println("Temp: " + String(temp, 1) + "°C");
Serial.println("Humidity: " + String(humidity, 2) + "%");
//Serial.println("CO2 : " + String(detectCO2, 3) + "ppm");
if(writeResult == 200){
Serial.println("Data pushed successfull");
}else{
Serial.println("Push error" + String(writeResult));
}
Serial.println("---");
sendDataToThingSpeak();
delay(16000);
}