#define BLYNK_TEMPLATE_ID "TMPL6K1MISYh9"
#define BLYNK_TEMPLATE_NAME "UTS"
#define BLYNK_AUTH_TOKEN "u3mCt172EGlvii3x17SwFfOCGhj_v96o"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
// Inisialisasi LCD
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Inisialisasi DHT
#define DHTPIN 18
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Inisialisasi PIR
#define PIRPIN 5
// Pin LED
#define LED1 12
#define LED2 14
#define LED3 27
#define LED4 26
#define LED5 25
// WiFi Credentials
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Variabel untuk melacak status LED
bool led1Status = LOW;
bool led2Status = LOW;
bool led3Status = LOW;
bool led4Status = LOW;
bool led5Status = LOW;
// Variabel untuk melacak kontrol manual
bool manualControl = false;
// bool motionButton = false;
void setup() {
Serial.begin(115200);
// Inisialisasi WiFi dan Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Initializing...");
// Inisialisasi DHT sensor
dht.begin();
// Inisialisasi PIR sensor
pinMode(PIRPIN, INPUT);
// Inisialisasi LED
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
}
void loop() {
Blynk.run();
// Membaca sensor PIR hanya jika kontrol manual tidak aktif
if (!manualControl) {
bool motionDetected = digitalRead(PIRPIN);
if (motionDetected) {
lcd.setCursor(0, 0);
lcd.print("Selamat Datang! ");
// Nyalakan semua LED
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, HIGH);
// Membaca suhu dan kelembaban
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (!isnan(temperature) && !isnan(humidity)) {
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C ");
lcd.setCursor(0, 2);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print(" % ");
// Kirim data ke Blynk
Blynk.virtualWrite(V1, temperature);
Blynk.virtualWrite(V2, humidity);
} else {
lcd.setCursor(0, 1);
lcd.print("DHT error! ");
}
} else {
lcd.setCursor(0, 0);
lcd.print("Tidak ada gerakan ");
// Matikan semua LED
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
// Bersihkan baris suhu dan kelembaban
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print(" ");
}
}
delay(2000);
}
// Fungsi kontrol lampu melalui Blynk
BLYNK_WRITE(V1) {
manualControl = true; // Aktifkan kontrol manual
led1Status = param.asInt();
digitalWrite(LED1, led1Status);
}
BLYNK_WRITE(V2) {
manualControl = true; // Aktifkan kontrol manual
led2Status = param.asInt();
digitalWrite(LED2, led2Status);
}
BLYNK_WRITE(V3) {
manualControl = true; // Aktifkan kontrol manual
led3Status = param.asInt();
digitalWrite(LED3, led3Status);
}
BLYNK_WRITE(V4) {
manualControl = true; // Aktifkan kontrol manual
led4Status = param.asInt();
digitalWrite(LED4, led4Status);
}
BLYNK_WRITE(V5) {
manualControl = true; // Aktifkan kontrol manual
led5Status = param.asInt();
digitalWrite(LED5, led5Status);
}