Открыть сервис

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 КБ и выше
Тактовая частота CPU16 МГц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.

Сравнение с аналогами

ПараметрLVGLemWin (SEGGER)TouchGFX (STM)uGFX
ЛицензияMITКоммерческаяБесплатная для STMGPL/Коммерческая
Минимальная RAM16 КБ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 →