当前位置: 首页 > article >正文

衡山派Luban-Lite系统LVGL示例程序配置与自定义APP开发实战

衡山派Luban-Lite系统LVGL示例程序配置与自定义APP开发实战最近在用衡山派的开发板做项目需要做一个带界面的产品。官方SDK里已经集成了LVGL这个强大的嵌入式图形库还提供了几个现成的Demo。但很多朋友拿到手后不知道该怎么配置这些Demo更不清楚如何把自己的界面程序加进去。今天我就以实际项目经验手把手带你走一遍从配置官方Demo到创建自定义APP的全过程帮你避开我当初踩过的那些坑。1. 运行官方LVGL Demo从配置到显示咱们先来看看怎么让官方提供的LVGL Demo跑起来。这就像是拿到一个新玩具先看看它自带的几个演示效果了解下它的能力。1.1 进入系统配置菜单衡山派的Luban-Lite系统基于RT-Thread所有的功能模块都是通过一个叫menuconfig的图形化界面来配置的。打开它很简单在SDK的根目录下执行me这个命令会打开一个基于终端的配置界面用上下键和空格键就能操作。咱们要配置的东西都在这里面。1.2 关键配置项详解进入me界面后找到Application options这个主菜单按回车进入。这里面的配置项比较多我挑几个和LVGL Demo直接相关的重点讲。第一步启用并配置文件系统LVGL的界面通常需要显示图片、字体等资源这些资源文件需要放在一个文件系统里比如FATFS供程序读取。所以首先要确保文件系统镜像被启用。在Application options菜单下找到*** Filesystem related ***部分确保[*] Using File System Image 0被选中按空格键出现[*]表示选中。进入--- Using File System Image 0子菜单。Select File System Type保持默认的(FATFS)即可。Data Directory这个路径非常关键它告诉系统去哪里找Demo所需的图片、字体等资源文件。路径必须和你选择的Demo匹配否则程序找不到资源屏幕就是一片白。Image Name可以保持默认的app.fatfs。建议勾选[*] auto calcuate image size让系统自动计算文件系统镜像的大小。第二步选择并配置LVGL Demo还是在Application options菜单下找到*** lvgl demo select related ***部分确保[*] ArtInChip lvgl demo被选中。这个是衡山派ArtInChip提供的LVGL演示程序集。进入--- ArtInChip lvgl demo子菜单。重点来了select lvgl demo这个选项让你选择具体运行哪个Demo。用左右键切换(X) lvgl demo with basic function: 基础功能演示包含按钮、滑块、图表等基础控件。( ) lvgl demo of meter: 仪表盘演示一个很炫酷的汽车仪表盘界面。下面的LVGL color depth和LVGL image cached number通常用默认值16位色深8张图片缓存就行初次使用不建议修改。LVGL Resource Directory是LVGL库内部寻找资源的路径一般保持默认的/rodata/lvgl_data。注意路径匹配的坑这是我第一次配置时栽跟头的地方。Using File System Image 0里的Data Directory路径必须和上面select lvgl demo选择的Demo对应上。如果你选了lvgl demo with basic function那么Data Directory应该填(packages/artinchip/lvgl-ui/aic_demo/base_demo/lvgl_src/)如果你选了lvgl demo of meter那么Data Directory应该填(packages/artinchip/lvgl-ui/aic_demo/meter_demo/lvgl_src/)填错了路径编译出来的固件里就没有对应Demo的图片资源上电后LVGL线程跑起来但界面是白的调试起来很头疼。配置完成后按ESC键退出记得保存配置。然后编译、下载固件到开发板上电后就能看到对应的LVGL演示界面了。2. 创建你自己的LVGL应用test_demo官方Demo跑通了但咱们的项目肯定需要自己的界面。接下来我以添加一个名为test_demo的自定义应用为例把整个流程拆解清楚。2.1 第一步在配置菜单中添加选项首先得让系统知道有test_demo这个应用存在并且可以在me配置界面里选择它。这个配置信息写在application/Kconfig文件里。用文本编辑器打开这个文件找到类似下面这样定义其他Demo的地方比如AIC_LVGL_METER_DEMOconfig AIC_LVGL_METER_DEMO bool LVGL demo of meter咱们就在它附近仿照着添加我们自己的配置项config AIC_LVGL_TEST_DEMO # 这个宏名很重要后面代码里要用到 bool LVGL demo of testconfig AIC_LVGL_TEST_DEMO这定义了一个配置选项的标识符宏在C代码中可以通过#ifdef AIC_LVGL_TEST_DEMO来判断是否选中了我们的Demo。bool表示这是一个布尔类型的选项要么选中要么不选。LVGL demo of test这是在me配置界面里显示给用户看的描述文字。保存Kconfig文件后下次执行me命令就能在菜单里看到我们的新选项了。2.2 第二步在配置界面中选择你的APP现在再次运行me命令进入配置界面。导航到Application options --- [*] ArtInChip LVGL demo ---。你会看到select LVGL demo这个选项按回车进入。在出现的列表中用方向键移动按空格键选中我们刚刚添加的(X) LVGL demo of test。保存并退出配置。2.3 第三步配置自定义APP的资源路径和运行官方Demo一样我们的test_demo如果有图片、字体等资源也需要告诉文件系统去哪里找。假设我们的资源文件放在packages/artinchip/lvgl-ui/aic_demo/test_demo/lvgl_src/目录下。在me配置界面中进入Application options --- [*] Using File System Image 0 ---。将Data Directory的路径修改为(packages/artinchip/lvgl-ui/aic_demo/test_demo/lvgl_src/)提示这个路径是以你的SDK根目录为起点的请根据你实际存放资源的目录进行调整。即使资源目录里只有一个空的readme.txt文件也需要正确配置否则文件系统镜像可能不会包含该目录。2.4 第四步准备源码并编写构建脚本现在来准备我们test_demo的源代码。按照SDK的惯例我们在packages/artinchip/lvgl-ui/aic_demo/目录下创建一个名为test_demo的文件夹并组织好文件结构test_demo/ ├── lvgl_src/ # 存放图片、字体等资源文件 │ └── readme.txt # 用于验证资源打包可以是空文件 ├── SConscript # 构建脚本最重要 ├── thread/ # 应用线程相关代码 │ ├── test_thread.c │ └── test_thread.h └── ui/ # 界面绘制相关代码 ├── test_ui.c └── test_ui.h其中SConscript文件是告诉编译系统如何编译我们这个Demo的关键。内容如下我已经加了详细注释from building import * import os cwd GetCurrentDir() # 获取当前目录即test_demo目录 group [] # 1. 指定需要编译的源文件 src Glob(*.c) # 编译test_demo根目录下的.c文件 src Glob(./ui/*.c) # 编译ui子目录下的.c文件 src Glob(./thread/*.c) # 编译thread子目录下的.c文件 # 2. 指定头文件搜索路径 CPPPATH [cwd] # 当前目录 CPPPATH.append(cwd /ui) # ui子目录 CPPPATH.append(cwd /thread) # thread子目录 # 3. 检查并递归处理子目录如果你的demo还有更深层目录这部分会用到 list os.listdir(cwd) for d in list: path os.path.join(cwd, d) if os.path.isfile(os.path.join(path, SConscript)): group group SConscript(os.path.join(d, SConscript)) # 4. 定义编译组关键依赖项是 AIC_LVGL_TEST_DEMO # 只有当在me中选中了我们的demo这部分代码才会被编译进固件 group group DefineGroup(LVGL-port, src, depend [AIC_LVGL_TEST_DEMO], CPPPATH CPPPATH) Return(group)关键点depend [‘AIC_LVGL_TEST_DEMO’]这一行必须和我们在application/Kconfig里定义的config名字完全一致。这样编译系统就能根据me中的选择决定是否编译test_demo的代码。2.5 第五步将APP接入系统入口代码和资源都准备好了最后一步是告诉系统“当用户选择了我的test_demo时请调用我写的初始化函数。”我们需要修改系统LVGL的入口文件。找到packages/artinchip/lvgl-ui/aic_ui.c中的aic_ui_init()函数。这个函数就像是LVGL应用的总调度中心。在函数内部你会看到很多#ifdef ... #endif的代码块每个官方Demo都在这里有一个“挂号”的地方。咱们就在最后仿照着添加自己Demo的入口void aic_ui_init() { // ... 其他demo的初始化代码 ... #ifdef AIC_LVGL_TEST_DEMO // 如果配置中选中了我们的test_demo // 包含头文件如果函数声明在头文件里 #include test_ui.h // 或者使用 extern 声明如果头文件已在别处包含 extern void test_thread(); extern void test_ui_init(); // 调用我们应用的初始化函数 test_thread(); // 启动应用线程 test_ui_init(); // 初始化UI界面 #endif return; }这里调用的test_thread()和test_ui_init()就是你写在test_thread.c和test_ui.c里的函数。通过这样的方式你的自定义应用就被完美地集成到衡山派的LVGL框架里了。3. 实战心得与避坑指南走完上面这套流程你的test_demo应该就能成功编译并运行了。最后分享几个我实战中的心得Bringup阶段别折腾第一次拿到板子或者更换硬件平台后强烈建议先运行官方默认的Demo比如基础功能演示。这能最快验证硬件屏幕、触摸、内存和基础软件驱动是否工作正常。等默认Demo稳定了再动手改自己的应用。路径检查要仔细Data Directory配错是导致“白屏”的最常见原因。每次在me里切换Demo后都务必检查这个路径是否对应上了。宏定义要一致Kconfig里的config名、SConscript里的depend、C代码里的#ifdef这三个地方的宏名称必须一字不差大小写敏感。从模仿开始如果你不确定test_ui.c和test_thread.c该怎么写最好的方法是去参考base_demo或meter_demo里对应的源码。看看官方Demo是如何创建界面、处理事件的依葫芦画瓢能帮你快速上手。整个过程看似步骤不少但理顺了就是“配置菜单声明 - 选择启用 - 设置资源路径 - 组织源码 - 接入主框架”这条线。自己动手走一遍下次再给衡山派开发板添加任何新的LVGL应用你都能轻松搞定。

