#define BLYNK_TEMPLATE_ID "TMPL6K1MISYh9"
#define BLYNK_TEMPLATE_NAME "UTS"
#define BLYNK_AUTH_TOKEN "u3mCt172EGlvii3x17SwFfOCGhj_v96o"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
// WiFi credentials
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Sensor dan LED
#define PIR_PIN 2
#define DHT_PIN 5
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);
int ledPins[] = {33, 25, 26, 27, 14}; // Pin untuk 5 LED
// Inisialisasi LCD (16x2, alamat I2C: 0x27 atau 0x3F)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Blynk Virtual Pin untuk kontrol LED manual
BLYNK_WRITE(V1) { digitalWrite(ledPins[0], param.asInt()); }
BLYNK_WRITE(V2) { digitalWrite(ledPins[1], param.asInt()); }
BLYNK_WRITE(V3) { digitalWrite(ledPins[2], param.asInt()); }
BLYNK_WRITE(V4) { digitalWrite(ledPins[3], param.asInt()); }
BLYNK_WRITE(V5) { digitalWrite(ledPins[4], param.asInt()); }
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
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 hanya jika ada gerakan
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);
}
BLYNK_WRITE(V3) {
int ledState = param.asInt();
digitalWrite(LED1, ledState);
}
BLYNK_WRITE(V4) {
int ledState = param.asInt();
digitalWrite(LED2, ledState);
}
BLYNK_WRITE(V5) {
int ledState = param.asInt();
digitalWrite(LED3, ledState);
}
BLYNK_WRITE(V6) {
int ledState = param.asInt();
digitalWrite(LED4, ledState);
}
BLYNK_WRITE(V7) {
int ledState = param.asInt();
digitalWrite(LED5, ledState);
}