Skip to content

Конфигурация изображений в ESPHome

Система изображений в ESPHome позволяет использовать графические элементы для создания богатого пользовательского интерфейса. Рассмотрим структуру и применение различных типов изображений.

В этом проекте используется отдельный файл image.yaml, который подключается в main.yaml

Структура конфигурации изображения

Базовый формат

yaml
- file: 'img/weather/sunny.png'
  id: sunny_img
  type: rgb565
  resize: 100x100
  transparency: alpha_channel

Параметры конфигурации

file

Назначение: Путь к файлу изображения

  • Поддерживаемые форматы: .png, .jpg, .bmp
  • Путь относительно корня проекта ESPHome
  • Рекомендуется PNG для изображений с прозрачностью

id

Назначение: Уникальный идентификатор изображения

  • Используется для ссылки в LVGL виджетах
  • Формат: название_категории_img
  • Пример: sunny_img, battery_high_img

type

Назначение: Формат хранения изображения в памяти

  • rgb565 — 16-битный цвет (рекомендуется)
  • rgb — 24-битный цвет (не поддерживается устройством)
  • grayscale — полная шкала оттенков серого цвета
  • binary — монохромные изображения

resize

Назначение: Изменение размера изображения

  • Формат: ширина x высота
  • Выполняется при компиляции
  • Экономит память и процессорное время

transparency

Назначение: Обработка прозрачности

  • alpha_channel — использовать альфа-канал PNG
  • Отсутствие параметра — без прозрачности

Категории изображений

1. Логотипы и брендинг

yaml
#############################
########### LOGO ############
#############################

- file: 'img/loading/homeassistant.png'
  id: ha_img
  type: rgb565
  resize: 400x82
  transparency: alpha_channel

- file: 'img/loading/esphome.png'
  id: esphome_img
  type: rgb565
  resize: 320x95
  transparency: alpha_channel

Применение: Экраны загрузки, заставки, брендинг

  • Home Assistant: 400×82 пикселя
  • ESPHome: 320×95 пикселей
  • Используются при запуске системы

2. Освещение

yaml
#############################
########## LIGHT ############
#############################

- file: 'img/light/lightbulb.png'
  id: lightbulb_image
  type: rgb565
  transparency: alpha_channel

- file: 'img/light/rgb_ring.png'
  id: rgb_img
  type: rgb565
  transparency: alpha_channel

Применение: Интерфейс управления освещением

  • Лампочка: Основная иконка освещения
  • RGB кольцо: Цветовой селектор для RGB ламп
  • Без изменения размера (оригинальный размер)

3. Робот-пылесос

yaml
#############################
########## VACUUM ###########
#############################

Набор анимационных кадров: 17 изображений для анимации пылесоса

  • Размер: 200×200 пикселей (стандартизированный)
  • Углы поворота: 0°, 5°, 10°, 15°, 20°, 340°, 345°, 350°, 355°
  • Дополнительные позиции с наклоном: 0_10, 0_20, 0_30, 20_10, 20_20, 20_30, 340_10, 340_20, 340_30

Логика анимации

ИзображениеУголОписание
vacuum_imgБазовоеСтатичное положение
vacuum_0_imgДвижение вперед
vacuum_5_imgПоворот на 5°
vacuum_10_img10°Поворот на 10°
vacuum_15_img15°Поворот на 15°
vacuum_20_img20°Поворот на 20°
vacuum_340_img340°Поворот назад на 20°
vacuum_345_img345°Поворот назад на 15°
vacuum_350_img350°Поворот назад на 10°
vacuum_355_img355°Поворот назад на 5°

Применение: Создание плавной анимации движения пылесоса

4. Погода

yaml
#############################
########## WEATHER ##########
#############################

Полный набор погодных условий: 15 изображений

  • Размер: 100×100 пикселей (оптимальный для виджетов)
  • Покрывает все основные погодные состояния

Дневные условия

IDФайлОписание
sunny_imgsunny.pngЯсно, солнечно
partlycloudy_sun_imgpartlycloudy_sun.pngПеременная облачность (день)
cloudy_imgcloudy.pngОблачно

Ночные условия

IDФайлОписание
clear_night_imgclear_night.pngЯсная ночь
partlycloudy_moon_imgpartlycloudy_moon.pngПеременная облачность (ночь)

Осадки

IDФайлОписание
rainy_imgrainy.pngДождь
pouring_imgpouring.pngЛивень
snowy_imgsnowy.pngСнег
snowy_rainy_imgsnowy_rainy.pngДождь со снегом
hail_imghail.pngГрад

Особые условия

IDФайлОписание
fog_imgfog.pngТуман
lightning_imglightning.pngГроза
lightning_rainy_imglightning_rainy.pngГроза с дождем
windy_imgwindy.pngВетрено
windy_variant_imgwindy_variant.pngСильный ветер

5. Флаги стран

yaml
#############################
########## FLAGS ############
#############################

Локализация интерфейса: 18 флагов стран

  • Размер: 60×80 пикселей (соотношение 3:4)
  • Стандартизированный размер для селектора языка

Поддерживаемые страны

КодСтранаID
deГерманияflags_de_img
esИспанияflags_es_img
frФранцияflags_fr_img
gbВеликобританияflags_gb_img
itИталияflags_it_img
krЮжная Кореяflags_kr_img
ptПортугалияflags_pt_img
ruРоссияflags_ru_img
usСШАflags_us_img
plПольшаflags_pl_img
trТурцияflags_tr_img
svШвецияflags_sv_img
idИндонезияflags_id_img
viВьетнамflags_vi_img
roРумынияflags_ro_img
nlНидерландыflags_nl_img
huВенгрияflags_hu_img
csЧехияflags_cs_img
fiФинляндияflags_fi_img

6. Индикаторы батареи

yaml
#############################
########## BATTERY ##########
#############################

Два набора индикаторов:

Для состояния заряда батареи

IDУровеньОписание
battery_very_high_img90-100%Очень высокий
battery_high_img70-89%Высокий
battery_middle_img40-69%Средний
battery_low_img20-39%Низкий
battery_very_low_img5-19%Очень низкий
battery_empty_img0-4%Разряжена

Для анимации заряда батареи

IDУровеньПрименение
battery_80_img80%Почти полная
battery_60_img60%Более половины
battery_40_img40%Меньше половины
battery_20_img20%Требует зарядки
battery_0_img0%Разряжена

Оптимизация памяти

Размеры изображений

КатегорияРазмерПамять (примерно)Применение
Флаги60×809.6 КБСелектор языка
Погода100×10020 КБВиджеты погоды
Пылесос200×20080 КБАнимация
Логотипы400×8265.6 КБЗаставки

Практическое использование

В LVGL виджетах

yaml
# Статическое изображение
- img:
    src: sunny_img
    align: center

# Анимация
- animimg:
    src: [ 
      battery_0_img,
      battery_20_img,
      battery_40_img,
      battery_60_img,
      battery_80_img,
      battery_very_high_img,
    ]

Заключение

Правильно организованная система изображений обеспечивает:

  • Визуальную привлекательность — красивый и современный интерфейс
  • Интуитивность — понятные пользователю визуальные элементы
  • Производительность — оптимизированное использование памяти
  • Масштабируемость — легкость добавления новых элементов

Используйте предложенную структуру как основу и адаптируйте под свои потребности, сохраняя принципы организации и оптимизации.