#define BLYNK_TEMPLATE_ID "TMPL69oKPEsm8"
#define BLYNK_TEMPLATE_NAME "PushButton"
#define BLYNK_AUTH_TOKEN "ogaGX4LIDG9dmFrbTh_nBTqdF54BwM89"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#define BUTTON_PIN 21
#define BUZZER_PIN 23
#define RELAY_PIN 19
#define LED_PIN 22
// Ganti dengan kredensial WiFi Anda
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD, 16 kolom dan 2 baris bool systemState = false; // Status sistem(ON / OFF)
bool systemState = false; // Status sistem (ON/OFF)
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
// Inisialisasi pin
pinMode(BUTTON_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
// Inisialisasi LCD
Wire.begin(18, 5);
lcd.begin(16, 2);
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Sensor Connect");
lcd.setCursor(0, 1);
lcd.print("Tekan Tombol");
}
void loop() {
static bool lastButtonState = HIGH; // Status tombol sebelumnya
bool currentButtonState = digitalRead(BUTTON_PIN); // Membaca status tombol
// Deteksi perubahan status tombol
if (lastButtonState == HIGH && currentButtonState == LOW) {
// Toggle status sistem
systemState = !systemState;
if (systemState) {
digitalWrite(RELAY_PIN, HIGH); // Mematikan relay
digitalWrite(LED_PIN, HIGH); // Mematikan LED
tone(BUZZER_PIN, 1000); // Mematikan buzzer
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor Nyala");
lcd.setCursor(0, 1);
lcd.print("Tekan Untuk OFF");
Blynk.virtualWrite(V0, HIGH);
} else {
// Jika sistem OFF
digitalWrite(RELAY_PIN, LOW); // Mematikan relay
digitalWrite(LED_PIN, LOW); // Mematikan LED
noTone(BUZZER_PIN); // Mematikan buzzer
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor Mati");
lcd.setCursor(0, 1);
lcd.print("Tekan Untuk ON");
Blynk.virtualWrite(V0, LOW);
}
delay(200);
}
lastButtonState = currentButtonState; // Simpan status tombol saat ini
Blynk.run();
}