z#define BLYNK_TEMPLATE_ID "TMPL6VGzyt_QD"
#define BLYNK_TEMPLATE_NAME "Jemuran Pintar"
#define BLYNK_AUTH_TOKEN "L8sKAMro3UIEKXPaKQt4OCcW8mlSxpZO"
#include <Wire.h>
#include <DHT.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
#define BLYNK_PRINT Serial1
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
int ldr, hujan;
Servo Jemuran_1;
DHT dht(15, DHT22); // Gunakan GPIO 4 sebagai pin Data untuk DHT22
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD: 0x27, 16 kolom, 2 baris
bool status = false;
bool buttonStatus = false;
BLYNK_WRITE(V0)
{
int pinValue = param.asInt();
if (pinValue == 1) {
status = true;
Blynk.virtualWrite(V3, "Jemuran Kebuka");
} else {
status = false;
Jemuran_1.write(180);
}
buttonStatus = status;
}
void setup() {
Serial1.begin(115200); // Ubah ke Serial1 untuk monitor serial
Jemuran_1.attach(25);
Blynk.begin(auth, ssid, pass);
Wire.begin(); // Inisialisasi komunikasi I2C
lcd.begin(16, 2); // Inisialisasi LCD dengan 16 kolom dan 2 baris
lcd.backlight(); // Aktifkan pencahayaan latar LCD
}
void loop() {
Blynk.run();
timer.run();
ldr =map(analogRead(34), 0, 4096, 100,0); // Baca nilai tingkat kecerahan dari pin analog 34
hujan = map(analogRead(35), 0, 4095, 0, 100); // Ubah batas nilai analog sesuai dengan karakteristik sensor hujan
Blynk.virtualWrite(V4, ldr);
Blynk.virtualWrite(V5, ldr);
if (status == true) {
Jemuran_1.write(0);
Blynk.virtualWrite(V3, "Jemuran Kebuka");
} else {
if (ldr < 30) {
Blynk.virtualWrite(V3, "Jemuran Ketutup");
Blynk.virtualWrite(V2, "Suasana Mendung/Gelap");
Blynk.logEvent("cuaca_gelap","Suasana Mendung/Gelap");
Blynk.virtualWrite(V0, LOW);
} else if (hujan > 40) {
Jemuran_1.write(180);
Blynk.virtualWrite(V3, "Jemuran Ketutup");
Blynk.virtualWrite(V8, "Sedang Hujan");
} else {
Jemuran_1.write(0);
Blynk.virtualWrite(V3, "Jemuran Kebuka");
Blynk.virtualWrite(V2, "Suasana Cerah");
Blynk.virtualWrite(V8, "Tidak Hujan");
}
}
float temperature = dht.readTemperature();
if (!isnan(temperature)) {
Blynk.virtualWrite(V6, temperature);
}
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print("C");
Serial1.print("Temperature: ");
Serial1.print(temperature);
delay(1000);
}