//START DEFINE BLYNK
#define BLYNK_TEMPLATE_ID "TMPL6dEyRyJHq"
#define BLYNK_TEMPLATE_NAME "S"
#define BLYNK_AUTH_TOKEN "RpqgZh5pR6E-f5y_qur7VXdgGauT3Hku"
#define BLYNK_PRINT Serial
#include <ESP32Servo.h>
//END DEFINE BLYNK
//START DEFINE DHT
#define DHTPIN 15
#define DHTTYPE DHT22
//END DEFINE DHT
#define PIN_SERVO 2
Servo myServo;
//START LIBRARY DHT
#include <DHT.h>
DHT dht(DHTPIN, DHT22);
//END LIBRARY DHT
//START LIBRARY LCD I2C
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x27, 16, 2);
//END LIBRARY LCD I2C
//START LIBRARY BLYNK
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
//END LIBRARY BLYNK
char auth[] = "RpqgZh5pR6E-f5y_qur7VXdgGauT3Hku";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
#define relayv0 13
#define relayv1 12
#define relayv2 14
int SW_relay = 0;
bool isTampilanLCDBerjalan = false;
unsigned long waktuMulaiLCDBerjalan = 0;
void hapusLCD() {
if (isTampilanLCDBerjalan && (millis() - waktuMulaiLCDBerjalan >= 500)) {
lcd.clear();
isTampilanLCDBerjalan = false;
}
}
// Fungsi untuk mengendalikan relay dari aplikasi Blynk
BLYNK_WRITE(V0) {
SW_relay = param.asInt();
if (SW_relay == 1){
digitalWrite(relayv0, HIGH);
Serial.println("RELAY TERBUKA");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Lampu Ruang Tamu");
lcd.setCursor(5,1);
lcd.print("MENYALA");
waktuMulaiLCDBerjalan = millis();
isTampilanLCDBerjalan = true;
Blynk.virtualWrite(V0, HIGH);
}else {
digitalWrite(relayv0, LOW); // Mematikan relay saat tombol di aplikasi Blynk dilepas
Serial.println("RELAY TERTUTUP");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Lampu Ruang Tamu");
lcd.setCursor(6,1);
lcd.print("MATI");
waktuMulaiLCDBerjalan = millis();
isTampilanLCDBerjalan = true;
Blynk.virtualWrite(V0, LOW);
}
}
BLYNK_WRITE(V1) {
SW_relay = param.asInt();
if (SW_relay == 1){
digitalWrite(relayv1, HIGH);
Serial.println("RELAY TERBUKA");
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Lampu Teras");
lcd.setCursor(5,1);
lcd.print("MENYALA");
waktuMulaiLCDBerjalan = millis();
isTampilanLCDBerjalan = true;
Blynk.virtualWrite(V1, HIGH);
}else {
digitalWrite(relayv1, LOW); // Mematikan relay saat tombol di aplikasi Blynk dilepas
Serial.println("RELAY TERTUTUP");
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Lampu Teras");
lcd.setCursor(6,1);
lcd.print("MATI");
waktuMulaiLCDBerjalan = millis();
isTampilanLCDBerjalan = true;
Blynk.virtualWrite(V1, LOW);
}
}
BLYNK_WRITE(V2) {
SW_relay = param.asInt();
if (SW_relay == 1){
digitalWrite(relayv2, HIGH);
Serial.println("RELAY TERBUKA");
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Lampu Dapur");
lcd.setCursor(5,1);
lcd.print("MENYALA");
waktuMulaiLCDBerjalan = millis();
isTampilanLCDBerjalan = true;
Blynk.virtualWrite(V2, HIGH);
}else {
digitalWrite(relayv2, LOW); // Mematikan relay saat tombol di aplikasi Blynk dilepas
Serial.println("RELAY TERTUTUP");
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Lampu Dapur");
lcd.setCursor(6,1);
lcd.print("MATI");
waktuMulaiLCDBerjalan = millis();
isTampilanLCDBerjalan = true;
Blynk.virtualWrite(V2, LOW);
}
}
BLYNK_WRITE(V3){
int pinValue = param.asInt();
if (pinValue == 1) {
myServo.write(0);
Blynk.virtualWrite(V3, HIGH);
} else {
myServo.write(90);
Blynk.virtualWrite(V3, LOW);
}
}
BLYNK_WRITE(V4) {
int pinValue = param.asInt();
if (pinValue == 1) {
// Ketika tombol ditekan, baca suhu dari sensor DHT
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
Blynk.virtualWrite(V4, HIGH);
// Tampilkan suhu di layar LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Kelembapan: ");
lcd.print(humidity);
lcd.print("%");
delay(1000);
lcd.clear();
if (humidity > 36) {
lcd.setCursor(0, 0);
lcd.print("Cuaca Panas");
lcd.setCursor(0, 1);
lcd.print("Jendela Terbuka");
delay(1000);
myServo.write(0);
} else if (humidity < 23) {
lcd.setCursor(0, 0);
lcd.print("Cuaca Dingin");
lcd.setCursor(0, 1);
lcd.print("Jendela Tertutup");
delay(1000);
myServo.write(90);
} else if (humidity >= 23 && humidity <= 27) {
lcd.print("Cuaca Sejuk");
} else if (humidity >= 28 && humidity <= 36) {
lcd.print("Cuaca Normal");
}
delay(2000);
// Kembali ke mode suhu
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Kelembapan: ");
lcd.print(humidity);
lcd.print("%");
} else {
lcd.clear();
myServo.write(90);
Blynk.virtualWrite(V4, LOW);
}
}
//END BLYNK
void setup() {
myServo.attach(PIN_SERVO);
// START LCD I2C
lcd.init();
lcd.backlight();
// END LCD I2C
// START BLYNK
Serial.begin(115200);
pinMode(relayv0, OUTPUT);
pinMode(relayv1, OUTPUT);
pinMode(relayv2, OUTPUT);
Blynk.begin(auth, ssid, pass);
dht.begin();
// END BLYNK
}
void loop() {
Blynk.run();
timer.run();
hapusLCD();
}