Подключение клавиатуры 4×4 к ESP32
Матричная клавиатура
Матричная клавиатура 4×4 подключается к ESP32 восемью выводами: четыре строки и четыре столбца. Библиотека Keypad по очереди подаёт сигнал на столбцы и читает строки.
Схема подключения клавиатуры 4×4 к ESP32
| Клавиатура 4×4 | ESP32 |
|---|---|
| C1 | GPIO26 |
| C2 | GPIO25 |
| C3 | GPIO33 |
| C4 | GPIO32 |
| R1 | GPIO13 |
| R2 | GPIO12 |
| R3 | GPIO14 |
| R4 | GPIO27 |
Схема из примера «Матричная клавиатура 4x4».
Выводы Клавиатура 4×4
| Вывод | Назначение |
|---|---|
| C1 | столбец 1 |
| C2 | столбец 2 |
| C3 | столбец 3 |
| C4 | столбец 4 |
| R1 | строка 1 |
| R2 | строка 2 |
| R3 | строка 3 |
| R4 | строка 4 |
Код для ESP32
const int ROWS[4] = {13, 12, 14, 27};
const int COLS[4] = {26, 25, 33, 32};
const char KEYS[4][4] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'},
};
void setup() {
Serial.begin(115200);
for (int i = 0; i < 4; i++) {
pinMode(ROWS[i], OUTPUT);
digitalWrite(ROWS[i], HIGH);
pinMode(COLS[i], INPUT_PULLUP);
}
}
char scan() {
for (int r = 0; r < 4; r++) {
digitalWrite(ROWS[r], LOW); // прижимаем одну строку
for (int c = 0; c < 4; c++) {
if (digitalRead(COLS[c]) == LOW) { // и смотрим, какой столбец ответил
digitalWrite(ROWS[r], HIGH);
return KEYS[r][c];
}
}
digitalWrite(ROWS[r], HIGH);
}
return 0;
}
void loop() {
char key = scan();
if (key) {
Serial.printf("нажато: %c\n", key);
delay(200);
}
}
Скетч можно править и запускать в симуляторе без платы и установки среды.
Что учесть на ESP32
- Выводы GPIO0, 2, 12 и 15 влияют на загрузку: если при включении клавиша замкнёт такой вывод, плата может не стартовать.
- GPIO34–39 для клавиатуры не годятся совсем: библиотека включает внутренние подтяжки, а у этих выводов их нет.
В железе
На ESP32 выводы GPIO34–39 только вход и без внутренней подтяжки — для столбцов с
INPUT_PULLUP они не годятся. Не используйте и GPIO6–11 (к ним подключена флеш-память).Частые ошибки при подключении к ESP32
- Строки на GPIO34–39: нажатия не распознаются.
- Клавиатура на выводах загрузки: клавиша, нажатая при включении, мешает старту ESP32.
- Перепутаны строки и столбцы — клавиши путаются местами. Поменяйте массивы выводов в коде.
- Нажатие двух-трёх кнопок сразу даёт «фантомную» четвёртую — у матрицы без диодов это неизбежно.
- Столбцы на GPIO34–39 ESP32 — без подтяжки они висят, и клавиатура «нажимается» сама.
delay()вloop—getKey()вызывается редко и пропускает короткие нажатия.
Ещё по теме
Другие детали для ESP32
HC-SR04DHT22 (AM2302)BME280DS3231SSD1306 OLED 0,96″LCD 1602 с I2CMAX7219TM1637MPU6050 (GY-521)Модуль релеWS2812B (NeoPixel)KY-040HX711ФоторезисторМодуль microSDRGB-светодиодСервопривод SG9074HC595ИК-приёмник (VS1838B)TFT ST7735 1,8″Шаговый двигательКнопкаПотенциометрПьезопищалкаСветодиодDS18B20Ползунковый переключательHC-SR501TTP223Датчик влажности почвыMQ-2LM35Джойстик KY-023DHT11HTU21DSN65HVD230