ESP32 Bàn Phím Keypad

Hướng dẫn này sẽ hướng dẫn bạn cách sử dụng ESP32 với bàn phím keypad. Cụ thể, chúng ta sẽ học:

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ộ Kit Keypad 3x4 và 4x4
1×(Thay thế) Keypad 3x4
1×(Thay thế) Keypad 4x4
1×(Tùy chọn) Jack Nguồn DC
1×breadboard
1×Dây Nối 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ề Bàn Phím Keypad

bàn phím ma trận

Bàn phím keypad được tạo thành từ một nhóm các nút nhấn được sắp xếp theo ma trận (hàng và cột). Một nút nhấn đại diện cho một phím. Có nhiều loại keypad khác nhau. Keypad 3x4 (12 phím) và keypad 4x4 (16 phím) là hai loại được sử dụng phổ biến nhất trong các dự án DIY.

Sơ Đồ Chân Keypad

Các chân keypad được phân thành hai nhóm: hàng và cột.

  • Keypad 3x4 có 7 chân:
    • R1, R2, R3, R4: chân hàng
    • C1, C2, C3: chân cột
  • Keypad 4x4 có 8 chân:
    • R1, R2, R3, R4: chân hàng
    • C1, C2, C3, C4: chân cột
    bàn phím ma trận sơ đồ chân

    Cách Hoạt Động Của Keypad

    Xem cách hoạt động của keypad

Sơ Đồ Đấu Nối Giữa Keypad và ESP32

Sơ đồ đấu nối ESP32 - Keypad 3x4

  • Cách kết nối ESP32 và keypad 3x4 sử dụng breadboard
ESP32 bàn phím ma trận 3x4 sơ đồ đấu dây

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.

how to connect ESP32 and 3x4 bàn phím ma trận

Sơ đồ đấu nối ESP32 - Keypad 4x4

  • Cách kết nối ESP32 và keypad 4x4 sử dụng breadboard
ESP32 bàn phím ma trận 4x4 sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

how to connect ESP32 and 4x4 bàn phím ma trận

Code ESP32

Keypad 3x4

#include <Keypad.h> #define ROW_NUM 4 // four rows #define COLUMN_NUM 3 // three columns char keys[ROW_NUM][COLUMN_NUM] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; byte pin_rows[ROW_NUM] = {18, 5, 17, 16}; // GPIO18, GPIO5, GPIO17, GPIO16 connect to the row pins byte pin_column[COLUMN_NUM] = {4, 0, 2}; // GPIO4, GPIO0, GPIO2 connect to the column pins Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); void setup() { Serial.begin(9600); } void loop() { char key = keypad.getKey(); if (key) { Serial.println(key); } }

Keypad 4x4

#include <Keypad.h> #define ROW_NUM 4 // four rows #define COLUMN_NUM 4 // four columns 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] = {19, 18, 5, 17}; // GPIO19, GPIO18, GPIO5, GPIO17 connect to the row pins byte pin_column[COLUMN_NUM] = {16, 4, 0, 2}; // GPIO16, GPIO4, GPIO0, GPIO2 connect to the column pins Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); void setup() { Serial.begin(9600); } void loop() { char key = keypad.getKey(); if (key) { Serial.println(key); } }

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.
  • Nhấp vào biểu tượng Libraries trên thanh bên trái của Arduino IDE.
  • keypad trong ô tìm kiếm, sau đó tìm thư viện keypad của Mark Stanley, Alexander Brevig
  • Nhấp nút Install để cài đặt thư viện keypad.
ESP32 bàn phím ma trận thư viện
  • Sao chép code trên và dán vào Arduino IDE.
  • Biên dịch và upload code lên bo mạch ESP32 bằng cách nhấp nút Upload trên Arduino IDE
  • Mở Serial Monitor trên Arduino IDE
how to open serial monitor on Arduino ide
  • Nhấn một số phím trên keypad
  • Xem kết quả trong Serial Monitor
COM6
Send
1 2 3 4 * #
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Keypad và Mật Khẩu

Keypad được sử dụng rộng rãi để xác thực ai đó bằng mật khẩu. Trong hướng dẫn này, một mật khẩu hợp lệ được định nghĩa trước trong code. Khi người dùng nhập mật khẩu từ keypad, nó sẽ được so sánh với mật khẩu được định nghĩa trước:

  • Nếu khớp, quyền truy cập được cấp.
  • Nếu không, quyền truy cập bị từ chối.

Để sử dụng mật khẩu với keypad, chúng ta chỉ định hai phím đặc biệt:

  • Một phím để bắt đầu nhập mật khẩu. Ví dụ, phím "*"
  • Một phím để kết thúc việc nhập mật khẩu. Ví dụ, phím "#"

Mật khẩu nhập từ người dùng sẽ được lưu trữ trong một chuỗi, được gọi là chuỗi mật khẩu đã nhập. Khi một phím được nhấn:

  • Nếu phím được nhập là "*", xóa chuỗi mật khẩu đã nhập để bắt đầu mật khẩu mới
  • Nếu phím được nhập KHÔNG phải là "*" hoặc "#", thêm phím đó vào chuỗi mật khẩu đã nhập.
  • Nếu phím được nhập là "#", so sánh chuỗi mật khẩu đã nhập với mật khẩu được định nghĩa trước.

Code Keypad - Mật Khẩu

/* * 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 */ #include <Keypad.h> #define ROW_NUM 4 // four rows #define COLUMN_NUM 3 // three columns char keys[ROW_NUM][COLUMN_NUM] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; byte pin_rows[ROW_NUM] = {18, 5, 17, 16}; // GPIO18, GPIO5, GPIO17, GPIO16 connect to the row pins byte pin_column[COLUMN_NUM] = {4, 0, 2}; // GPIO4, GPIO0, GPIO2 connect to the column pins Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); const String password = "7890"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum input characters is 33, change if needed } void loop() { char key = keypad.getKey(); if (key) { Serial.println(key); if (key == '*') { input_password = ""; // clear input password } else if (key == '#') { if (password == input_password) { Serial.println("The password is correct, ACCESS GRANTED!"); // DO YOUR WORK HERE } else { Serial.println("The password is incorrect, ACCESS DENIED!"); } input_password = ""; // clear input password } else { input_password += key; // append new character to input password string } } }
  • Chạy code trên
  • Mở Serial Monitor trên Arduino IDE
how to open serial monitor on Arduino ide
  • Nhấn các phím "123456" và nhấn "#"
  • Nhấn các phím "7890" và nhấn "#"
  • Xem kết quả trên Serial Monitor. Nó sẽ giống như sau:
COM6
Send
The password is incorrect, ACCESS DENIED! The password is correct, ACCESS GRANTED!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

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