О проекте
Система из нескольких ESP32-дисплеев и Python-сервера: показывает погоду, домашний климат и состояние Linux-сервера, хранит историю показателей и позволяет управлять воспроизведением WiiM через Home Assistant.
- Стек
- ESP32-S3 · ESP-IDF · LVGL · Arduino · Python · MQTT · SQLite · Home Assistant · Docker
- Направление
- IoT и интеграции
- Год
- 2026
Задача
Объединить на физических дисплеях данные из нескольких источников: погоду, показатели домашнего климата, состояние Linux-сервера и мультимедиа. Основная серверная модель данных и логика сбора при этом не должны зависеть от интерфейса конкретного дисплея, а несколько ESP32-панелей должны одновременно работать с единым состоянием и использовать нужные им разделы данных и собственную конфигурацию.
Реализация
Разработан Python-сервис, который собирает и нормализует данные из OpenWeather, Home Assistant и Linux-сервера, хранит историю климатических и системных показателей в SQLite и публикует общее состояние через MQTT.
Реализованы два независимых клиента: сенсорная панель JC3248W535 на ESP32-S3 с ESP-IDF и LVGL и компактный LilyGO T-Display-S3 на Arduino. Оба клиента используют общий MQTT-протокол, но имеют собственный интерфейс, навигацию и набор поддерживаемых возможностей.
Для дисплеев реализованы текущая погода и прогноз, мониторинг температуры и влажности, графики истории, показатели CPU, памяти, использования диска, нагрузки, температуры и времени работы Linux-сервера, автоматическая яркость и отображение состояния медиаплеера. Большая сенсорная панель дополнительно позволяет управлять WiiM через Home Assistant.
Для JC3248W535 отдельно реализован собственный вывод изображения с framebuffer в PSRAM, программным поворотом, DMA-передачей и синхронизацией с дисплеем.
Результат
Получилась единая расширяемая система, в которой источники данных, сервер и физические панели разделены между собой. Несколько ESP32-клиентов могут одновременно работать с одним сервером, а история хранится централизованно и не расходует память микроконтроллеров.
Новый источник данных или дополнительный дисплей можно подключать без переделки всей системы: сервер публикует общее состояние через MQTT, а каждый клиент использует необходимые ему данные и самостоятельно формирует интерфейс под свой экран.