ESP32 Khóa Cửa Bằng Keypad

Tutorial này sẽ hướng dẫn bạn cách tạo một hệ thống khóa cửa bằng mật khẩu sử dụng keypad và khóa solenoid. Hệ thống sẽ mở khóa cửa khi nhập đúng mật khẩu và giữ cửa mở khóa trong 20 giây trước khi tự động khóa lại. Code ESP32 cũng có khả năng hỗ trợ nhiều mật khẩu.

※ Lưu ý:

Ngoài tutorial này, chúng tôi còn có các tutorial khác về hệ thống khóa cửa:

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×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (for USB-C PC)
1×Bàn phím ma trận 3x4
1×Relay
1×Solenoid Lock (Khóa Solenoid)
1×Adapter Nguồn 12V
1×(Tùy chọn) DC Power Jack
1×breadboard (Bo Mạch Thí Nghiệm)
1×dây jumper (Dây Jumper)
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 và Solenoid Lock

Chúng tôi có các tutorial riêng biệt tập trung cụ thể vào keypad và solenoid lock. Mỗi tutorial cung cấp 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 và nhiều hơn nữa. Để biết thêm thông tin về các tutorial này, vui lòng tham khảo các liên kết sau:

Sơ Đồ Kết Nối

  • ESP32 - Khóa cửa với keypad, solenoid lock
sơ đồ kết nối ESP32, bàn phím ma trận, khóa điện từ solenoid

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, solenoid lock

/* * 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-keypad-door-lock */ #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 = "1234567"; // change your password here const String password_2 = "987654"; // 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 33, change if needed pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, LOW); // 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("The password is correct, unlocking the door in 20 seconds"); digitalWrite(RELAY_PIN, HIGH); // unlock the door for 20 seconds delay(20000); digitalWrite(RELAY_PIN, LOW); // lock the door } else { Serial.println("The password is incorrect, try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

Các Bước Nhanh

  • Kết nối ESP32 với PC của bạn bằng cáp USB.
  • Mở Arduino IDE, chọn board và port phù hợp.
  • Click vào biểu tượng Libraries ở thanh bên trái của Arduino IDE.
  • Tìm kiếm thư viện "keypad", sau đó tìm thư viện keypad được tạo bởi Mark Stanley và Alexander Brevig.
  • Click nút Install để cài đặt thư viện keypad.
thư viện bàn phím ma trận ESP32
  • Copy code được cung cấp và paste vào Arduino IDE.
  • Biên dịch và upload code lên board ESP32 bằng cách click nút Upload trong Arduino IDE.
  • Mở Serial Monitor trong Arduino IDE.
  • Nhấn các phím 12345 và sau đó nhấn #
  • Nhấn các phím 1234567 và sau đó nhấn #
  • Quan sát trạng thái của lưỡi khóa trong 20 giây.
  • Quan sát kết quả hiển thị trên Serial Monitor.
COM6
Send
The password is incorrect, try again The password is correct, unlocking the door in 20 seconds
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Giải Thích Code

Trong hệ thống này, các mật khẩu hợp lệ được lập trình sẵn vào code ESP32. Một input string được sử dụng để lưu trữ mật khẩu mà người dùng nhập vào. Keypad có hai phím đặc biệt, *#, được sử dụng để xóa và kết thúc việc nhập mật khẩu. Hệ thống hoạt động như sau:

  • Khi một phím khác với các phím đặc biệt được nhấn, nó sẽ được thêm vào input string.
  • Khi phím * được nhấn, input string sẽ được xóa và quá trình nhập mật khẩu có thể được bắt đầu lại.
  • Khi phím # được nhấn:
    • Input string sẽ được so sánh với các mật khẩu định sẵn. Nếu nó khớp với một trong các mật khẩu định sẵn, relay sẽ được kích hoạt để mở khóa cửa.
    • Bất kể mật khẩu có đúng hay không, input string sẽ được xóa để chuẩn bị cho lần nhập tiếp theo.

    ※ Lưu ý:

    • Trong code trên, để đơn giản hóa, chúng tôi đã sử dụng hàm delay. Tốt hơn là sử dụng millis() thay vì delay(). Xem Cách sử dụng millis() thay vì delay()
    • Bạn có thể thêm một ESP32 - Piezo Buzzer để tạo tiếng beep mỗi khi keypad được nhấn.
    • Trong code trên, cửa được khóa lại sau 20 giây. Bạn có thể thay thế bằng một ESP32 - Cảm Biến Cửa. Cửa sẽ được khóa khi cảm biến cửa phát hiện cửa đã được đóng bởi người dùng.

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.