相关文章:

衡山派Luban-Lite系统LVGL示例程序配置与自定义APP开发实战

衡山派Luban-Lite系统LVGL示例程序配置与自定义APP开发实战 最近在用衡山派的开发板做项目,需要做一个带界面的产品。官方SDK里已经集成了LVGL这个强大的嵌入式图形库,还提供了几个现成的Demo。但很多朋友拿到手后,不知道该怎么配置这些Demo…...

Stable Yogi Leather-Dress-Collection部署教程:safetensors格式LoRA自动扫描与热加载实现原理

Stable Yogi Leather-Dress-Collection部署教程:safetensors格式LoRA自动扫描与热加载实现原理 1. 项目概述 Stable Yogi Leather-Dress-Collection是一款专为动漫风格皮衣穿搭生成设计的本地化工具,基于Stable Diffusion v1.5和Anything V5模型构建。…...

STM32F407最小可行硬件平台设计与实测验证

1. 项目概述本项目是一款基于STM32F407ZET6微控制器的高集成度核心板设计,面向嵌入式系统开发、教学实验及原型验证场景。与常规功能导向型核心板不同,该设计在保证完整硬件功能的前提下,融入了明确的工程美学表达——PCB正反面分别采用“纳西…...

Kimi和豆包提示词实战:5个让大模型秒变聪明的指令模板(附避坑指南)

