/* Fill-in information from Blynk Device Info here */
#define BLYNK_TEMPLATE_ID "TMPL60rx9g_LH"
#define BLYNK_TEMPLATE_NAME "SmartHome"
#define BLYNK_AUTH_TOKEN "1OvMIRhZfZpeY2gpkS5WvtSlpGAKhssy"

/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial


#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 4);
#define DHTPIN 2        
#define DHTTYPE DHT22    
DHT dht(DHTPIN, DHTTYPE);
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Wokwi-GUEST"; // Nhập SSID của router wifi của bạn
char pass[] = ""; // Nhập mật khẩu wifi của bạn
// Chân kết nối với các đèn và quạt
int ledPins[] = {13, 12, 14, 27, 26};    // Chân GPIO của các đèn
int widget[] = {V0, V1, V2, V3, V4, V5, V6, V7, V8};
boolean devices[]= {0, 0, 0, 0, 0,};
int btns[] =  {15, 4, 5, 18, 23};
int len_ledPins = sizeof(ledPins) / sizeof(ledPins[0]);
void setup()
{
  // Debug console
  Serial.begin(115200);
  Serial.println(len_ledPins);
  for (int i = 0; i < len_ledPins; i++) {
    pinMode(ledPins[i], OUTPUT);
    pinMode(btns[i], INPUT_PULLUP);
    Serial.println(i);
    Serial.println(ledPins[i]);
    digitalWrite(ledPins[i], LOW);
  }
  lcd.init();                    
   lcd.backlight();
   lcd.setCursor(4,0);
   lcd.print("ANH YEU EM");
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
  Serial.println("Blynk run");
  lcd.clear();
}

void loop()
{
  Blynk.run();
   btn_device();
  update_sensor();
}
void btn_device(){
  for(int btn = 0;btn < len_ledPins;btn++){
    if(digitalRead(btns[btn])==0){
      delay(200);
        if(digitalRead(btns[btn])==0){
          devices[btn] = !devices[btn];
          digitalWrite(ledPins[btn], !digitalRead(ledPins[btn]));
          Blynk.virtualWrite(widget[btn], devices[btn]);
          Serial.println(String(btns[btn]) + ": " + String(devices[btn]));
          
          }
    }
  }
}
BLYNK_WRITE(V0) {
  int pinValue = param.asInt();
  digitalWrite(ledPins[0], pinValue);
  Serial.println(pinValue);
}

BLYNK_WRITE(V1) {
  int pinValue = param.asInt();
  digitalWrite(ledPins[1], pinValue);
  Serial.println(pinValue);
}

BLYNK_WRITE(V2) {
  int pinValue = param.asInt();
  digitalWrite(ledPins[2], pinValue);
  Serial.println(pinValue);
}

BLYNK_WRITE(V3) {
  int pinValue = param.asInt();
  digitalWrite(ledPins[3], pinValue);
  Serial.println(pinValue);
}
BLYNK_WRITE(V4) {
  int pinValue = param.asInt();
  digitalWrite(ledPins[4], pinValue);
  Serial.println(pinValue);
}
void update_sensor(){
  float h = dht.readHumidity();
  float t = dht.readTemperature(); 
  if (isnan(h) || isnan(t)) {
    Serial.println("tidak bisa membaca sensor suhu!!");
    return;
  }

  Blynk.virtualWrite(V5, h);
  Blynk.virtualWrite(V6, t);
  lcd.setCursor(0,0);
  lcd.print("NHIET DO: " + String(t)+ "C          ");
  lcd.setCursor(0,1);
  lcd.print("DO AM: " + String(h)+ "%          ");
  Serial.print("Temperature : " );
  Serial.print(t);
  Serial.print("    Humidity : ");
  Serial.println(h);

}
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
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND
NOCOMNCVCCGNDINLED1PWRRelay Module
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO
NOCOMNCVCCGNDINLED1PWRRelay Module
relay2:VCC
relay2:GND
relay2:IN
relay2:NC
relay2:COM
relay2:NO
NOCOMNCVCCGNDINLED1PWRRelay Module
relay3:VCC
relay3:GND
relay3:IN
relay3:NC
relay3:COM
relay3:NO
NOCOMNCVCCGNDINLED1PWRRelay Module
relay4:VCC
relay4:GND
relay4:IN
relay4:NC
relay4:COM
relay4:NO
lcd2:GND
lcd2:VCC
lcd2:SDA
lcd2:SCL
NOCOMNCVCCGNDINLED1PWRRelay Module
relay5:VCC
relay5:GND
relay5:IN
relay5:NC
relay5:COM
relay5:NO
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r
btn5:1.l
btn5:2.l
btn5:1.r
btn5:2.r