#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL61d3ascLu"
#define BLYNK_TEMPLATE_NAME "Lampu ON"
// Library yang dibutuhkan
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <LiquidCrystal_I2C.h> // Library untuk LCD I2C
// --- Konfigurasi ---
// Ganti dengan kredensial Anda
char auth[] = "Vbso3jV7_cDMBhZH3L6xRnlDek-_XzTL"; // Token Blynk Anda
char ssid[] = "Wokwi-GUEST"; // Nama WiFi Anda
char pass[] = ""; // Password WiFi Anda
// Definisikan pin untuk LED
#define LED1 2 // LED pertama di pin GPIO 2
#define LED2 5 // LED kedua di pin GPIO 4
// Variabel untuk menyimpan status tombol dari Blynk
int SW1_state = 0; // Kondisi lampu 1 mati
int SW2_state = 0; // Kondisi lampu 2 mati
// Inisialisasi Timer Blynk
BlynkTimer timer;
// Inisialisasi objek LCD
// Ganti 0x27 dengan alamat I2C LCD Anda jika berbeda (umumnya 0x27 atau 0x3F)
// Hubungkan pin SDA ke GPIO 21 dan SCL ke GPIO 22 pada ESP32
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Fungsi untuk memperbarui tampilan di LCD
void updateLcdStatus() {
// Baris pertama untuk Lampu 1
lcd.setCursor(0, 0);
lcd.print("Lampu 1: ");
if (SW1_state == 1) {
lcd.print("Nyala");
} else {
lcd.print("Mati "); // Diberi spasi agar menimpa kata "Nyala"
}
// Baris kedua untuk Lampu 2
lcd.setCursor(0, 1);
lcd.print("Lampu 2: ");
if (SW2_state == 1) {
lcd.print("Nyala");
} else {
lcd.print("Mati "); // Diberi spasi agar menimpa kata "Nyala"
}
}
// Fungsi Callback untuk Tombol 1 (Virtual Pin V0)
BLYNK_WRITE(V0)
{
SW1_state = param.asInt();
if(SW1_state == 1){
digitalWrite(LED1, HIGH);
Serial.println("Lampu 1 telah dihidupkan");
} else {
digitalWrite(LED1, LOW);
Serial.println("Lampu 1 telah dimatikan");
}
updateLcdStatus(); // Perbarui tampilan LCD setiap ada perubahan
}
// Fungsi Callback untuk Tombol 2 (Virtual Pin V1)
BLYNK_WRITE(V1)
{
SW2_state = param.asInt();
if(SW2_state == 1){
digitalWrite(LED2, HIGH);
Serial.println("Lampu 2 telah dihidupkan");
} else {
digitalWrite(LED2, LOW);
Serial.println("Lampu 2 telah dimatikan");
}
updateLcdStatus(); // Perbarui tampilan LCD setiap ada perubahan
}
void setup() {
Serial.begin(115200);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Menghubungkan..");
// Atur pin LED sebagai OUTPUT
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
// Pastikan lampu mati saat pertama kali dinyalakan
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
// Mulai koneksi Blynk
Blynk.begin(auth, ssid, pass);
// Tampilkan status awal di LCD setelah terhubung
lcd.clear();
updateLcdStatus();
}
void loop() {
Blynk.run();
timer.run();
}