Kimi和豆包提示词实战:5个让大模型秒变聪明的指令模板(附避坑指南) 当你对着AI助手输入问题,却得到一堆无关信息时,是否也想过"这AI怎么这么笨"?其实问题可能出在你的提问方式上。就像用老式收音…...

立创开源项目解析:基于ESP32-PICO-V3与PAJ7620U2的BlueGo隔空手势操控器设计与实现

手把手教你打造隔空手势操控器:基于ESP32与PAJ7620的BlueGo项目实战解析 最近在做一个智能家居的控制项目,想找一个能隔空操作、又足够便携的遥控设备,市面上成品要么功能单一,要么价格不菲。后来在立创开源平台发现了这个叫 Blue…...

从手动到自动:BetterNCM-Installer如何重塑网易云音乐插件部署体验

从手动到自动:BetterNCM-Installer如何重塑网易云音乐插件部署体验 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 当你尝试为网易云音乐安装插件时,是否曾遭遇…...

春联生成模型中文版在网络安全领域的创新应用

春联生成模型中文版在网络安全领域的创新应用 春节贴春联是我们的传统习俗,红纸黑字,寄托着对新年的美好祝愿。但你有没有想过,当传统的春联遇上现代的网络安全,会碰撞出什么样的火花?今天,我们就来聊聊一…...

30分钟掌握Python二叉树:从原理到实战(附源码)

30分钟掌握Python二叉树:从原理到实战(附源码) 【免费下载链接】Python All Algorithms implemented in Python 项目地址: https://gitcode.com/GitHub_Trending/pyt/Python 二叉树是Python数据结构中的核心概念,掌握它能帮…...

