Подключение клавиатуры 4×4 к ESP32

Матричная клавиатура

Матричная клавиатура 4×4 подключается к ESP32 восемью выводами: четыре строки и четыре столбца. Библиотека Keypad по очереди подаёт сигнал на столбцы и читает строки.

Схема подключения клавиатуры 4×4 к ESP32

Клавиатура 4×4ESP32
C1GPIO26
C2GPIO25
C3GPIO33
C4GPIO32
R1GPIO13
R2GPIO12
R3GPIO14
R4GPIO27

Схема из примера «Матричная клавиатура 4x4».

Матричная клавиатура 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

В железе

На ESP32 выводы GPIO34–39 только вход и без внутренней подтяжки — для столбцов с INPUT_PULLUP они не годятся. Не используйте и GPIO6–11 (к ним подключена флеш-память).

Частые ошибки при подключении к ESP32

Другие детали для ESP32