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 или длительного разрядного теста проект пока не публикует.
Оценка автономности около шести месяцев от аккумулятора 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. Конструкция удобна как воспроизводимый шаблон для батарейного интерфейса: отдельный маломощный сенсор определяет событие, а радиомодуль и основная логика получают питание только на время обработки и доставки данных.