Система управления брожением пива на esp32c6 (быстрый обзор)
- Цена: 390₽ + модули реле и термодатчики
- Перейти в магазин
Очень давно не писал обзоры на муське, решил это исправить.
Ранее я писал обзоры и часть про пивоварение. Несколько лет я не варил пиво из-за смены деятельности, но в 2024 году решил продолжить варить своё вкусное пиво. Только, конечно, я слегка объёмы увеличил — со 100 литров на 300+ литров.


Про оборудование напишу, если будет интересно, но в данном посте хотелось бы рассказать о том, как я с нуля «навайбкодил» проект по управлению холодильниками.
Сразу честно: проект делался в формате «вопрос-ответ», где я — постановщик задач/тестер/руками в железо, а существенную часть кода помогала писать нейросеть. На доведение до состояния «не стыдно дать другому человеку» ушло примерно 6 месяцев (с переделками, багфиксами и полировкой).
Для чего мне это понадобилось?
— На данный момент работаю вахтовым методом и управлять температурой пива достаточно проблематично.
— Конечно есть готовые проекты для Smart Life, но для каждого холодильника надо своё устройство, да и последнее время РКН начали блокировать данный сервис.
— Хотелось бы, чтобы был режим профилей, т.е. сначала контроллер выдерживал одну температуру несколько дней, потом другую, третью и т.д. (я ориентировался на до 10 шагов в одном профиле).
Почему nanoESP32-C6?
Выбрал я контроллер nanoESP32-C6. Почему именно он:
— Wi-Fi + BLE: в проекте используется BLE как основной канал управления, а Wi-Fi/MQTT — для удалёнки и сервисных функций.
— 16MB Flash: это важно, потому что внутри контроллера хранятся не только настройки, но и графики/история/логи, плюс нужен запас под OTA.
— Разметка памяти под задачу: в скриптах сборки/прошивки используется профиль PartitionScheme=app3M_fat9M_16MB.

Сколько «холодильников» в системе?
Мне надо было управлять тремя устройствами: охладитель (для охлаждения ЦКТ) и для двух ЦКТ (левый и правый) на 200 литров, насосы перекачивают хладогент в рубашки ЦКТ.
Но для проекта решил сделать управление 5 устройствами: 3 сейчас и плюс 2 на будущее.
MQTT / удалёнка
Как я и писал выше, хочу управлять всеми холодильниками удалённо и самый удачный вариант — это брокер MQTT.
Я использовал сервис wqtt.ru, т.к. ценник всего 299 рублей в год.
Структура топиков сделана аккуратно, чтобы несколько устройств не мешали друг другу:
— топики строятся как {mac}/esp/… и {mac}/app/…
— где {mac} — суффикс устройства (последние 4 hex-символа MAC).
Датчики температуры
Датчики температуры — DS18B20.
Почему:
— можно посадить на OneWire (в прошивке шина — GPIO4)
— все датчики можно повесить на один порт (а не на 5 отдельных)
— погрешность у датчиков около ±0.5°C
Подключение (пины)
Ключевые пины из config.h:
— OneWire (DS18B20): GPIO4 (подтяжка 4.7 кОм к 3.3V)
— Реле (5 каналов): GPIO18, GPIO19, GPIO20, GPIO21, GPIO22
— Кнопка сброса: GPIO3
Уровень реле настраивается (Active LOW / Active HIGH) — чтобы не было сюрпризов типа «включено наоборот».
Логика работы холодильника (защиты)
В прошивке есть нормальные защиты и тайминги:
— отложенный старт после команды: 10 сек
— анти-флаппинг (минимум между остановками): 10 сек
— грейс-период потери датчика: 10 сек
— «отдых компрессора» по умолчанию: 60 мин работа / 10 мин пауза
Ограничения настроек:
— Целевая: от -20°C до +30°C
— Гистерезис: от 0.1°C до 10°C
Профили температур:
Профиль — это последовательность шагов (температура/гистерезис/длительность в секундах).
— можно стартовать / поставить на паузу / продолжить / остановить
— на паузе компрессор выключается и фиксируется отдельный статус
— во время выполнения профиля запрещены некоторые «опасные» изменения настроек (например, датчик)
Графики и статистика (хранится в контроллере)
Графики хранятся во внутренней памяти контроллера (FFat), папка /charts.
Агрегации:
5m, 1h, 1d, 1mo, 1y
Сроки хранения (кольцевые буферы, по проекту):
— 1h: 1440 точек (около 60 суток по часам)
— 1d: 360 точек (около года по дням)
— 1mo: 60 точек (около 5 лет по месяцам)
— 1y: 5 точек (около 5 лет по годам)

Плюс есть лента статусов компрессора (для дневного графика) со статусами:
0 стоп
1 охлаждение
2 поддержание
3 отдых компрессора
4 пауза
5 ошибка
OTA обновление
OTA реализовано через временный HTTP-сервер на контроллере:
— порт 8080
— POST /update
— GET /status
— токен выдаётся примерно на 300 сек

Backup / Restore
Бэкап/восстановление делается через временный HTTP-сервер:
— порт 80
— GET /backup.zip (настройки)
— GET /charts_backup.zip (графики)
— POST /restore (восстановление)
— GET /backup/status

Уведомления
Внутри контроллера события пишутся в FFat:
— /alarms.log, /errors.log, /notifications.log (ограничение ~50KB)
Если MQTT недоступен, уведомления ставятся в очередь:
— /push_queue.json и /tg_queue.json (FIFO, до 50 сообщений)
Ссылка на прошивку/архив: https://disk.yandex.ru/d/Eknr33MVx1n2WQ
MQTT сервис (как у меня): https://wqtt.ru — 299₽/год
Прошивка «в 1 клик»
В репозитории сделан сценарий прошивки для обычных людей:
— подключаешь контроллер
— запускаешь flash_holodos.bat
Скрипт:
— сам находит ESP32-C6 по VID/PID (VID_303A&PID_1001)
— сама скачивает самую свежую прошивку и приложение, а также скачивает все необходимые файлы для прошивки контроллера
После прошивки, нужно установить apk файл приложения на android устройство и перейти в мастер настройки, либо перейти в раздел справки, там всё детально расписано.
Итоги
— один контроллер → до 5 холодильников/каналов
— датчики DS18B20 → до 5 на одной шине
— управление: BLE + удалёнка через MQTT
— профили температуры
— графики и история внутри контроллера
— OTA и Backup/Restore
Видео обзор приложения:
Клуб домашних пивоваров 18+
| +56 |
661
58
|
| +70 |
4478
158
|
| +49 |
4770
114
|
Upd. Ага, уже, спасибо!