Найти в Дзене
Электроника, ESP32, Arduino

Обработка внешних прерываний на ESP32 (2 энкодера)

В этой статье будут разобраны нюансы использования внешних прерываний на платформе ESP32 на примере подключения двух энкодеров. В конце статьи вы найдете готовый пример кода, который сможете адаптировать под свои проекты. (в том числе масштабировать и под большее число энкодеров)

Энкодеры идеально подходят для различных регуляторов и создания многоуровневых меню - так как в отличии от потенциометров они не "шумят" и не ловят помехи.

Схема подключения 2-х энкодеров
Схема подключения 2-х энкодеров
Прототип на макетной плате
Прототип на макетной плате

Данный пример выдает в монитор порта следующие записи:

Пример работы проекта
Пример работы проекта

Вращение ручек левого или правого энкодера увеличивает или уменьшает соответствующие счетчики. Нажатие на кнопку левого энкодера уменьшает счетчик, нажатие на кнопку правого - увеличивает. Учитывается только одиночное нажатие. И для энкодеров и для кнопок реализована программная защита от дребезга контактов.

По схемотехнике:

Выводы отмеченные ! поддерживают прерывания
Выводы отмеченные ! поддерживают прерывания

В отличии от платформы Arduino практически все выводы платы ESP-WROOM-32 DevKit v1 поддерживают прерывания.

Есть одно серьезное замечание - выводы 36, 39, 34, 35 не могут быть использованы как выходы. Использование данных пинов в качестве входов возможно - но на них отсутствует возможность подключения внутренних подтягивающих резисторов (сконфигурировать их как "INPUT_PULLUP" не получится - обязательно нужна внешняя подтяжка)!
Обязательно имейте это ввиду при подключении любых механических контактов.

Пример для подключения энкодеров
Пример для подключения энкодеров

В примере вы найдете 4 файла - если потребуется подключить еще один энкодер - можете создать копию файла "encoderL.h", переименовать переменные и пины подключения, добавить по аналогии кнопку в файл buttons.h и подключить 3-й энкодер.

На Алиэкспресс для готовых конструкций можно найти вот такой вариант:

Энкодер инкрементный EC11 (ручка 15 мм, круглый вал, с кнопкой) + Ручка регулирования 21x17 мм (круглый вал)
Энкодер инкрементный EC11 (ручка 15 мм, круглый вал, с кнопкой) + Ручка регулирования 21x17 мм (круглый вал)

Имейте ввиду - энкодер с высотой ручки 15мм и такой ручкой регулирования можно встроить в корпус с толщиной стенки не более 3мм!!! Если стенка будет толще - ищите энкодер с высотой ручки 20мм.

Ручки всех цветов радуги

Энкодер EC11 (ручка 15мм)

Энкодер ЕС11 (ручка 20мм)

Подробный алгоритм обработки дребезга кнопок смотрите здесь

Подробный алгоритм работы с энкодером и его устройство смотрите здесь

Скетч этого примера доступен по этой ссылке. (сторонние библиотеки не использовались).

В следующей статье данный программный модуль будет применен для управления самодельным FM-радиоприемником. (один энкодер будет использован для переключения между радиостанциями, второй в качестве регулятора громкости).

Полный список всех статей канала доступен по этой ссылке.