Примеры LVGL для SiFli-SDK¶
Примеры LVGL из SiFli-SDK помогают проверить дисплей и UI, но не являются взаимозаменяемыми шаблонами продукта. Сначала подтвердите базовую работу панели и ввода демонстрацией нужной версии. Затем выберите пример для главного риска интеграции, запустите его без изменений с документированной конфигурацией платы и заменяйте по одному слою. Прежде чем считать пример работоспособной отправной точкой, проверьте статус его верификации и ограничения в README.
В этом руководстве примеры из указателя LVGL для SiFli-SDK сгруппированы по инженерным задачам. Актуальный список поддерживаемых плат, конфигурацию SDK, расположение исходного кода и ресурсов, команду сборки и ограничения конкретной версии смотрите на официальной странице.
Указатель — это каталог примеров, а не матрица совместимости плат. Поддержка определяется отдельно для каждого примера; название семейства в URL документации не подтверждает поддержку этого семейства. Проверяйте раздел Supported Boards в README конкретного примера. Общая команда сборки или наличие платы в матрице сборки репозитория сами по себе не доказывают, что работа проверена на устройстве. Если источники расходятся, явно указывайте это и сверяйте точную ревизию SDK и плату.
Начните с подходящей базовой конфигурации LVGL¶
| Инженерная задача | С чего начать | Что можно проверить | Переходите дальше, когда |
|---|---|---|---|
| Запустить базовое приложение LVGL | Демонстрации LVGL v8, Официальные примеры LVGL v8, Демонстрация LVGL v9 или Официальные примеры LVGL v9 | Выбранную версию LVGL, драйвер дисплея платы, цикл отрисовки и базовые виджеты | Тракт обновления дисплея (flush) и устройство ввода стабильно работают с реальной панелью |
| Оценить процесс проектирования UI | Примеры gui_guider, SquareLine или EEZ Studio | Способ интеграции сгенерированного UI-кода в проект SDK | Код собирается без ошибок и рассчитан на ту же версию LVGL, что и проект |
| Проверить отдельный сценарий UI | Basechart, Baselabel, Follow, Imgarray, Imgbar, Mulroller, Multanim, Multlist, Multroller, Multslider, Sector, Select или Timeline | Конкретный сценарий взаимодействия, виджет, компоновку или анимацию | Продукту нужен составной экран, а не отдельный визуальный элемент |
| Проверить ресурсы, анимацию или мультимедиа | Динамическая загрузка eZip v8 / v9, Lottie, Локальное видео или Потоковое воспроизведение | Тракт хранения, декодирования, отрисовки и обновления для более сложного контента | На целевом оборудовании измерены размер ресурсов, размещение в памяти, частота обновления и энергопотребление; результаты укладываются в ограничения продукта |
| Собрать полноценный, показательный UI | Электронный компас, Указатель игр (README сапёра) или Интерфейс часов v8 / v9 | Переходы между экранами, взаимодействие и многокомпонентную графическую нагрузку | Данные продукта, поведение на протяжении жизненного цикла и пределы производительности готовы заменить демонстрационное содержимое |
Списки плат различаются для разных примеров. В README LVGL v8 Demos указаны eh-lb563 и LCD-серии SF32LB52x, SF32LB56x и SF32LB58x. В README v8 Official Examples указана sf32lb52-lchspi-ulp и те же три LCD-серии. README v9 Demo перечисляет три LCD-серии; в общих инструкциях по сборке также показана eh-lb563, которой нет в явном списке Supported Development Boards. README v9 Official Examples перечисляет sf32lb52-lchspi-ulp и три LCD-серии. Считайте явный список в каждом README документированной областью поддержки; не добавляйте плату только на основании общего примера сборки.
Сначала определите границы интеграции¶
Перед адаптацией примера LVGL определите, какие уровни он уже проверяет, а какие ещё предстоит реализовать и проверить в продукте:
| Уровень | Что подтверждает пример | Что ещё необходимо проверить в продукте |
|---|---|---|
| Плата и панель | Известную конфигурацию платы SDK и путь вывода изображения | Конкретную панель, контроллер сенсорного ввода, последовательность включения питания, мультиплексирование выводов, временные параметры сброса и процедуру производственного тестирования |
| LVGL | Инициализацию для выбранной версии и работу демонстрационного UI | Архитектуру экранов продукта, распределение ответственности за обработку событий, ограничения памяти и политику обновления |
| Ресурсы | Поддерживаемый способ загрузки демонстрационных ресурсов | Формат ресурсов, объём хранилища, время загрузки, политику кэширования, лицензирование и обработку ошибок |
| Отрисовка | Рабочий цикл рисования и обновления дисплея (flush) | Стратегию обновления изменённых областей, число буферов, формат цвета, работу DMA/кэша и отзывчивость UI под нагрузкой |
| Приложение | Видимое поведение демонстрации | Работу с датчиками, Bluetooth и накопителями, отсчёт времени, переходы в режимы низкого энергопотребления, восстановление после сбоев и пользовательские данные |
Сначала проверьте физический дисплей, интерфейс панели и базовый тракт обновления экрана (flush). До того как считать демонстрацию LVGL подтверждением готовности конечной графической архитектуры, ознакомьтесь с разделами Обзор графики и Контроллер дисплея.
Выбирайте версию LVGL осознанно¶
В официальном указателе есть примеры как для LVGL v8, так и для LVGL v9. Используйте одну и ту же основную версию LVGL в сгенерированном UI-проекте, базовом примере и конфигурации SDK. Не переносите сгенерированный экран или пользовательский виджет из одной основной версии в другую без отдельной проверки совместимости и плана портирования.
Для первого запуска платы используйте демонстрацию или официальный пример, соответствующий версии LVGL, выбранной в конфигурации платы SDK. Так можно проверить панель, буферы, устройства ввода и планирование задач, прежде чем переходить к разработке приложения.
Сделайте резервную копию карты перед использованием примера SJPG для LVGL v8
В проекте v8 Official Examples необязательный путь загрузки SJPG с TF-карты вызывает dfs_mkfs() для корневой области карты, если монтирование не удалось; это может привести к потере данных. Перед включением и запуском этого пути сделайте резервную копию и проверьте код в используемой ревизии SDK. Не распространяйте это предупреждение на все примеры LVGL v8 или v9: проверяйте логику монтирования и форматирования в каждом проекте отдельно.
Генерация UI: gui_guider, SquareLine и EEZ Studio¶
Используйте пример инструмента проектирования UI, если команде нужен визуальный редактор для создания структуры экранов, стилей и ресурсов. В указателе есть примеры для gui_guider, SquareLine и EEZ Studio.
Перед включением результата генерации в продукт проверьте версию сгенерированного кода, разрешение экрана, глубину цвета, пути ресурсов и ответственность за функции обратного вызова.
Исходные примеры gui_guider и EEZ Studio явно требуют LVGL v8. Для SquareLine также нужна стандартная тема, используемая сгенерированным кодом. Включите созданные подкаталоги в сборку и выполните документированные шаги необязательного преобразования eZip: одного копирования файлов недостаточно.
Сгенерированный код ускоряет создание UI, но не заменяет драйвер дисплея, планирование буферов, драйверы устройств ввода, политику энергопотребления и интеграционные тесты. Храните сгенерированные файлы отдельно от написанной вручную логики приложения, чтобы повторный экспорт не перезаписал изменения продукта незаметно.
Виджеты и шаблоны взаимодействия¶
Используйте специализированные примеры LVGL v8 для проверки отдельных функций UI. Их объём различается: Multlist представляет полноценную демонстрацию прикладного фреймворка, а не минимальный тест виджета.
- Basechart строит графики рядов данных; Baselabel связывает источники данных с периодически обновляемым текстом.
- Follow показывает меню значков, движущихся под действием гравитации; Select — состояние выбора; Sector связывает значение с видимым угловым сектором изображения.
- Imgarray собирает числовые показания из изображений символов; Imgbar обрезает изображение переднего плана для отображения прогресса.
- Mulroller — настраиваемый через функции обратного вызова роликовый селектор; Multroller — более простой вариант для текстовых опций.
- Multlist охватывает списки, перелистывание, переходы, кэш ресурсов и жизненный цикл страниц; Multslider выводит значение или короткую подпись на бегунке.
- Multanim демонстрирует переходы, часть которых зависит от поддержки GPU/VGLite; Timeline координирует анимации на общей временной оси.
Поддержка плат у этих примеров также различается. Например, в явных списках Supported Boards для Multanim и Multlist указаны sf32lb52-lcd_n16r8 и sf32lb52-lchspi-ulp, тогда как в общих инструкциях ниже упоминаются более широкие цели 52x/56x/58x и eh-lb563 приводится как пример сборки. Это разные по охвату сведения. Сверяйтесь с README конкретного примера и текущей конфигурацией проекта; не делайте вывод о совместимости остальных виджетов по указателю или URL.
Выбирайте один из этих примеров, если конкретный элемент управления представляет риск для продукта. Первую адаптацию проводите поэтапно: запустите исходный элемент, подставьте данные продукта, измерьте стоимость перерисовки и потребление памяти и только потом добавляйте его на более сложный экран. Даже несколько визуально простых элементов вместе могут создать чрезмерную нагрузку на буфер кадра (framebuffer), пропускную способность чтения графических ресурсов или планирование обработки событий ввода.
Ресурсы, анимация и мультимедиа¶
Примеры Dynamic eZip доступны для LVGL v8 и LVGL v9. Выберите версию, соответствующую приложению, и проверьте динамическую загрузку сжатых ресурсов, прежде чем широко применять этот механизм. В статье eZip объясняется роль сжатия ресурсов в графическом тракте.
Для анимированных GIF/APNG SiFli также предлагает примеры AGIF/APNG + LVGL v8 и AGIF/APNG + LVGL v9 в разделе Multimedia > AGIF. В обоих README указана eh-lb525; текущая матрица сборки GCC также регистрирует оба пути проекта в devkit_lcd_boards. Регистрация в матрице означает наличие цели сборки, но не подтверждает работу на каждой плате этой группы. Перед использованием примера как продуктовой основы проверьте конкретную плату и ревизию SDK.
Примеры динамической загрузки eZip сравнивают доступ по пути файла с предварительной загрузкой в SRAM или PSRAM. Предварительная загрузка требует дополнительной памяти и может уменьшить число повторных чтений. Создавайте ресурсы для нужной версии LVGL v8/v9. В документированном варианте v9, в отличие от v8, путь требует префикса диска, например A:/. Проверьте используемое хранилище и настройку буквы диска. В README v9 явно перечислены sf32lb52-lcd_n16r8, sf32lb52-lcd_a128r16, sf32lb52-lchspi-ulp, sf32lb52-core_e8r16, sf32lb56-lcd_a128r12n1, sf32lb56-lcd_n16r12n1, sf32lb58-lcd_n16r32n1_dsi, sf32lb58-lcd_a128r32n1_qspi и sf32lb58-lcd_n16r32n1_qspi; не переносите этот список на v8 и не делайте вывод о поддержке других плат. Только для SF32LB57 документация eZip требует опцию преобразования -winsize 2048.
Lottie, воспроизведение локального видео и потоковое воспроизведение проверяют разные пути обработки контента, а не образуют фиксированную шкалу сложности. README Lottie помечает пример как непроверенный, перечисляет eh-lb563 и серии SF32LB52x/SF32LB56x; соответствующая запись проекта в текущей матрице сборки GCC закомментирована. Считайте список плат непроверенной документацией, а не подтверждённым набором целей. README локального видео явно указывает eh-lb523 и sf32lb52-lcd_n16r8, но также содержит более общие инструкции по сборке; запись проекта закомментирована в текущей матрице сборки GCC. Перед применением этих сведений к другой цели проверьте конкретную ревизию SDK. Пример воспроизводит видео H.264 из disk/video_example.mp4; если TF-карта успешно смонтирована, сначала читается video_example.mp4 в корне карты. README потокового примера указывает только sf32lb52-lchspi-ulp; он использует подключение телефона через Bluetooth PAN для доступа к сети и FFmpeg. Это не пример потоковой передачи видео по BLE.
Оценивайте каждый пример как системную нагрузку. При одновременной работе Bluetooth, датчиков и интерфейса дисплея измеряйте объём хранилища для ресурсов или потока, время декодирования, частоту обновления кадров, использование PSRAM/SRAM, пропускную способность дисплея и потребляемый ток. Реальные затраты зависят от контента, разрешения, настройки декодера и буферов.
Не считайте плавную короткую демонстрацию доказательством того, что система выдержит длительную анимацию. При проверке продукта используйте контент реалистичной продолжительности и фактическую политику обновления панели.
Шрифты и переключение языка во время работы¶
Пример FreeType загружает шрифты TrueType из файловой системы и позволяет менять шрифт и размер во время работы. В README сказано, что пример проверен на sf32lb52-lchspi-ulp; для других плат нужны раздел FS_REGION и достаточный объём системной кучи, поэтому пример не подтверждает их работу. Он показывает переход на встроенный шрифт при ошибке загрузки, проверку свободной памяти в куче и освобождение предыдущего шрифта при переключении. Проверьте набор символов и расход памяти для реальных языков и размеров; большие шрифты CJK следует сократить до нужных символов. Документированный тракт требует контуров TrueType, а не OpenType с контурами CFF. Нельзя освобождать шрифт, пока на него ссылается виджет или стиль; изменения выполняются в потоке LVGL. После изменения поставляемых шрифтов заново сформируйте и запишите образ файловой системы fs_root.bin: обновление только приложения не заменяет эти файлы.
Многоязычные примеры для LVGL v8 и LVGL v9 охватывают встроенные языки, установку внешних языковых пакетов, переключение во время работы, повторное сканирование каталога установки и сохранение выбранного языка через share_prefs. В README v8 указана sf32lb52-lchspi-ulp; список целей в README v9 нужно проверить отдельно, не перенося эту плату по предположению. Из JSON или XLSX создаются компилируемые ресурсы для встроенных языков либо двоичные пакеты для внешних языков. Ключи перевода должны совпадать во всех языках, а шрифты должны содержать нужные символы. Проверьте переключение, сохранение выбора после перезапуска, отсутствие ресурсов и обновление файловой системы. Следуйте путям и конфигурации из документации каждой версии; не считайте их одинаковыми только из-за сходства функций.
Компас, игры и интерфейсы часов¶
Примеры электронного компаса и интерфейса часов объединяют отображение с функциями приложения. На них можно изучать организацию экранов, временные параметры ввода и анимации, а также влияние повышенной графической нагрузки. Указатель игр ведёт на пример «Сапёр». В его README указаны eh-lb563 и серии SF32LB52x/56x, но не 58x. Перед запуском на 58x проверьте поддержку в используемой версии SDK.
В документированном примере компаса используется трёхосевой магнитометр MMC56x3, подключённый по I2C к sf32lb52-lchspi-ulp. Для реального продукта проверьте драйвер, подключение и калибровку: отображение направления само по себе не подтверждает точность измерения.
Примеры игр и интерфейсов часов подходят для проектирования переходов между экранами, но правила владения данными, режимы низкого энергопотребления, включение дисплея, уведомления и восстановление после сбоев нужно определить для самого продукта.
В README часов v8 перечислены LCD-серии SF32LB52x, SF32LB56x и SF32LB58x, а также sf32lb52-lchspi-ulp; README v9 перечисляет три LCD-серии. Оба исключают 520-hdk и указывают, что демонстрация 3D-вращения недоступна на SF32LB55x. При добавлении шрифтов проверьте размеры разделов ресурсов: в примере v8 возможно переполнение выделенной области для шрифтов.
Адаптируйте пример, сохранив подтверждающие материалы¶
| Шаг | Какие данные сохранить | Зачем это нужно |
|---|---|---|
| Собрать исходный пример | Ревизию SDK, имя платы, конфигурацию и журнал сборки | Сохранить заведомо работоспособную исходную точку |
| Запустить на оборудовании | Фото или видео, журнал последовательного порта, работу панели и сенсорного ввода | Подтвердить фактическую работу дисплея и ввода |
| Добавить один элемент продукта | Запись об изменениях и измерения частоты кадров и характеристик обновления | Связать регрессии с конкретными изменениями |
| Проверить под нагрузкой продукта | Отзывчивость UI при работе Bluetooth, датчиков и накопителей, а также при переходах в режимы низкого энергопотребления | Выявить ограничения интеграции, незаметные в отдельной демонстрации |
| Зафиксировать итоговые ограничения | Использование буферов, размещение в памяти, частоту кадров, энергопотребление и известные сценарии сбоев | Сохранить полезные для сопровождения инженерные данные |
Связанные материалы¶
- Обзор графики — выбор дисплея, планирование буфера кадра, интеграция LVGL и системные компромиссы.
- Контроллер дисплея — контроллер, буферы и тракт обновления экрана (flush).
- ePicasso, eZip и TurboPixel — возможности графического ускорения и сжатия в SF32.
- Примеры — каталог примеров SDK по разным направлениям.
- Указатель примеров LVGL для SiFli-SDK — актуальный официальный список и сведения о настройке.
Последнее обновление: