В этой статье будут разобраны нюансы использования внешних прерываний на платформе ESP32 на примере подключения двух энкодеров. В конце статьи вы найдете готовый пример кода, который сможете адаптировать под свои проекты. (в том числе масштабировать и под большее число энкодеров)
Энкодеры идеально подходят для различных регуляторов и создания многоуровневых меню - так как в отличии от потенциометров они не "шумят" и не ловят помехи.
Данный пример выдает в монитор порта следующие записи:
Вращение ручек левого или правого энкодера увеличивает или уменьшает соответствующие счетчики. Нажатие на кнопку левого энкодера уменьшает счетчик, нажатие на кнопку правого - увеличивает. Учитывается только одиночное нажатие. И для энкодеров и для кнопок реализована программная защита от дребезга контактов.
По схемотехнике:
В отличии от платформы Arduino практически все выводы платы ESP-WROOM-32 DevKit v1 поддерживают прерывания.
Есть одно серьезное замечание - выводы 36, 39, 34, 35 не могут быть использованы как выходы. Использование данных пинов в качестве входов возможно - но на них отсутствует возможность подключения внутренних подтягивающих резисторов (сконфигурировать их как "INPUT_PULLUP" не получится - обязательно нужна внешняя подтяжка)!
Обязательно имейте это ввиду при подключении любых механических контактов.
В примере вы найдете 4 файла - если потребуется подключить еще один энкодер - можете создать копию файла "encoderL.h", переименовать переменные и пины подключения, добавить по аналогии кнопку в файл buttons.h и подключить 3-й энкодер.
На Алиэкспресс для готовых конструкций можно найти вот такой вариант:
Имейте ввиду - энкодер с высотой ручки 15мм и такой ручкой регулирования можно встроить в корпус с толщиной стенки не более 3мм!!! Если стенка будет толще - ищите энкодер с высотой ручки 20мм.
Подробный алгоритм обработки дребезга кнопок смотрите здесь
Подробный алгоритм работы с энкодером и его устройство смотрите здесь
Скетч этого примера доступен по этой ссылке. (сторонние библиотеки не использовались).
В следующей статье данный программный модуль будет применен для управления самодельным FM-радиоприемником. (один энкодер будет использован для переключения между радиостанциями, второй в качестве регулятора громкости).
Полный список всех статей канала доступен по этой ссылке.