ESP32 Keypad LCD

Hướng dẫn này sẽ chỉ bạn cách sử dụng ESP32 với keypad (bàn phím ma trận) và màn hình LCD. Cụ thể, chúng ta sẽ học cách hiển thị phím được nhấn lên màn hình LCD.

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×LCD I2C
1×Bộ Kit Keypad 3x4 và 4x4
1×(Thay thế) Keypad 3x4
1×(Thay thế) Keypad 4x4
1×breadboard
1×Dây Cắm Jumper
1×(Tùy chọn) DC Power Jack
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à LCD

Chúng tôi có các hướng dẫn cụ thể về keypad 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 tại các liên kết sau:

Sơ Đồ Kết Nối

  • Sơ đồ kết nối giữa ESP32 và Keypad 3x4
ESP32 bàn phím ma trận 3x4 lcd 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.

  • Sơ đồ kết nối giữa ESP32 và Keypad 4x4
ESP32 bàn phím ma trận lcd sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Code ESP32 - Keypad 3x4 - LCD I2C

/* * 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-lcd */ #include <Keypad.h> #include <LiquidCrystal_I2C.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] = {19, 18, 5, 17}; // GPIO19, GPIO18, GPIO5, GPIO17 connect to the row pins byte pin_column[COLUMN_NUM] = {16, 4, 0}; // GPIO16, GPIO4, GPIO0 connect to the column pins Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27 (from DIYables LCD), 16 column and 2 rows int cursorColumn = 0; void setup(){ lcd.init(); // initialize the lcd lcd.backlight(); } void loop(){ char key = keypad.getKey(); if (key) { lcd.setCursor(cursorColumn, 0); // move cursor to (cursorColumn, 0) lcd.print(key); // print key at (cursorColumn, 0) cursorColumn++; // move cursor to next position if(cursorColumn == 16) { // if reaching limit, clear LCD lcd.clear(); cursorColumn = 0; } } }

※ Lưu ý:

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

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 kết nối dây như hình 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.
  • Nhấn vào biểu tượng Libraries ở 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
  • Nhấn nút Install để cài đặt thư viện keypad.
ESP32 bàn phím ma trận thư viện
  • "LiquidCrystal I2C" vào ô tìm kiếm, sau đó tìm thư viện LiquidCrystal_I2C của Frank de Brabander
  • Nhấn nút Install để cài đặt thư viện LiquidCrystal_I2C.
ESP32 liquidcrystal i2c thư viện
  • Sao chép code trên và dán vào Arduino IDE.
  • Biên dịch và tải code lên board ESP32 bằng cách nhấn nút Upload trên Arduino IDE
tải mã lên Arduino IDE
  • Nhấn một số phím trên keypad
  • Xem kết quả trên màn hình LCD

Nếu LCD không hiển thị gì, hãy xem Khắc phục sự cố LCD I2C

Giải Thích Code Từng Dòng

Code ESP32 ở trên có chứa giải thích từng dòng. Hãy đọc các comment trong code!

Code ESP32 - Keypad 4x4 - LCD I2C

/* * 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-lcd */ #include <Keypad.h> #include <LiquidCrystal_I2C.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 ); LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27 (from DIYables LCD), 16 column and 2 rows int cursorColumn = 0; void setup(){ lcd.init(); // initialize the lcd lcd.backlight(); } void loop(){ char key = keypad.getKey(); if (key) { lcd.setCursor(cursorColumn, 0); // move cursor to (cursorColumn, 0) lcd.print(key); // print key at (cursorColumn, 0) cursorColumn++; // move cursor to next position if(cursorColumn == 16) { // if reaching limit, clear LCD lcd.clear(); cursorColumn = 0; } } }

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