#define BLYNK_TEMPLATE_ID "YOUR_TEMPLATE_ID"
#define BLYNK_TEMPLATE_NAME "Password_Control"
#define BLYNK_AUTH_TOKEN "YOUR_BLYNK_AUTH_TOKEN"

#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <Keypad.h>

// Konfigurasi Wi-Fi
char ssid[] = "YourWiFiSSID";  // Ganti dengan SSID Wi-Fi
char pass[] = "YourWiFiPassword";  // Ganti dengan password Wi-Fi

// Pin untuk relay, LED, buzzer
int relayPin1 = 23;
int relayPin2 = 22;
int ledPin = 2;
int buzzerPin = 19;

// Password yang benar
String correctPassword = "1234";  // Ganti dengan password yang diinginkan

// Variabel untuk menyimpan input password dari Keypad
String inputPassword = "";

// Pin untuk Keypad
const byte ROW_NUM    = 4;  // Jumlah baris pada keypad
const byte COLUMN_NUM = 4;  // Jumlah kolom pada keypad

char keys[ROW_NUM][COLUMN_NUM] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

byte pin_rows[ROW_NUM] = {32, 33, 25, 26};  // Pin baris pada ESP32
byte pin_column[COLUMN_NUM] = {14, 27, 22, 21};  // Pin kolom pada ESP32

Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );

// Fungsi untuk mengontrol Relay 1 berdasarkan password
void checkPassword() {
  if (inputPassword == correctPassword) {
    digitalWrite(relayPin1, HIGH);  // Nyalakan Relay 1
    tone(buzzerPin, 1000, 500);  // Bunyi buzzer jika password benar
    delay(500);
    noTone(buzzerPin);  // Matikan buzzer
  } else {
    digitalWrite(relayPin1, LOW);  // Matikan Relay 1
    tone(buzzerPin, 500, 500);  // Bunyi buzzer jika password salah
    delay(500);
    noTone(buzzerPin);  // Matikan buzzer
  }
}

BLYNK_WRITE(V1) {  // Virtual Pin V1 untuk Relay 2
  int relay2State = param.asInt();
  if (relay2State == 1) {
    digitalWrite(relayPin2, HIGH);  // Nyalakan Relay 2
  } else {
    digitalWrite(relayPin2, LOW);  // Matikan Relay 2
  }
}

BLYNK_WRITE(V2) {  // Virtual Pin V2 untuk LED
  int ledState = param.asInt();
  if (ledState == 1) {
    digitalWrite(ledPin, HIGH);  // Nyalakan LED
  } else {
    digitalWrite(ledPin, LOW);  // Matikan LED
  }
}

void setup() {
  // Inisialisasi pin
  pinMode(relayPin1, OUTPUT);
  pinMode(relayPin2, OUTPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);

  // Memulai komunikasi serial untuk debugging
  Serial.begin(115200);

  // Koneksi Wi-Fi dan Blynk
  Blynk.begin("YOUR_BLYNK_AUTH_TOKEN", ssid, pass);

  // Menyiapkan pin untuk relay dan LED
  digitalWrite(relayPin1, LOW);
  digitalWrite(relayPin2, LOW);
  digitalWrite(ledPin, LOW);
  digitalWrite(buzzerPin, LOW);
}

void loop() {
  // Cek input dari keypad
  char key = keypad.getKey();
  if (key) {
    if (key == '#') {  // Jika tombol '#' ditekan, cek password
      checkPassword();
      inputPassword = "";  // Reset input password
    } else if (key == '*') {  // Reset password jika tombol '*' ditekan
      inputPassword = "";
    } else {
      inputPassword += key;  // Tambahkan karakter ke password input
    }
  }

  Blynk.run();  // Jalankan Blynk
}
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module