#define BLYNK_TEMPLATE_ID "TMPL69REHSY3U"
#define BLYNK_TEMPLATE_NAME "ESP32 Buzzer LCD"
#define BLYNK_AUTH_TOKEN "fOnhp1ghWzv7mFPl1mGPdj-lGHFhYh8X"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Konfigurasi WiFi
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Token Blynk
char auth[] = "fOnhp1ghWzv7mFPl1mGPdj-lGHFhYh8X";
// Alamat I2C LCD 16x2
#define I2C_ADDR 0x27
// Konfigurasi LCD 16x2
#define LCD_COLUMNS 16
#define LCD_ROWS 2
// Inisialisasi LCD 16x2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_ROWS);
// Pin buzzer
#define BUZZER_PIN 12
BlynkTimer timer;
bool buzzerActive = false;
void setup() {
// Inisialisasi Serial Monitor
Serial.begin(115200);
// Inisialisasi LCD
Wire.begin();
lcd.init();
lcd.backlight();
// Inisialisasi Blynk
Blynk.begin(auth, ssid, pass);
// Setup tombol pada Blynk
Blynk.syncVirtual(V0);
// Inisialisasi pin buzzer sebagai output
pinMode(BUZZER_PIN, OUTPUT);
// Setup timer untuk pengecekan tombol setiap 1000ms (1 detik)
timer.setInterval(1000L, checkButton);
}
void loop() {
Blynk.run();
timer.run();
}
// Fungsi untuk memeriksa tombol pada Blynk
void checkButton() {
if (buzzerActive) {
playTone(1000, 100); // Mainkan nada pada buzzer
}
}
// Fungsi untuk menangani perubahan nilai pin virtual dari Blynk
BLYNK_WRITE(V0) {
int buttonState = param.asInt(); // Membaca status tombol dari pin virtual V0
if (buttonState == HIGH) { // Jika tombol ditekan
buzzerActive = true;
// Tampilkan pesan pada LCD
lcd.setCursor(0, 0);
lcd.print("Buzzer active");
} else {
buzzerActive = false;
// Matikan LCD
lcd.clear();
}
}
// Fungsi untuk memainkan nada pada buzzer
void playTone(int frequency, int duration) {
tone(BUZZER_PIN, frequency, duration);
}