#include <Wire.h>
#include <DHT.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#define BLYNK_TEMPLATE_ID "TMPL62RFweJ3H"
#define BLYNK_TEMPLATE_NAME "Automatic Clothesline"
#define BLYNK_AUTH_TOKEN "rtn3LOawTZ0B9BNBm-XaKVeK64dJvJCj"
#define BLYNK_PRINT Serial
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;
BLYNK_WRITE(V0)
{
int pinValue = param.asInt();
if (pinValue == 1) {
status = true;
Blynk.virtualWrite(V3, "Jemuran Kebuka");
} else {
status = false;
}
}
void setup() {
Serial.begin(115200);
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 ) {
Jemuran_1.write(180);
Blynk.virtualWrite(V3, "Jemuran Ketutup");
Blynk.virtualWrite(V2, "Suasana Mendung/Gelap ");
Blynk.logEvent("Kondisi mendung, sebaiknya jemuran ditutup"); // Log event menggunakan perintah logEvent
} 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();
float humidity = dht.readHumidity();
if (!isnan(temperature) && !isnan(humidity)) {
Blynk.virtualWrite(V6, temperature);
Blynk.virtualWrite(V7, humidity);
}
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print("%");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print("C, Humidity: ");
Serial.print(humidity);
Serial.println("%");
delay(1000);
}