#define BLYNK_TEMPLATE_ID "TMPL62FVe79C6"
#define BLYNK_TEMPLATE_NAME "PUSH BUTTON BLYNK"
#define BLYNK_AUTH_TOKEN "b-O7Lnep5GBhllAfQNyQ2AruI_nzRN8G"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
// Konfigurasi Wi-Fi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Konfigurasi pin
const int buttonpin = 33; // Tombol fisik di pin 33
const int ledPin = 32; // LED di pin 32
// Inisialisasi LCD (I2C Address: 0x27, ukuran 16x2)
LiquidCrystal_I2C lcd(0x27, 16, 2);
int ledState = LOW; // Status awal LED (OFF)
int lastButtonState; // Status tombol sebelumnya
int currentButtonState; // Status tombol saat ini
// Blynk Virtual Pin
#define BUTTON_PIN V1 // Virtual pin untuk tombol kontrol
#define SAKLAR_PIN V0 // Virtual pin untuk saklar kontrol
void setup() {
Serial.begin(115200); // Inisialisasi serial monitor
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan lampu latar LCD
pinMode(buttonpin, INPUT_PULLUP); // Tombol menggunakan pull-up internal
pinMode(ledPin, OUTPUT); // Pin LED sebagai output
currentButtonState = digitalRead(buttonpin); // Baca status awal tombol
// Pastikan LED mati saat awal
digitalWrite(ledPin, LOW);
// Tampilkan pesan awal di LCD
lcd.setCursor(0, 0);
lcd.print("LED Status: ");
lcd.setCursor(0, 1);
lcd.print("OFF");
// Hubungkan ke WiFi dan Blynk
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Connected");
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, password);
}
// Fungsi untuk mengontrol LED melalui Blynk (Virtual Pin V1)
BLYNK_WRITE(BUTTON_PIN) {
ledState = param.asInt(); // Baca nilai dari aplikasi Blynk
digitalWrite(ledPin, ledState); // Atur status LED
updateDisplay(); // Perbarui tampilan LCD
}
// Fungsi untuk mengontrol LED melalui saklar Blynk (Virtual Pin V0)
BLYNK_WRITE(SAKLAR_PIN) {
ledState = param.asInt(); // Baca nilai dari aplikasi Blynk
digitalWrite(ledPin, ledState); // Atur status LED
updateDisplay(); // Perbarui tampilan LCD
}
void updateDisplay() {
if (ledState == HIGH) {
lcd.setCursor(0, 1);
lcd.print("ON ");
} else {
lcd.setCursor(0, 1);
lcd.print("OFF");
}
}
void loop() {
Blynk.run(); // Jalankan koneksi Blynk
lastButtonState = currentButtonState; // Simpan status tombol sebelumnya
currentButtonState = digitalRead(buttonpin); // Baca status tombol saat ini
if (lastButtonState == HIGH && currentButtonState == LOW) {
ledState = !ledState; // Toggle status LED
digitalWrite(ledPin, ledState); // Atur LED sesuai status
updateDisplay(); // Perbarui tampilan LCD
// Kirim status LED ke aplikasi Blynk
Blynk.virtualWrite(BUTTON_PIN, ledState);
Blynk.virtualWrite(SAKLAR_PIN, ledState);
}
delay(100); // Debounce tombol
}