mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-03 22:08:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			80 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| Supported Targets | ESP32-S2 |
 | 
						|
| ----------------- | -------- |
 | 
						|
 | 
						|
# Matrix Keyboard Example (based on Dedicated GPIO)
 | 
						|
 | 
						|
(See the README.md file in the upper level 'examples' directory for more information about examples.)
 | 
						|
 | 
						|
## Overview
 | 
						|
 | 
						|
This example mainly illustrates how to drive a common matrix keyboard using the dedicated GPIO APIs, including:
 | 
						|
 | 
						|
* Manipulate the level on a group of GPIOs
 | 
						|
* Trigger edge interrupt
 | 
						|
* Read level on a group of GPIOs
 | 
						|
 | 
						|
Dedicated GPIO is designed to speed up CPU operations on one or a group of GPIOs by writing assembly codes with Espressif customized instructions (please refer TRM to get more information about these instructions).
 | 
						|
 | 
						|
This matrix keyboard driver is interrupt-driven, supports a configurable debounce time. GPIOs used by row and column lines are also configurable during driver installation stage.
 | 
						|
 | 
						|
## How to use example
 | 
						|
 | 
						|
### Hardware Required
 | 
						|
 | 
						|
This example can run on any target that has the dedicated feature (e.g. ESP32-S2). It's not necessary for your matrix board to have pull-up resisters on row/column lines. The driver has enabled internal pull-up resister by default. A typical matrix board should look as follows:
 | 
						|
 | 
						|
```
 | 
						|
row_0   +--------+-------------------+------------------------------+-----------------+
 | 
						|
                 |                   |                              |
 | 
						|
                 |       +           |       +                      |       +
 | 
						|
                 |     +-+-+         |     +-+-+          ......    |     +-+-+
 | 
						|
  .              +-----+   +-----+   +-----+   +-----+              +-----+   +-----+
 | 
						|
  .                              |                   |                              |
 | 
						|
  .                      .       |           .       |                      .       |
 | 
						|
                         .       |           .       |    ......            .       |
 | 
						|
                         .       |           .       |                      .       |
 | 
						|
                         .       |           .       |                      .       |
 | 
						|
                                 |                   |                              |
 | 
						|
row_n   +--------+-------------------+------------------------------+-----------------+
 | 
						|
                 |               |   |               |              |               |
 | 
						|
                 |       +       |   |       +       |              |       +       |
 | 
						|
                 |     +-+-+     |   |     +-+-+     |    ......    |     +-+-+     |
 | 
						|
                 +-----+   +-----+   +-----+   +-----+              +-----+   +-----+
 | 
						|
                                 |                   |                              |
 | 
						|
                                 |                   |                              |
 | 
						|
                                 |                   |                              |
 | 
						|
                                 +                   +                              +
 | 
						|
                                col_0               col_1          ......          col_m
 | 
						|
```
 | 
						|
 | 
						|
### Build and Flash
 | 
						|
 | 
						|
Build the project and flash it to the board, then run monitor tool to view serial output:
 | 
						|
 | 
						|
```
 | 
						|
idf.py -p PORT flash monitor
 | 
						|
```
 | 
						|
 | 
						|
(Replace PORT with the name of the serial port to use.)
 | 
						|
 | 
						|
(To exit the serial monitor, type ``Ctrl-]``.)
 | 
						|
 | 
						|
See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.
 | 
						|
 | 
						|
## Example Output
 | 
						|
 | 
						|
```
 | 
						|
I (2883) example: press event, key code = 0002
 | 
						|
I (3003) example: release event, key code = 0002
 | 
						|
I (5053) example: press event, key code = 0001
 | 
						|
I (5203) example: release event, key code = 0001
 | 
						|
I (6413) example: press event, key code = 0000
 | 
						|
I (6583) example: release event, key code = 0000
 | 
						|
I (7963) example: press event, key code = 0003
 | 
						|
I (8113) example: release event, key code = 0003
 | 
						|
I (8773) example: press event, key code = 0103
 | 
						|
I (8923) example: release event, key code = 0103
 | 
						|
I (9543) example: press event, key code = 0203
 | 
						|
I (9683) example: release event, key code = 0203
 | 
						|
```
 |