EdigE
← ЛЕНТА
RF · 29.06.2026

Zigbee Touch Keypad: ESP32-C6 + MPR121, шесть месяцев от 1300 мА·ч

Заявленные шесть месяцев от LiPo ёмкостью 1300 мА·ч требуют среднего тока около 0.30 мА, и в открытой Zigbee-клавиатуре этот бюджет построен вокруг отдельного тач-контроллера. MPR121 продолжает сканировать 12 электродов, пока ESP32-C6 находится в deep sleep, а его IRQ выводит MCU из сна. Реальная задержка ввода определяется последующим восстановлением Zigbee-соединения и пока не подтверждена измерениями.

В открытом проекте 2dom опубликована дверная ёмкостная клавиатура на ESP32-C6 DevKitC-1 и MPR121, рассчитанная на работу в Zigbee-сети Home Assistant через ZHA или Zigbee2MQTT. Основной инженерный приём состоит в разделении дежурного потребления: ESP32-C6 с 802.15.4-радиоблоком переводится в deep sleep после 10 секунд простоя, а MPR121 остаётся активным и следит за электродами. При касании контроллер выдаёт IRQ, подключённый к GPIO6, и этот сигнал по низкому уровню служит источником пробуждения MCU.

Передняя панель реализована как 12 электродов на самой печатной плате под слоем solder mask. Сетка 2×6 содержит цифры 0–9, Clear и Enter. MPR121 связан с ESP32-C6 по I²C: в опубликованной распиновке SDA выведен на GPIO18, SCL на GPIO4. Контроллер поддерживает 12 независимых ёмкостных каналов и отдельную линию прерывания; в документации NXP для режима с периодом опроса 16 мс приведён типовой ток 29 мкА. Такой уровень позволяет вынести непрерывное обнаружение касания из энергетического бюджета основной SoC, хотя итоговое потребление платы определяется также DevKitC-1, делителями батарейного измерителя, зарядной частью и режимами питания периферии.

Прошивка перед переходом в сон записывает в CONFIG2 MPR121 значение 0x3F, включает GPIO-пробуждение и вызывает esp_deep_sleep_start(). После wake-up ESP32-C6 фактически стартует заново, и код ждёт состояния Zigbee.connected() до инициализации тач-контроллера. Поэтому IRQ подтверждает обнаружение касания, но не подтверждает мгновенную готовность всей клавиатуры к передаче. Время от первого нажатия до отправки зависит от состояния end device, доступности родительского роутера, качества радиоканала и логики присоединения к сети. Осциллограмм тока, времени wake-up или длительного разрядного теста проект пока не публикует.

DrDoms / GitHub user 2dom

Оценка автономности около шести месяцев от аккумулятора 1300 мА·ч соответствует среднему току порядка 0.30 мА за 180 суток. Эта цифра остаётся расчётом автора: отсутствуют профиль передач в сутки, RSSI, температура, фактическая ёмкость LiPo и потребление конкретного DevKitC-1. Для устройства у двери именно радиообмен в неблагоприятном канале может заметно изменить средний ток, а линейный расчёт заряда по напряжению даёт лишь грубый индикатор. В коде напряжение отображается на 0–100% в диапазоне 3.2–4.2 В с коэффициентом 1.28; под нагрузкой такая модель не учитывает характерную нелинейность LiPo.

Клавиатура передаёт введённое значение в Zigbee как числовой Analog Input. В прошивке добавляется ведущая «1», чтобы сохранить нули в начале пользовательского PIN: ввод 01 публикуется как 101. Имеется и расхождение с заявленными восьмизначными кодами: MAX_INPUT_LENGTH равен 8 уже для строки с добавленной цифрой, поэтому пользовательская часть ограничена семью символами. Открытие замка выполняется внешней автоматизацией Home Assistant, а устройство не содержит автономной политики доступа или криптографической проверки PIN.

ESP32-C6 аппаратно пригоден и для Thread/Matter благодаря IEEE 802.15.4, однако текущая прошивка реализует Zigbee. Переход потребует отдельной модели Matter-кластера, commissioning, переработки передачи состояния и повторного измерения энергопотребления. Аппаратные материалы, включая KiCad-проект, схему, Gerber-файлы и STL корпуса, выпущены под CERN-OHL-S-2.0; прошивка распространяется по MIT. Конструкция удобна как воспроизводимый шаблон для батарейного интерфейса: отдельный маломощный сенсор определяет событие, а радиомодуль и основная логика получают питание только на время обработки и доставки данных.