LVGL
LVGL (Light and Versatile Graphics Library) — это свободная библиотека с открытым исходным кодом для создания графических пользовательских интерфейсов (GUI) на встраиваемых системах с ограниченными вычислительными ресурсами. Она предназначена для работы на микроконтроллерах, одноплатных компьютерах и других устройствах с малым объёмом оперативной и flash-памяти, поддерживая широкий спектр дисплеев, сенсорных экранов и вводных устройств.
История
Проект LVGL был основан в 2016 году венгерским разработчиком Габором Киссом-Вамосом (Gábor Kiss-Vámos) под названием LittlevGL. Изначально библиотека создавалась как лёгкая альтернатива существующим графическим фреймворкам для встраиваемых систем, таких как emWin или TouchGFX. В 2019 году проект был переименован в LVGL (Light and Versatile Graphics Library) для отражения расширения функциональности и выхода за рамки исключительно «маленькой» графики.
Ключевые версии:
- v6 (2019): переход на новую архитектуру, поддержка встроенных шрифтов и анимаций.
- v7 (2020): внедрение объектно-ориентированной модели, улучшенная работа с темами.
- v8 (2021): рефакторинг ядра, оптимизация производительности, добавление встроенных виджетов (например, таблиц, календарей).
- v9 (2023): поддержка многопоточности, улучшенная работа с GPU, встроенная поддержка векторной графики (Lottie, SVG).
Архитектура и принципы работы
LVGL построена на модульной архитектуре, где каждый элемент интерфейса (виджет) является объектом с собственными свойствами, стилями и событиями. Основные компоненты:
Ядро библиотеки
- Дисплейный драйвер: абстракция для работы с различными типами дисплеев (TFT, OLED, e-ink) через буфер кадров.
- Вводные устройства: поддержка сенсорных экранов, кнопок, энкодеров, мыши и клавиатуры.
- Диспетчер памяти: управление динамическим выделением памяти для виджетов и буферов.
- Таймеры и анимации: встроенный планировщик задач для обновления интерфейса и анимаций.
Объектная модель
- lv_obj: базовый объект, от которого наследуются все виджеты.
- Стили: гибкая система стилей, позволяющая задавать цвета, границы, тени, скругления, прозрачность и трансформации.
- События: обработка касаний, нажатий, жестов, таймеров и пользовательских событий.
Графический движок
- Рендеринг: использует буфер кадров (часто двойную буферизацию) для устранения мерцания.
- Аппаратное ускорение: может использовать GPU (например, через OpenGL ES или DMA2D на STM32) для ускорения отрисовки.
- Антиалиасинг: сглаживание краёв шрифтов и фигур.
Виджеты
LVGL предоставляет более 30 встроенных виджетов, разделённых на категории:
Базовые
- Кнопка (lv_btn): с поддержкой состояний (нормальное, нажатое, отключённое).
- Метка (lv_label): отображение текста с поддержкой переноса, выравнивания и анимации.
- Изображение (lv_img): вывод растровых изображений (BMP, PNG, JPG) с поддержкой альфа-канала.
- Полоса прокрутки (lv_bar): индикатор прогресса или регулятор.
Контейнеры
- Панель (lv_panel): контейнер для группировки виджетов с возможностью прокрутки.
- Список (lv_list): вертикальный список элементов с поддержкой выбора.
- Страница (lv_page): контейнер с прокруткой, часто используется для меню.
Вводные
- Текстовое поле (lv_textarea): поле для ввода текста с поддержкой курсора, выделения и буфера обмена.
- Переключатель (lv_switch): бинарный переключатель.
- Слайдер (lv_slider): ползунок для выбора значения из диапазона.
- Выпадающий список (lv_dropdown): список выбора.
Сложные
- Таблица (lv_table): отображение данных в табличном виде с возможностью редактирования ячеек.
- Календарь (lv_calendar): графический календарь с выбором даты.
- Чарт (lv_chart): построение линейных, столбчатых и круговых диаграмм.
- Спиннер (lv_spinner): индикатор загрузки.
Системные требования
LVGL оптимизирована для работы на устройствах с ограниченными ресурсами:
| Параметр | Минимальные требования | Рекомендуемые |
|---|---|---|
| Оперативная память (RAM) | 16 КБ | 64 КБ и выше |
| Flash-память | 64 КБ | 256 КБ и выше |
| Тактовая частота CPU | 16 МГц | 80 МГц и выше |
| Разрешение дисплея | 320×240 пикселей | 800×480 пикселей |
| Глубина цвета | 8 бит (256 цветов) | 16 бит (RGB565) |
Поддерживаемые платформы
LVGL портирована на десятки платформ и операционных систем:
Микроконтроллеры
- STM32 (серия F, G, H, L, U) — через HAL или CubeMX.
- ESP32 — с использованием FreeRTOS.
- NXP LPC, i.MX RT — через SDK.
- Raspberry Pi Pico — с использованием SDK.
- Arduino — через библиотеку LVGL_Arduino.
Одноплатные компьютеры
- Raspberry Pi (Linux, через framebuffer или SDL2).
- BeagleBone Black.
- Odroid.
Операционные системы
- FreeRTOS — наиболее распространённая RTOS.
- Zephyr — поддержка встроенного драйвера дисплея.
- Linux — через framebuffer, SDL2, DRM/KMS или X11.
- Windows — через SDL2 или Win32 API.
Применение
LVGL используется в широком спектре устройств и проектов:
Промышленная автоматизация
- Панели оператора (HMI) для станков, конвейеров, роботов.
- Контроллеры с сенсорным дисплеем для управления процессами.
Потребительская электроника
- Умные часы (например, проекты на ESP32 с дисплеем).
- Фитнес-трекеры.
- Медиаплееры и музыкальные центры.
- Умные домашние устройства (термостаты, розетки, дашборды).
Автомобильная электроника
- Бортовые компьютеры.
- Информационно-развлекательные системы.
Образование и хобби
- Проекты на Arduino и ESP32 для обучения программированию и электронике.
- Ретрогейминг (эмуляторы игр с графическим интерфейсом).
Примеры проектов
- Watchy — открытые умные часы на ESP32 с дисплеем e-ink, использующие LVGL для интерфейса.
- OpenHMI — панель управления для умного дома на Raspberry Pi Pico.
- M5Stack — модульные устройства с LVGL для прототипирования.
- LVGL Simulator — эмулятор на ПК для отладки интерфейсов без физического устройства.
Инструменты разработки
- LVGL Builder — визуальный редактор интерфейсов (веб-версия и десктопное приложение).
- SquareLine Studio — коммерческий инструмент для проектирования GUI, экспортирующий код для LVGL.
- Online Simulator — веб-версия для тестирования виджетов в браузере.
- LVGL Font Converter — утилита для конвертации шрифтов TrueType в формат LVGL.
Преимущества и недостатки
Преимущества
- Открытый исходный код: лицензия MIT позволяет свободное использование в коммерческих проектах.
- Низкие требования к ресурсам: работает на микроконтроллерах с 16 КБ ОЗУ.
- Богатый набор виджетов: более 30 готовых элементов.
- Кроссплатформенность: поддержка десятков платформ и ОС.
- Активное сообщество: регулярные обновления, документация, форумы.
Недостатки
- Отсутствие встроенной локализации: требуется ручная настройка для многоязычных интерфейсов.
- Ограниченная поддержка сложной анимации: для сложных эффектов (например, 3D-графика) требуется внешний движок.
- Зависимость от драйверов дисплея: портирование на нестандартные дисплеи может потребовать написания собственного драйвера.
Критика
Основные критические замечания в адрес LVGL связаны с:
- Производительностью на очень слабых MCU: на микроконтроллерах с менее 8 КБ ОЗУ библиотека может работать нестабильно.
- Сложностью отладки: из-за динамического выделения памяти возможны утечки, которые сложно отследить без профилировщика.
- Отсутствием встроенной поддержки векторной графики в ранних версиях: до v9 требовались внешние библиотеки для SVG.
Сравнение с аналогами
| Параметр | LVGL | emWin (SEGGER) | TouchGFX (STM) | uGFX |
|---|---|---|---|---|
| Лицензия | MIT | Коммерческая | Бесплатная для STM | GPL/Коммерческая |
| Минимальная RAM | 16 КБ | 32 КБ | 64 КБ | 8 КБ |
| Виджеты | 30+ | 20+ | 15+ | 25+ |
| Поддержка GPU | Да | Да | Да | Нет |
| Сообщество | Активное | Закрытое | Ограниченное | Малое |
Источники
- Официальная документация LVGL (lvgl.io)
- Репозиторий проекта на GitHub (github.com/lvgl/lvgl)
- Статья «LVGL: A Lightweight GUI Library for Embedded Systems» (Embedded.com)
- Документация SquareLine Studio (squareline.io)
- Сравнительный обзор GUI-библиотек для встраиваемых систем (EDN Network)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →