ESP32 Hệ Thống Khóa Cửa Bằng Mật Khẩu

Hướng dẫn này sẽ chỉ bạn cách sử dụng ESP32, Keypad và khóa điện từ để tạo hệ thống khóa cửa. Người dùng sẽ được yêu cầu nhập mật khẩu qua keypad. Nếu mật khẩu hợp lệ, ESP32 sẽ điều khiển khóa điện từ để mở khóa cửa. Hướng dẫn cũng tùy chọn thêm màn hình LCD để thuận tiện hơn. Code ESP32 cũng hỗ trợ nhiều mật khẩu.

Linh Kiện Cần Thiết

1×mô-đun phát triển ESP-WROOM-32
1×Alternatively, ESP32 Uno-form board
1×Alternatively, ESP32 S3 Uno-form board
1×Cáp USB Type-C
1×Bàn phím ma trận 3x4
1×Relay
1×Khóa Điện Từ
1×Adapter Nguồn 12V
1×breadboard
1×Dây Jumper
1×(Tùy chọn) LCD I2C
1×(Tùy chọn) Jack Nguồn DC
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP32
1×(Khuyến nghị) Breakout Expansion Board for ESP32
1×(Khuyến nghị) Power Splitter for ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Keypad, Khóa Điện Từ và LCD

Chúng tôi có những hướng dẫn cụ thể về keypad, khóa điện từ và LCD. Mỗi hướng dẫn chứa thông tin chi tiết và hướng dẫn từng bước về pinout phần cứng, nguyên lý hoạt động, kết nối dây với ESP32, code ESP32... Tìm hiểu thêm về chúng tại các liên kết sau:

Cách kiểm tra mật khẩu

  • Phím đặc biệt * được sử dụng để reset mật khẩu
  • Phím đặc biệt # được sử dụng để kết thúc việc nhập mật khẩu.
  • Mọi phím được nhập, ngoại trừ *# sẽ được thêm vào một chuỗi.
  • Khi phím # được nhấn, việc nhập mật khẩu hoàn tất. ESP32 so sánh chuỗi đã nhập với các mật khẩu được định trước.
  • Nếu mật khẩu nhập vào hợp lệ, mở khóa cửa.

Sơ Đồ Đấu Nối

sơ đồ đấu nối hệ thống khóa cửa ESP32

This image is created using Fritzing. Click to enlarge image

Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.

Code ESP32 - Hệ thống khóa cửa với mật khẩu sử dụng keypad, khóa điện từ

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-door-lock-system-using-password */ #include <Keypad.h> #define RELAY_PIN 19 // ESP32 pin GPIO19 connected to the relay #define ROW_NUM 4 // keypad four rows #define COLUMN_NUM 3 // keypad three columns 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}; // ESP32 pin: GPIO12, GPIO14, GPIO27, GPIO26 connected to the row pins byte pin_column[COLUMN_NUM] = {25, 33, 32}; // ESP32 pin: GPIO25, GPIO33, GPIO32 connected to the column pins Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); const String password_1 = "1234"; // change your password here const String password_2 = "4444"; // change your password here const String password_3 = "55555"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum input characters is 32 pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, HIGH); // lock the door } void loop() { char key = keypad.getKey(); if (key) { Serial.println(key); if (key == '*') { input_password = ""; // reset the 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); // unlock the door for 20 seconds delay(20000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.println("Invalid Password => Try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

Các Bước Thực Hiện

  • Nếu đây là lần đầu tiên bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
  • Thực hiện đấu nối theo sơ đồ trên.
  • Kết nối board ESP32 với PC của bạn qua cáp micro USB
  • Mở Arduino IDE trên PC của bạn.
  • Chọn đúng board ESP32 (ví dụ: ESP32 Dev Module) và cổng COM.
  • Click vào biểu tượng Libraries trên thanh bên trái của Arduino IDE.
  • "keypad" vào ô tìm kiếm, sau đó tìm thư viện keypad của Mark Stanley, Alexander Brevig
  • Click nút Install để cài đặt thư viện keypad.
thư viện bàn phím ma trận ESP32
  • Sao chép code trên và dán vào Arduino IDE.
  • Biên dịch và upload code lên board ESP32 bằng cách click nút Upload trên Arduino IDE
  • Để mô phỏng khóa điện từ được lắp trên cửa, đặt nam châm điện gần tấm thép.
  • Nhấn các phím 1111 và nhấn #
  • Kiểm tra lực hút giữa nam châm điện và tấm thép.
  • Nhấn các phím 1234 và nhấn #
  • Kiểm tra lực hút giữa nam châm điện và tấm thép.
  • Xem kết quả trên Serial Monitor
COM6
Send
Invalid Password => Try again Valid Password => unlock the door
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Code ESP32 - Hệ thống khóa cửa với mật khẩu sử dụng keypad, khóa điện từ và LCD

Code dưới đây đã thêm LCD I2C để hiển thị trạng thái truy cập. Để đấu nối với LCD, bạn có thể xem trong hướng dẫn này ESP32 - LCD

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-door-lock-system-using-password */ #include <LiquidCrystal_I2C.h> #include <Keypad.h> #define RELAY_PIN 19 // ESP32 pin GPIO19 connected to the relay #define ROW_NUM 4 // keypad four rows #define COLUMN_NUM 3 // keypad three columns 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}; // ESP32 pin: GPIO12, GPIO14, GPIO27, GPIO26 connected to the row pins byte pin_column[COLUMN_NUM] = {25, 33, 32}; // ESP32 pin: GPIO25, GPIO33, GPIO32 connected to the column pins Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); const String password_1 = "1234"; // change your password here const String password_2 = "4444"; // change your password here const String password_3 = "55555"; // change your password here String input_password; LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27 (from DIYables LCD), 16 column and 2 rows void setup() { Serial.begin(9600); input_password.reserve(32); // maximum input characters is 32 pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, HIGH); lcd.init(); // initialize the lcd lcd.backlight(); } void loop() { char key = keypad.getKey(); if (key) { Serial.println(key); if (key == '*') { input_password = ""; // reset the 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); // unlock the door for 20 seconds delay(20000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.println("Invalid Password => Try again"); lcd.setCursor(0, 0); lcd.print("INCORRECT!"); lcd.setCursor(0, 1); lcd.print("ACCESS DENIED!"); } input_password = ""; // reset the input password } else { if (input_password.length() == 0) { lcd.clear(); } input_password += key; // append new character to input password string lcd.setCursor(input_password.length(), 0); // move cursor to new position lcd.print('*'); // print * key as hiden character } } }

※ Lưu ý:

Địa chỉ LCD I2C có thể khác nhau tùy theo từng nhà sản xuất. Trong code, chúng tôi sử dụng địa chỉ 0x27 được chỉ định bởi nhà sản xuất DIYables

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.

Bình Luận