#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6LPslILFr"
#define BLYNK_TEMPLATE_NAME "Sekuritas Ruangan"
#define BLYNK_AUTH_TOKEN "g83FD3aag7R5P0H6FZSc_LmLKjWPVGnA"
#include <Wire.h>
#include <Keypad.h>
#include <BlynkSimpleEsp32.h>
#include <ESP32Servo.h>
Servo myservo;
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x27, 20, 4);
const byte ROWS = 4; //Jumlah baris keypad
const byte COLS = 4; //Jumlah kolom keypad
char Keys[ROWS][COLS] = { //Membuat array keypad
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = { 14, 12, 19, 18 };
byte colPins[COLS] = { 5, 4, 27, 15 };
Keypad customKeypad = Keypad( makeKeymap(Keys), rowPins, colPins, ROWS, COLS); //Masukkan info keypad pada library
char customKey; //Variabel penampung input keypad
int number = 0; //Variabel penampung nilai angka
int password = 1379; //Password
#define buzzer 23
#define lampu 25
int a;
int saklar = 0;
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BLYNK_WRITE(V1){
saklar = (param.asInt());
if (saklar == 0) {
Blynk.virtualWrite(V0, "SISTEM AKSES MASUK AKTIF");
number = 0;
lcd.setCursor (0, 2);
lcd.print (" ");
lcd.setCursor (0, 3);
lcd.print (" ");
a = LOW;
}else{
a = HIGH;
number = 0;
}
}
void setup() {
pinMode(buzzer,OUTPUT);
pinMode(lampu, OUTPUT);
myservo.attach(2);
myservo.write(0);
Blynk.begin(auth, ssid, pass);
// Mengaktifkan LCD
lcd.init();
lcd.backlight();
lcd.setCursor (0, 0);
lcd.print (" AKSES MASUK");
lcd.setCursor (0, 1);
lcd.print ("PASSWORD : ");
Blynk.virtualWrite(V0, "SISTEM AKSES MASUK AKTIF");
}
void loop() {
if (a == LOW){
customKey = customKeypad.getKey(); //Baca input keypad
//------------Prosedur jika input berupa angka------------//
switch(customKey){
case '0' ... '9':
number = number * 10 + (customKey - '0');
lcd.setCursor (11, 1);
lcd.print (number);
break;
//------------Jika input '#' maka cek password------------//
case '#':
if(number == password){ //Jika password benar, maka
myservo.write(90);
delay(15);
lcd.setCursor (0, 2);
lcd.print (" ");
lcd.setCursor (0, 2);
lcd.print (" AKSES DITERIMA");
lcd.setCursor (0, 3);
lcd.print (" ");
lcd.setCursor (0, 3);
lcd.print (" PINTU TERBUKA");
digitalWrite(lampu, HIGH);
noTone(buzzer);
lcd.setCursor (11, 1);
lcd.print (" ");
lcd.setCursor (11, 1);
lcd.print ("COCOK");
number = 0;
}
else{ //Jika salah, maka
Blynk.virtualWrite(V0, "ORANG TIDAK MEMILIKI AKSES MASUK");
Blynk.logEvent("akses_masuk"); // Mengirim Notifikasi
myservo.write(0);
delay(15);
lcd.setCursor (0, 2);
lcd.print (" ");
lcd.setCursor (0, 2);
lcd.print ("AKSES DITOLAK");
lcd.setCursor (0, 3);
lcd.print (" ");
lcd.setCursor (0, 3);
lcd.print ("ALARAM ON RESET *");
lcd.setCursor (11, 1);
lcd.print (" ");
lcd.setCursor (11, 1);
lcd.print ("SALAH");
digitalWrite(lampu, LOW);
tone(buzzer, 120);
number = 0;
}
break;
case 'A':
myservo.write(0);
delay(15);
noTone(buzzer);
lcd.setCursor (11, 1);
lcd.print (" ");
lcd.setCursor (0, 2);
lcd.print (" ");
lcd.setCursor (0, 2);
lcd.print ("PINTU TERTUTUP");
lcd.setCursor (0, 3);
lcd.print (" ");
lcd.setCursor (0, 3);
lcd.print ("ADA ORANG DI DALAM");
number = 0;
Blynk.virtualWrite(V0, "ADA ORANG DALAM RUANGAN");
break;
//------------Jika input '*' maka hapus tampilan------------//
case '*':
myservo.write(0);
delay(15);
noTone(buzzer);
lcd.setCursor (11, 1);
lcd.print (" ");
digitalWrite(lampu, LOW);
lcd.setCursor (0, 2);
lcd.print (" ");
lcd.setCursor (0, 3);
lcd.print (" ");
number = 0;
break;
}
}else{
myservo.write(0);
delay(15);
noTone(buzzer);
lcd.setCursor (11, 1);
lcd.print (" ");
digitalWrite(lampu, LOW);
lcd.setCursor (0, 2);
lcd.print (" ");
lcd.setCursor (0, 2);
lcd.print (" AKSES DIKUNCI");
lcd.setCursor (0, 3);
lcd.print (" ");
lcd.setCursor (0, 3);
lcd.print (" OLEH PEMILIK");
Blynk.virtualWrite(V0, "AKSES MASUK DIKUNCI");
delay(1000);
Blynk.virtualWrite(V1, 1);
number = 0;
}
Blynk.run();
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4
bz1:1
bz1:2
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO
led1:A
led1:C
servo1:GND
servo1:V+
servo1:PWM
vcc1:VCC
gnd1:GND
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
keypad2:R1
keypad2:R2
keypad2:R3
keypad2:R4
keypad2:C1
keypad2:C2
keypad2:C3
keypad2:C4
lcd2:GND
lcd2:VCC
lcd2:SDA
lcd2:SCL