ESP32 - 비밀번호를 사용한 도어락 시스템 | ESP32 - Door Lock System using Password
이 튜토리얼은 ESP32, 키패드 및 전자기 잠금장치를 사용하여 도어락 시스템을 만드는 방법을 안내합니다. 사용자는 키패드를 통해 비밀번호를 입력해야 합니다. 비밀번호가 유효하면 ESP32가 전자기 잠금장치를 제어하여 문을 엽니다. 이 튜토리얼은 선택 사항으로 LCD를 추가하여 더 편리하게 사용할 수 있습니다. 또한, ESP32 코드는 여러 비밀번호를 지원합니다.
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.
우리는 키패드, 전자기 잠금 장치 및 LCD에 관한 구체적인 튜토리얼을 가지고 있습니다. 각 튜토리얼에는 하드웨어 핀아웃, 작동 원리, ESP32에 대한 배선 연결, ESP32 코드 등에 대한 자세한 정보와 단계별 지침이 포함되어 있습니다. 다음 링크에서 더 자세히 알아보세요:
비밀번호를 초기화하기 위해 특별한 키 *가 사용됩니다.
비밀번호 입력을 종료하기 위해 특별한 키 #가 사용됩니다.
*와 #를 제외한 모든 입력된 키는 문자열에 추가됩니다.
# 키가 눌리면, 비밀번호 입력이 완료됩니다. ESP32는 입력된 문자열을 미리 정의된 비밀번호와 비교합니다.
입력된 비밀번호가 유효하면, 문을 잠금 해제합니다.
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법.
#include <Keypad.h>
#define RELAY_PIN 19
#define ROW_NUM 4
#define COLUMN_NUM 3
char keys[ROW_NUM][COLUMN_NUM] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte pin_rows[ROW_NUM] = {12, 14, 27, 26};
byte pin_column[COLUMN_NUM] = {25, 33, 32};
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
const String password_1 = "1234";
const String password_2 = "4444";
const String password_3 = "55555";
String input_password;
void setup() {
Serial.begin(9600);
input_password.reserve(32);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH);
}
void loop() {
char key = keypad.getKey();
if (key) {
Serial.println(key);
if (key == '*') {
input_password = "";
} else if (key == '#') {
if (input_password == password_1 || input_password == password_2 || input_password == password_3) {
Serial.println("Valid Password => unlock the door");
digitalWrite(RELAY_PIN, LOW);
delay(20000);
digitalWrite(RELAY_PIN, HIGH);
} else {
Serial.println("Invalid Password => Try again");
}
input_password = "";
} else {
input_password += key;
}
}
}
위 이미지와 같이 배선하세요.
마이크로 USB 케이블을 통해 ESP32 보드를 PC에 연결하세요.
PC에서 Arduino IDE를 엽니다.
올바른 ESP32 보드(예: ESP32 Dev Module)와 COM 포트를 선택하세요.
Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘을 클릭하세요.
검색 상자에 “keypad”라고 입력한 다음, Mark Stanley, Alexander Brevig에 의한 키패드 라이브러리를 찾아보세요.
키패드 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
위의 코드를 복사해서 아두이노 IDE에 붙여넣으세요.
아두이노 IDE에서 Upload 버튼을 클릭해서 코드를 ESP32 보드에 컴파일하고 업로드하세요.
문에 설치된 전자석 잠금장치를 시뮬레이션하려면 전자석을 암철판 가까이에 두세요.
1111 키를 누르고 #를 누르세요.
전자석과 암철판 사이의 인력을 확인하세요.
1234 키를 누르고 #를 누르세요.
전자석과 암철판 사이의 인력을 확인하세요.
시리얼 모니터에서 결과를 확인하세요.
Invalid Password => Try again
Valid Password => unlock the door
아래 코드는 접근 상태를 표시하기 위해 LCD I2C를 추가했습니다. LCD와의 연결에 대해서는 이 튜토리얼 Esp32 - LCD I2C 튜토리얼에서 확인할 수 있습니다.
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#define RELAY_PIN 19
#define ROW_NUM 4
#define COLUMN_NUM 3
char keys[ROW_NUM][COLUMN_NUM] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte pin_rows[ROW_NUM] = {12, 14, 27, 26};
byte pin_column[COLUMN_NUM] = {25, 33, 32};
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
const String password_1 = "1234";
const String password_2 = "4444";
const String password_3 = "55555";
String input_password;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
input_password.reserve(32);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH);
lcd.init();
lcd.backlight();
}
void loop() {
char key = keypad.getKey();
if (key) {
Serial.println(key);
if (key == '*') {
input_password = "";
lcd.clear();
} else if (key == '#') {
lcd.clear();
if (input_password == password_1 || input_password == password_2 || input_password == password_3) {
Serial.println("Valid Password => unlock the door");
lcd.setCursor(0, 0);
lcd.print("CORRECT!");
lcd.setCursor(0, 1);
lcd.print("DOOR UNLOCKED!");
digitalWrite(RELAY_PIN, LOW);
delay(20000);
digitalWrite(RELAY_PIN, HIGH);
} else {
Serial.println("Invalid Password => Try again");
lcd.setCursor(0, 0);
lcd.print("INCORRECT!");
lcd.setCursor(0, 1);
lcd.print("ACCESS DENIED!");
}
input_password = "";
} else {
if (input_password.length() == 0) {
lcd.clear();
}
input_password += key;
lcd.setCursor(input_password.length(), 0);
lcd.print('*');
}
}
}
※ NOTE THAT:
LCD I2C 주소는 제조업체마다 다를 수 있습니다. 코드에서는 DIYables 제조업체에서 지정한 0x27 주소를 사용했습니다.
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.