#include <DHT.h>
#include <LiquidCrystal.h>
#include <Wire.h>
#include <Arduino.h>
#include <WiFi.h>
#include <ESP32Firebase.h>
#include <ArduinoJson.h> 


const char* ssid = "Wokwi-GUEST";
const char* password = "";

#define REFERENCE_URL "https://dht11firebase-ebfeb-default-rtdb.firebaseio.com/" 

#define PPM_PIN 0

#define DHTPIN 23      
#define DHTTYPE DHT22  

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(12,25,21,19,17,4);


int ledPinR = 15;  
int ledPinG = 16; 

Firebase firebase(REFERENCE_URL);

void setup() {
  Wire.begin(23, 22);
  Serial.begin(9600);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("Connected to WiFi");
  Serial.println(WiFi.localIP());
  pinMode(ledPinR, OUTPUT);  
  pinMode(ledPinG, OUTPUT);  
  lcd.begin(16, 2);
  lcd.print("System Starting !");
}

void loop() {
 
  float temperature = dht.readTemperature();
  float h = dht.readHumidity();
  int16_t ppmValue = analogRead(PPM_PIN);

  firebase.setString("Sensor_Data/Temperature",  String(temperature));
  firebase.setString("Sensor_Data/Humidity", String(h));
  firebase.setString("Sensor_Data/AirQuality", String(ppmValue));

  firebase.json(true);
  

  if (temperature > 39 || temperature < 18 || h < 20 || h > 90 ) {
    lcd.clear();
    digitalWrite(ledPinR, HIGH); 
    digitalWrite(ledPinG, LOW); 
    Serial.print(F("Temperature: "));
    Serial.print(temperature);
    Serial.println(F("°C"));
    lcd.print(temperature);
    lcd.print("C /");
    Serial.print(F("Humidité: "));
    Serial.print(h);
    lcd.print(h);
    lcd.print("%");
    Serial.println(F("%"));
     
  } else {
    lcd.clear();
    digitalWrite(ledPinG, HIGH); 
    digitalWrite(ledPinR, LOW); 
    Serial.print(F("Temperature: "));
    Serial.print(temperature);
    lcd.print(temperature);
    lcd.print("C /");
    Serial.println(F("°C"));
    Serial.print(F("Humidité: "));
    Serial.print(h);
    lcd.print(h);
    lcd.print("%");
    Serial.println(F("%"));
      
  }
  
  Serial.print("PPM: ");
  Serial.println(ppmValue);
 
  delay(1000);
  
}
mq135Breakout