国产MCU USB功率计设计:从采样到显示的嵌入式测量实践

1. 项目概述 这是一款基于国产32位MCU的嵌入式USB功率计,面向便携式电源监测场景设计。系统以国民技术N32G430系列微控制器为核心,集成高精度电流采样、电压测量、实时功率计算与本地可视化显示功能,可稳定工作于标准USB 5V供电路径中&#x…...

Qwen3-0.6B-FP8构建智能运维(AIOps)原型:日志异常模式识别

Qwen3-0.6B-FP8构建智能运维(AIOps)原型:日志异常模式识别 半夜被报警电话吵醒,登录服务器一看,CPU已经飙到90%,数据库连接池爆满,整个应用响应慢得像蜗牛。翻看日志,几千行信息里&…...

时间序列预测模型评估指标:从理论到实战的全面解析

1. 为什么时间序列预测需要专门的评估指标? 时间序列预测和普通回归问题最大的区别在于数据的顺序性。想象一下你在预测明天的天气——今天的温度会影响明天,而昨天的数据又会影响今天。这种前后依赖关系让时间序列预测变得独特,也使得评估指…...

Qwen3智能字幕系统Typora文档生成功能

Qwen3智能字幕系统Typora文档生成功能 1. 引言 写技术文档是每个开发者和内容创作者的日常任务,但传统的文档编写方式往往效率低下。想象一下这样的场景:你刚看完一段重要的技术视频,需要把其中的关键内容整理成文档。通常的做法是一边暂停…...

RVC模型Web端直接推理探索:基于ONNX与WebAssembly

RVC模型Web端直接推理探索:基于ONNX与WebAssembly 最近在折腾一个挺有意思的项目,想把RVC这个效果不错的变声模型,直接搬到浏览器里跑起来。你可能会问,这玩意儿不都是放在服务器上,用户上传音频,服务器处…...

埃夫特机器人仿真软件ER_Factory_Trail:从零搭建工作站全流程解析

1. 初识埃夫特机器人仿真软件ER_Factory_Trail 第一次打开ER_Factory_Trail时,我被它简洁的界面设计惊艳到了。作为一款工业机器人仿真软件,它没有想象中那么复杂难懂。主界面分为四个核心区域:左上角的项目资源管理器用来管理所有模型和组件…...

TCL空调红外协议逆向与8051学习遥控器实现

