#define BLYNK_TEMPLATE_ID "TMPL6SVv-Q8qs"
#define BLYNK_TEMPLATE_NAME "TEST"
#define BLYNK_AUTH_TOKEN "n5JIDsXfHfBHJT_aNrtp7ZgSsj_Fyw0i"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define RELAY_PIN 32
#define BUZZER_PIN 2
#define LED_PIN 15
#define LDR_PIN 34 // Pin ADC untuk sensor LDR
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
LiquidCrystal_I2C lcd(0x27, 16, 2);
unsigned long lastChangeTime = 0;
bool displayLightLevel = true; // Toggle antara level cahaya dan kondisi
const float ADC_MAX = 4095.0; // Resolusi ADC ESP32
const float VREF = 3.3; // Tegangan referensi ADC (volt)
void setup() {
Wire.begin(21, 22);
delay(200);
lcd.init();
lcd.backlight();
lcd.print("LCD OK!");
delay(1000);
Serial.begin(115200);
Serial.println("System Initialized");
pinMode(RELAY_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
Blynk.begin(auth, ssid, pass); // Initialize Blynk connection
}
float readLightLevel() {
int adcValue = analogRead(LDR_PIN); // Baca nilai ADC
float voltage = (adcValue / ADC_MAX) * VREF; // Hitung tegangan
float lightLevel = (1 - (voltage / VREF)) * 100; // Hitung persentase cahaya
return lightLevel; // Kembalikan nilai tingkat cahaya dalam persentase
}
void loop() {
float lightLevel = readLightLevel(); // Baca tingkat cahaya dari LDR
unsigned long currentMillis = millis();
if (currentMillis - lastChangeTime >= 1000) {
lastChangeTime = currentMillis;
displayLightLevel = !displayLightLevel; // Toggle display
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Light: ");
lcd.print(lightLevel);
lcd.print(" %");
Blynk.virtualWrite(V0, lightLevel); // Kirim tingkat cahaya ke Blynk (V0)
Serial.print("Light Level: ");
Serial.print(lightLevel);
Serial.println(" %");
if (lightLevel > 50) { // Contoh ambang batas untuk kondisi gelap
digitalWrite(RELAY_PIN, HIGH);
digitalWrite(LED_PIN, HIGH);
tone(BUZZER_PIN, 1000);
Serial.println("Low Light: Warning!");
} else {
digitalWrite(RELAY_PIN, LOW);
digitalWrite(LED_PIN, LOW);
noTone(BUZZER_PIN);
}
delay(500);
Blynk.run(); // Jalankan Blynk
}
// BLYNK_WRITE untuk kontrol LED dari aplikasi Blynk
BLYNK_WRITE(V2) {
int pinValue = param.asInt(); // Baca nilai dari pin virtual V2 (Button widget)
if (pinValue == 1) { // Jika tombol ditekan
digitalWrite(LED_PIN, HIGH); // Nyalakan LED
Serial.println("LED ON via Blynk");
} else { // Jika tombol dilepas
digitalWrite(LED_PIN, LOW); // Matikan LED
Serial.println("LED OFF via Blynk");
}
}