// Wajib disertakan untuk komunikasi dengan 
// web server (Blynk)
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

// Tidak Wajib, tergantung dari perangkat kerasnya
#include "DHTesp.h"
#include <LiquidCrystal_I2C.h>

const int DHT_PIN = 15;
LiquidCrystal_I2C lcd(0x27, 16, 2);

DHTesp dhtSensor;
const int AC = 14;
const int lampu = 4;

// Alamat Blynk, diambil dari web server
#define BLYNK_TEMPLATE_ID "TMPLyMVeTuCI"
#define BLYNK_TEMPLATE_NAME "Sensor Suhu dan Kelembaban"
#define BLYNK_AUTH_TOKEN "zbqPIR8YuuzMgPaawEKnXeCaTyHwtVkl"

// Komunikasi wifi yang disediakan wokwi
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";

BlynkTimer timer;

void setup() {
  Blynk.begin(auth, ssid, pass);
  timer.setInterval(1000L, sendSensor);
  dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
  lcd.init();
  lcd.backlight(); 
  pinMode (AC, OUTPUT);
}

void loop() {
  Blynk.run();
  timer.run();

  if (digitalRead(lampu) == HIGH){
    Blynk.virtualWrite(V3, "Lampu ON");   
    Blynk.virtualWrite(V4, 1); 
  }else{
    Blynk.virtualWrite(V3, "Lampu OFF");
    Blynk.virtualWrite(V4, 0);    
  }
}
  
void sendSensor(){
  TempAndHumidity  data = dhtSensor.getTempAndHumidity();
  Blynk.virtualWrite(V0, data.temperature); 
  Blynk.virtualWrite(V1, data.humidity);

  lcd.setCursor(0, 0);
  lcd.print("Temp = ");  
  lcd.print(data.temperature);
  lcd.print(" C");
  lcd.setCursor(0, 1);
  lcd.print("Hum  = "); 
  lcd.print(data.humidity);
  lcd.print(" %");

  if (data.temperature <=24){
    digitalWrite(AC, LOW);
    Blynk.virtualWrite(V2, "AC OFF");
  }else{
    digitalWrite(AC, HIGH);
    Blynk.virtualWrite(V2, "AC ON");
  }
    delay(1000);
}
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module