1. 项目概述本项目实现一款基于8051内核单片机的通用型红外学习式空调遥控器模块,核心目标是完成对TCL品牌空调遥控协议的完整捕获、解析与复现。区别于市面常见的NEC协议学习遥控器,该设计针对TCL空调特有的14位PPM(脉冲位置调制&#xff09…...

打造个人AI写作助手:ERNIE-4.5-0.3B-PT的vLLM部署与Chainlit应用

打造个人AI写作助手:ERNIE-4.5-0.3B-PT的vLLM部署与Chainlit应用 想不想拥有一个随时待命的AI写作助手?不用联网,不用付费,就在你自己的电脑上运行。今天我就带你一步步实现这个想法——用vLLM部署ERNIE-4.5-0.3B-PT模型&#xf…...

Qwen2.5-72B-GPTQ-Int4详细步骤:GPTQ-Int4量化+长文本生成能力验证

Qwen2.5-72B-GPTQ-Int4详细步骤:GPTQ-Int4量化长文本生成能力验证 1. 模型简介 Qwen2.5-72B-Instruct-GPTQ-Int4是Qwen大型语言模型系列的最新版本,提供了从0.5B到72B参数的基础语言模型和指令调优版本。这个72B参数的模型经过GPTQ 4-bit量化处理&…...

Alpamayo-R1-10B镜像免配置:预装AlpaSim+Physical AI数据集开箱即用

Alpamayo-R1-10B镜像免配置:预装AlpaSimPhysical AI数据集开箱即用 1. 项目简介 1.1 什么是Alpamayo-R1-10B? Alpamayo-R1-10B是一款专为自动驾驶研发设计的开源视觉-语言-动作(VLA)模型,由100亿参数构成。这个镜像预装了完整的开发环境&a…...

3大核心功能打造PS手柄PC终极解决方案:从兼容性到自定义的全面突破

3大核心功能打造PS手柄PC终极解决方案:从兼容性到自定义的全面突破 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows DS4Windows作为一款免费开源的手柄模拟工具,能够…...

PY32F030K28U6TR最小系统板设计详解:国产Cortex-M0+嵌入式开发实战平台

1. 项目概述PY32F030K28U6TR最小系统板是一款面向嵌入式开发与教学实践的高集成度硬件平台。该设计以聚辰半导体(GigaDevice)推出的PY32F030系列超低功耗32位ARM Cortex-M0微控制器为核心,完整实现最小启动系统所需全部外围电路,并…...

Phi-4-reasoning-vision-15B在中小企业数字化中的应用:低成本文档智能处理

Phi-4-reasoning-vision-15B在中小企业数字化中的应用:低成本文档智能处理 1. 中小企业文档处理的痛点与机遇 对于中小企业而言,文档处理一直是数字化转型过程中的关键挑战。传统文档管理方式面临三大核心问题: 人力成本高:需要…...

ICBatlas数据库实战指南:如何用转录组数据优化免疫检查点阻断疗法(附Python代码)

ICBatlas数据库实战指南:如何用转录组数据优化免疫检查点阻断疗法(附Python代码) 免疫检查点阻断疗法(ICB)正在彻底改变癌症治疗的格局,但患者反应的巨大差异仍然是临床实践中的主要挑战。ICBatlas作为首个…...

Qwen1.5-1.8B GPTQ Java开发实战:集成SpringBoot构建智能问答服务

Qwen1.5-1.8B GPTQ Java开发实战:集成SpringBoot构建智能问答服务 最近在做一个内部知识库问答系统,需要接入一个轻量又聪明的AI模型。大模型虽好,但动辄几十上百亿的参数,对服务器成本和响应速度都是挑战。经过一番对比&#xf…...

AIGlasses_for_navigation生产环境部署:supervisor服务稳定性调优指南

AIGlasses_for_navigation生产环境部署:supervisor服务稳定性调优指南 1. 项目背景与重要性 AIGlasses_for_navigation是一个基于YOLO分割模型的视频目标分割系统,专门为AI智能盲人眼镜导航系统设计。这个系统能够实时检测和分割图片、视频中的盲道和人…...

GD32F303智能电子狗:嵌入式教学小车全栈实践

1. 项目概述“智能电子狗”是一款基于GD32系列微控制器的多功能嵌入式移动平台,定位为教学实践与功能验证型小车系统。其设计目标并非追求极致性能或工业级鲁棒性,而是以紧凑结构、多模态感知与基础人机交互能力为核心,构建一个可扩展、易调试…...

DeOldify图像上色服务全流程体验:开箱即用,效果超预期

DeOldify图像上色服务全流程体验:开箱即用,效果超预期 1. 引言:让黑白记忆瞬间焕彩 翻看家里的老相册,那些泛黄的黑白照片总能勾起无限回忆,但总觉得少了些什么——是色彩。色彩能让记忆变得鲜活,让故事更…...

春联生成模型-中文-base详细使用指南:从部署到生成全流程

春联生成模型-中文-base详细使用指南:从部署到生成全流程 春节贴春联是中国人传承千年的习俗,一副好春联不仅寓意吉祥,更能为节日增添浓厚的文化氛围。但对于很多人来说,创作一副对仗工整、寓意美好的春联并非易事——需要懂平仄…...

高效XML解析:如何用3步解决90%的文档处理难题

高效XML解析:如何用3步解决90%的文档处理难题 【免费下载链接】xmlview Powerful XML viewer for Google Chrome and Safari 项目地址: https://gitcode.com/gh_mirrors/xm/xmlview 副标题:让开发者、分析师和运维人员告别标签迷宫的开源工具 面…...

Flux.1-Dev深海幻境时序预测联想:从LSTM到生成模型的思维发散

Flux.1-Dev深海幻境时序预测联想:从LSTM到生成模型的思维发散 最近在折腾Flux.1-Dev这个图像生成模型时,看着它从一段文字描述里“无中生有”地构建出复杂画面,脑子里突然蹦出一个有点跳跃的想法。我本职工作中接触过不少时序预测的活儿&…...

基于TL431与MOSFET的高效过压保护电路设计详解

1. 为什么你需要一个高效的过压保护电路? 想象一下,你花了好几个月心血设计的电路板,终于要上电测试了。你小心翼翼地接上电源,就在按下开关的瞬间,只听“啪”的一声轻响,紧接着一股焦糊味传来——完了&…...