#define BLYNK_TEMPLATE_ID "TMPL6GL4PNLv_"
#define BLYNK_TEMPLATE_NAME "PBH Kelompok 4"
#define BLYNK_AUTH_TOKEN "hyNWts3PFzg6dOl0E4t1U_pILskmVUa9"
#include <BlynkSimpleEsp32.h>

// LCD
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);  

// Buzzer
int buzzer = 5;       

// Sensor Gas
// int Gas_analog = 4;   
int Gas_digital = 2;  
int threshold = 200;

// DHT
#include "DHT.h"
#define DHTPIN 23    
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

// HC SR04
#define ECHO_PIN 17
#define TRIG_PIN 16

// PIR
#define pirPin 34
int gerakanPir; 

// Relay dan Push Button
int lampuHalaman = 13;
int pbLampuHalaman = 35;
int pbStateLampuHalaman = false;

int lampuRuangan = 27;
int pbLampuRuangan = 33;
int pbStateLampuRuangan = false;

int lampuKamar = 0;
int pbLampuKamar = 18;
int pbStateLampuKamar = false;

int lampuDapur = 26;
int pbLampuDapur = 32;
int pbStateLampuDapur = false;

int stopKontak = 25;
int pbStopKontak = 15;
int pbStateStopKontak = false;


void setup() {
  char ssid[] = "Wokwi-GUEST";
  char password[] = "";
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, password);
  Serial.begin(115200);
  pinMode(buzzer, OUTPUT);          
  pinMode(Gas_digital, INPUT);
  lcd.init();
  lcd.backlight();
  dht.begin();
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(pirPin, INPUT);

  pinMode(lampuHalaman, OUTPUT);
  pinMode(pbLampuHalaman, INPUT);

  pinMode(lampuRuangan, OUTPUT);
  pinMode(pbLampuRuangan, INPUT);

  pinMode(lampuKamar, OUTPUT);
  pinMode(pbLampuKamar, INPUT);

  pinMode(lampuDapur, OUTPUT);
  pinMode(pbLampuDapur, INPUT);
  
  pinMode(stopKontak, OUTPUT);
  pinMode(pbStopKontak, INPUT);
}

void loop() {
  int gassensorDigital = digitalRead(Gas_digital);
  gerakanPir = digitalRead(pirPin); 
  digitalWrite(buzzer, LOW);
  Blynk.run();
  if(gassensorDigital == 0 && gerakanPir == 1){
    lcd.setCursor(0, 0);
    lcd.print("ADA KEBOCORAN GAS!");
    lcd.setCursor(0, 1);
    lcd.print("ADA ORANG!");
    digitalWrite(buzzer, HIGH);
  }

  else if(gassensorDigital == 1 && gerakanPir == 0){
    lcd.setCursor(0, 0);
    lcd.print("Keadaan Aman");
  }

  else if(gassensorDigital == 1 && gerakanPir == 1){
    lcd.setCursor(0, 0);
    lcd.print("ADA ORANG!");
    digitalWrite(buzzer, HIGH);
  }

  else if(gassensorDigital == 0 && gerakanPir == 0){
    lcd.setCursor(0, 0);
    lcd.print("ADA KEBOCORAN GAS!");
    digitalWrite(buzzer, HIGH);
  }

  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();

  float distance = readDistanceCM();

  pbStateLampuHalaman = digitalRead(pbLampuHalaman);
  pbStateLampuRuangan = digitalRead(pbLampuRuangan);
  pbStateLampuKamar = digitalRead(pbLampuKamar);
  pbStateLampuDapur = digitalRead(pbLampuDapur);
  pbStateStopKontak = digitalRead(pbStopKontak);

  if(pbStateLampuHalaman == HIGH){
    digitalWrite(lampuHalaman, HIGH);
    Blynk.virtualWrite(V1, "Lampu Halaman Menyala");
  }
  else{
    digitalWrite(lampuHalaman, LOW);
    Blynk.virtualWrite(V1, "Lampu Halaman Mati");
  }
  
  if(pbStateLampuRuangan == HIGH){
    digitalWrite(lampuRuangan, HIGH);
    Blynk.virtualWrite(V2, "Lampu Ruangan Menyala");
  }
  else{
    digitalWrite(lampuRuangan, LOW);
    Blynk.virtualWrite(V2, "Lampu Ruangan Mati");
  }

  if(pbStateLampuKamar == HIGH){
    digitalWrite(lampuKamar, HIGH);
    Blynk.virtualWrite(V3, "Lampu Kamar Menyala");
  }
  else{
    digitalWrite(lampuKamar, LOW);
    Blynk.virtualWrite(V3, "Lampu Kamar Mati");
  }

  if(pbStateLampuDapur == HIGH){
    digitalWrite(lampuDapur, HIGH);
      Blynk.virtualWrite(V4, "Lampu Dapur Menyala");
  }
  else{
    digitalWrite(lampuDapur, LOW);
      Blynk.virtualWrite(V4, "Lampu Dapur Mati");
  }

  if(pbStateStopKontak == HIGH){
    digitalWrite(stopKontak, HIGH);
      Blynk.virtualWrite(V5, "Stop Kontak Aktif");
  }
  else{
    digitalWrite(stopKontak, LOW);
      Blynk.virtualWrite(V5, "Stop Kontak Tidak Aktif");
  }

  lcd.setCursor(0, 2);
  lcd.print("Suhu : ");
  lcd.print(temperature);
  lcd.print("C");
  lcd.setCursor(0, 3);
  lcd.print("Kelembapan : ");
  lcd.print(humidity);
  lcd.print("%");

  if(distance < 20){
    lcd.setCursor(0, 1);
    lcd.print("Air Habis");
    digitalWrite(buzzer, HIGH);
  }

  else if(distance >= 20 && distance < 70){
    lcd.setCursor(0, 1);
    lcd.print("Air Kurang");
  }

  else if(distance >= 70 && distance < 350){
    lcd.setCursor(0, 1);
    lcd.print("Air Cukup");
  }

  else{
    lcd.setCursor(0, 1);
    lcd.print("Air Penuh");
  }

  delay(1000);
  lcd.clear();
}

float readDistanceCM() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  int duration = pulseIn(ECHO_PIN, HIGH);
  return duration * 0.034 / 2;
}
$abcdeabcde151015202530fghijfghij
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
mq2Breakout