#define BLYNK_TEMPLATE_ID "TMPL6Apql5hru"
#define BLYNK_TEMPLATE_NAME "Push Button"
#define BLYNK_AUTH_TOKEN "9LMdTfmt5zriIIB_3JWfSZvzscbUlWYT"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <LiquidCrystal_I2C.h>
// Definisi pin
#define BUTTON_PIN 5
#define RELAY_PIN 12
#define LED_PIN 14
#define BUZZER_PIN 27
// Inisialisasi LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Variabel untuk status relay
bool relayStatus = false;
// Informasi Wi-Fi dan Blynk
char auth[] = "9LMdTfmt5zriIIB_3JWfSZvzscbUlWYT"; // Ganti dengan token Blynk Anda
char ssid[] = "Wokwi-GUEST"; // Ganti dengan nama Wi-Fi Anda
char pass[] = ""; // Ganti dengan password Wi-Fi Anda
void setup() {
// Inisialisasi Serial Monitor
Serial.begin(115200);
// Inisialisasi Blynk
Blynk.begin(auth, ssid, pass);
// Inisialisasi pin
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(RELAY_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Relay Status:");
// Memastikan semua perangkat mati saat awal
digitalWrite(RELAY_PIN, LOW);
digitalWrite(LED_PIN, LOW);
noTone(BUZZER_PIN);
}
// Fungsi untuk memperbarui status ke Blynk
void updateBlynk() {
Blynk.virtualWrite(V1, relayStatus ? "ON" : "OFF"); // Kirim status relay ke Blynk
Blynk.virtualWrite(V0, relayStatus ? 1 : 0); // Kirim status tombol ke Blynk
}
// Fungsi untuk menangani tombol di aplikasi Blynk
BLYNK_WRITE(V0) {
relayStatus = param.asInt(); // Ambil nilai dari Blynk (0 atau 1)
digitalWrite(RELAY_PIN, relayStatus);
digitalWrite(LED_PIN, relayStatus);
if (relayStatus) {
tone(BUZZER_PIN, 1000); // Frekuensi 1000 Hz
} else {
noTone(BUZZER_PIN); // Matikan buzzer
}
// Perbarui LCD
lcd.setCursor(0, 1);
lcd.print(relayStatus ? "ON " : "OFF ");
// Perbarui status di Blynk
updateBlynk();
}
void loop() {
Blynk.run(); // Jalankan Blynk
static bool lastButtonState = HIGH; // Menyimpan status tombol sebelumnya
bool currentButtonState = digitalRead(BUTTON_PIN);
// Deteksi tombol ditekan (HIGH ke LOW)
if (lastButtonState == HIGH && currentButtonState == LOW) {
relayStatus = !relayStatus; // Toggle status relay
digitalWrite(RELAY_PIN, relayStatus);
digitalWrite(LED_PIN, relayStatus);
if (relayStatus) {
tone(BUZZER_PIN, 1000); // Frekuensi 1000 Hz
} else {
noTone(BUZZER_PIN); // Matikan buzzer
}
// Perbarui LCD
lcd.setCursor(0, 1);
lcd.print(relayStatus ? "ON " : "OFF ");
// Perbarui status di Blynk
updateBlynk();
}
// Simpan status tombol saat ini
lastButtonState = currentButtonState;
// Debounce tombol
delay(50);
}