📱 Подписаться
IT и цифровая трансформация

Как обычный кухонный таймер на ESP32 превратился в домашний центр уведомлений

📰 Habr 👁️ 4 просмотров

4yGON2 часа назад

Как обычный кухонный таймер на ESP32 превратился в домашний центр уведомлений

Время на прочтение3 минОхват и читатели3.7KУмный домКейсИзначально я просто хотел разобраться: как работать с ESP32, как выводить информацию на OLED-дисплей, как организовать управление через энкодер.Так появилась идея кухонного таймера.

Первая версия — таймер для кухни

Мне хотелось сделать максимально простой и удобный сценарий:

• подошёл к кухне;
• выбрал продукт;
• нажал кнопку;
• ждёшь сигнал окончания.Причём не просто таймер “на 10 минут”, а уже готовые пресеты.

Например:

• Barilla №3; • Barilla №5; • Гречка; • Яйца;То есть:

• закинул макароны;
• выбрал нужный пресет;
• ESP32 сама знает нужное время.Первая версия устройства выглядела примерно так:

Железо:

• ESP32 • OLED SSD1306 • энкодер • пищалка

Очень быстро стало неудобно

Поначалу все таймеры были просто захардкожены в прошивке:

addSlot("Макароны", "Barilla №3", "", 7);
addSlot("Макароны", "Barilla №5", "", 8);Но быстро выяснилось, что:

• добавлять новые продукты неудобно;
• менять время приготовления неудобно;
• каждый раз приходится перепрошивать ESP32.Тогда появилась первая “взрослая” идея:хранить всё в JSON и редактировать через Web UI.

LittleFS и Web UI

ESP32 получила:

• файловую систему LittleFS;
• JSON-базу;
• встроенный Web UI.Теперь таймеры и продукты можно было: добавлять, удалять, редактировать, без перепрошивки.

WEB UI ESP32

Контейнеры для хранения продуктов

Дальше проект неожиданно получил бытовое продолжение. Женщина в доме решила пересыпать крупы, макароны и другие продукты в красивые контейнеры. Выглядеть стало действительно лучше. Но появилась новая проблема: срок годности оставался на заводской упаковке. На контейнерах никакой информации уже не было. Тогда появилась идея: раз уж ESP32 уже умеет хранить JSON и показывать информацию на OLED — почему бы не добавить список продуктов со сроками годности?

Продукты и сроки годности

Так в проекте появился второй раздел:

• название продукта;
• срок годности;
• уведомления о приближении окончания срока хранения.Продукты со сроком годностиКатегория с таймерами для продуктовЗапущенный таймер

Экран простаивал без пользы

Спустя время стало понятно:в режиме ожидания OLED просто ничего полезного не показывает.

Тогда был добавлен скринсейвер с часами.

ESP32 начала синхронизировать время через NTP и отображать, в простое.

Но и этого оказалось мало

Интеграция с посудомойкой

Ранее я уже делал отдельный проект, как превратить обычную посудомойку в “умную”.

Wemos d1 в ПосудомойкуКак я сделал обычную посудомоечную машину умной, с Home Assistant/ESPHome / ХабрОна начала отправлять в MQTT:

• работает ли мойка;
• сколько минут осталось до конца цикла.И тут появилась идея: раз OLED уже висит рядом с посудомойкой, почему бы не показывать остаток мойки прямо на нём?

Так ESP32 начала отображать:

Скрин сейвер с остаточным временем посудомойкиЭто оказалось неожиданно удобно:

• не нужно открывать Home Assistant;
• не нужно смотреть на телефон;
• остаток мойки видно сразу с кухни.Логика работы скрин сейвера:

• Активируется только если не запущен таймер или не крутил энкодер хотя бы 1 минуту
• Если работает посудомойка - показывает остаточное время мытья посуды
• Иначе показывает текущее время
• Если есть уведомления пускаем снизу бегущей строкой

Домашняя аптечка

Позже во время разбора старой аптечки появилась ещё одна идея.

Если система уже умеет:

• хранить продукты;
• отслеживать сроки годности;
• показывать уведомления;то почему бы не добавить лекарства?

Так появился отдельный medicines.json:

{
"medicines": [
{
"name": "Парацетамол",
"expiry": "2028-01-01",
"purpose": ["простуда", "температура"]
}
]
}

Home Assistant как полноценный интерфейс

В какой-то момент стало понятно, что база лекарств начинает разрастаться.

Сам Web UI на ESP32 работал нормально и отлично подходил для:

• первоначальной настройки;
• загрузки JSON;
• резервных копий;
• редактирования базы.Но искать лекарства в большом списке становилось неудобно.

• длинный список;
• много категорий;
• похожие названия;
• отсутствие поиска.Тогда интерфейс для аптечки был перенесён в Home Assistant.

При этом сама архитектура осталась прежней: ESP32 по-прежнему хранит всю базу локально в LittleFS. Home Assistant используется только как красивый frontend.

В новом интерфейсе появились:

• поиск;
• категории;
• фильтры;
• сортировка по сроку годности;
• адаптация под мобильные устройства;
• тёмная и светлая тема.

Домашняя аптечка, главная страницаДомашняя аптечка, результаты поиска лекарства от горлаПричём данные продолжают храниться на ESP32 и синхронизируются через MQTT. Получилась довольно необычная архитектура:Home Assistant UI

MQTT

ESP32 ←→ LittleFSТо есть Home Assistant здесь выступает скорее как UI-приложение, а сама ESP32 — как локальный сервер хранения данных.Теги:• homeassistant
• esp32
• esphomeХабы:• Умный дом

Получайте больше инсайтов о систематизации бизнеса

Подписывайтесь на Telegram-канал Business Operations — ежедневные материалы о бизнес-процессах, операционном управлении и повышении эффективности

💬 Подписаться на канал