#define BLYNK_TEMPLATE_ID "TMPL6MtRMXr09"
#define BLYNK_TEMPLATE_NAME "lampu otomatis"
#define BLYNK_AUTH_TOKEN "7ermN_WTuQ-5NdR0-H9kvbtwAZnI4qLA"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
// Pin setup
#define LDR_PIN 34
#define BUZZER_PIN 13
#define RELAY_PIN 23
// LCD Setup (I2C)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// WiFi credentials
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// NTP Client setup
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 3600, 60000);
// Alarm Variables
bool alarmActive = false;
int alarmTime = 0;
// Lamp Control
bool lampStatus = false;
void setup() {
Serial.begin(115200);
pinMode(LDR_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
lcd.begin(16, 2);
lcd.setBacklight(1);
lcd.print("Initializing...");
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timeClient.begin();
}
void loop() {
Blynk.run();
timeClient.update();
int ldrValue = analogRead(LDR_PIN);
int threshold = 500;
// Lamp control (auto mode)
if (!lampStatus) {
if (ldrValue < threshold) {
digitalWrite(RELAY_PIN, HIGH);
} else {
digitalWrite(RELAY_PIN, LOW);
}
}
// Alarm control
if (alarmActive && timeClient.getEpochTime() >= alarmTime) {
digitalWrite(BUZZER_PIN, HIGH);
} else {
digitalWrite(BUZZER_PIN, LOW);
}
// LCD display
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Time:");
lcd.print(timeClient.getFormattedTime());
lcd.setCursor(0,1);
lcd.print("LDR:");
lcd.print(ldrValue);
// Kirim data ke Blynk (opsional)
Blynk.virtualWrite(V4, ldrValue);
delay(1000);
}
// Blynk Control
BLYNK_WRITE(V1) {
alarmTime = param.asInt();
}
BLYNK_WRITE(V2) {
alarmActive = param.asInt();
}
BLYNK_WRITE(V3) {
lampStatus = param.asInt();
if (lampStatus) {
digitalWrite(RELAY_PIN, HIGH);
} else {
digitalWrite(RELAY_PIN, LOW);
}
}