Матричная клавиатура 4×4
Подключите матричную клавиатуру к ESP32 и создайте кодовый замок с вводом PIN-кода.
Подготовка оборудования
ESP32 DevKit
Любая версия (30/38 пинов)
Клавиатура 4×4
Мембранная, 16 кнопок (0-9, A-D, *, #)
Светодиод (опционально)
Для индикации правильного кода
Провода
Dupont «мама-папа» (8 проводов)
Как работает матричная клавиатура
Матричное сканирование
Клавиатура 4×4 содержит 16 кнопок, но использует только 8 проводов (4 строки + 4 столбца). Микроконтроллер поочерёдно подаёт LOW на каждую строку и считывает состояние столбцов — это называется матричным сканированием.
4 строки (Row) Выходы Поочерёдно подаём LOW 4 столбца (Col) Входы с Pull-Up Читаем состояние При нажатии кнопки в пересечении строки R2 и столбца C3 — провод R2 становится LOW, и на входе C3 появляется LOW. Так определяется нажатая кнопка.
Разъём клавиатуры
Схема подключения
Подключение 8 пинов клавиатуры к GPIO ESP32
Пин 1 (R1) → GPIO 19
Пин 2 (R2) → GPIO 18
Пин 3 (R3) → GPIO 5
Пин 4 (R4) → GPIO 17
Пин 5 (C1) → GPIO 16
Пин 6 (C2) → GPIO 4
Пин 7 (C3) → GPIO 0
Пин 8 (C4) → GPIO 2
Установка библиотеки Keypad
Для работы с клавиатурой нужна библиотека Keypad. Откройте Arduino IDE → Sketch → Include Library → Manage Libraries, найдите «Keypad» и установите «Keypad by Mark Stanley, Alexander Brevig».
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
// Раскладка клавиатуры
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
// Пины строк и столбцов
byte rowPins[ROWS] = {19, 18, 5, 17};
byte colPins[COLS] = {16, 4, 0, 2};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
Serial.begin(115200);
Serial.println("Клавиатура готова. Нажимайте кнопки...");
}
void loop() {
char key = keypad.getKey();
if (key) {
Serial.print("Нажата кнопка: ");
Serial.println(key);
}
} Кодовый замок
Теперь реализуем настоящий кодовый замок: вводим PIN-код, подтверждаем нажатием #, сбрасываем нажатием *.
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {19, 18, 5, 17};
byte colPins[COLS] = {16, 4, 0, 2};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
const String PASSWORD = "1234"; // Ваш PIN-код
String inputBuffer = "";
void setup() {
Serial.begin(115200);
Serial.println("=== Кодовый замок ===");
Serial.println("Введите PIN и нажмите #");
}
void loop() {
char key = keypad.getKey();
if (!key) return;
if (key == '#') {
// Проверка пароля
if (inputBuffer == PASSWORD) {
Serial.println("✓ Доступ разрешён! Замок открыт.");
} else {
Serial.println("✗ Неверный PIN. Попробуйте снова.");
}
inputBuffer = "";
} else if (key == '*') {
// Сброс ввода
inputBuffer = "";
Serial.println("Ввод сброшен");
} else {
inputBuffer += key;
Serial.print("Введено символов: ");
Serial.println(inputBuffer.length());
}
} Практическое применение
Кодовые замки
Защита сейфов, дверей, ящиков от несанкционированного доступа
Системы ввода
Калькуляторы, системы учёта посещений, управление меню
Роботы и станки
Ввод координат, углов поворота или управляющих команд
Решение проблем
❌ Кнопки не определяются
✓ Проверьте порядок подключения проводов — ошибка в одном проводе сдвигает все кнопки.
❌ Неверные символы при нажатии
✓ Проверьте массив rowPins и colPins — порядок пинов должен совпадать с физическим расположением.
❌ Несколько символов при одном нажатии
✓ Нормальная работа при дребезге. Добавьте keypad.setDebounceTime(50) в setup().
❌ Ошибка компиляции Keypad.h
✓ Убедитесь что библиотека установлена: Sketch → Include Library → Manage Libraries → «Keypad».
Что мы изучили
- ✓ Принцип матричного сканирования клавиатуры 4×4
- ✓ Подключение 8 проводов клавиатуры к GPIO ESP32
- ✓ Чтение нажатий через библиотеку Keypad
- ✓ Создание простого кодового замка с PIN-кодом
Цех Испытаний
Отточите мастерство на реальных кейсах. Каждая карта — это шаг к полному пониманию матричного ввода.
Эхо клавиш
Самое простое: нажал кнопку — увидел символ в Serial.
Подключите клавиатуру 4×4 к GPIO 19, 18, 5, 17 (строки) и GPIO 16, 4, 2, 15 (столбцы). Инициализируйте библиотеку Keypad. В loop() вызывайте char key = keypad.getKey(). Если key != NO_KEY — выводите символ в Serial.println(key). Проверьте все 16 клавиш.
Светосигналы
Три кнопки — три световых режима LED.
Подключите светодиод к GPIO 13. При нажатии '1' — включить LED (digitalWrite(13, HIGH)). При нажатии '2' — выключить LED. При нажатии '*' — запустить мигание: 5 раз по 200мс вкл / 200мс выкл. При нажатии '#' — остановить мигание и выключить LED. Состояние мигания храните в переменной bool blinking.
Калькулятор +
Ввод двух чисел с клавиатуры и вывод их суммы.
Реализуйте калькулятор сложения: пользователь вводит первое число (цифры 0–9, '#' — подтвердить), затем нажимает 'A' (оператор +), затем вводит второе число и нажимает '#'. Результат выводится в Serial: '12 + 34 = 46'. '*' сбрасывает ввод в любой момент. Числа могут быть многозначными (до 4 цифр).
Кодовый замок
PIN из 4 цифр с LED-индикацией результата.
Подключите зелёный LED к GPIO 12, красный к GPIO 14. Правильный код: '1234'. Пользователь вводит 4 цифры подряд (без подтверждения). После 4-го нажатия: если код верный — зелёный LED горит 3 секунды; если нет — красный LED мигает 3 раза по 200мс. При вводе каждой цифры выводите '*' в Serial (маскировка). После результата буфер сбрасывается автоматически.
Мини-телефон
Набор 7-значного номера с отображением на OLED и редактированием.
Реализуйте набор телефонного номера: цифры 0–9 добавляются в строку (максимум 7 символов). '*' удаляет последний символ (аналог Backspace). '#' подтверждает набор и выводит 'Вызов: XXXXXXX' в Serial. 'A' сбрасывает всё. После каждого нажатия обновляйте отображение на OLED (библиотека Adafruit_SSD1306): первая строка 'Номер:', вторая — текущие цифры с курсором '_'.
Свой Проект
Создайте свою уникальную модель в онлайн-симуляторе. Ограничений нет!
🎉 Урок завершён!
Теперь ESP32 умеет принимать ввод с матричной клавиатуры — откройте путь к кодовым замкам и интерактивным устройствам
Что вы изучили:
- ✓ Принцип матричного сканирования клавиатуры 4×4
- ✓ Подключение 8 проводов клавиатуры к GPIO ESP32
- ✓ Чтение нажатий через библиотеку Keypad
- ✓ Создание простого кодового замка с PIN-кодом
Назад к урокам:
📚Все уроки
Вернуться к списку уроков