Zephyr RTOS 原生支持了丰富的第三方库,这也是很多人和厂商选择Zephyr的原因。开源轻量级框架LVGL就是其中一个较为人熟知的第三方库,它可以让嵌入式设备也拥有可以媲美手机的UI界面。
什么是LVGL?
LVGL全称Light and Versatile Graphics Library,是一个开源的GUI库,具备资源消耗小、可移植度高的特点,因此很适合在嵌入式设备上使用。
作为一个图形库,LVGL也自带了丰富的GUI控件可以供开发者直接使用,如常用的按钮,图表,列表,滑块等,此外还支持多种图形动画的调用,相比传统驱屏绘制GUI,开发者不需要大量的代码编写量和反复的效果验证,就可以搭建出一个比较满意的GUI应用。
LVGL的一些关键概念
在开始使用LVGL前,我们需要简单了解以下LVGL一些比较重要的概念,方便对后续学习过程中的理解。
Display:在LVGL中一个物理显示器对应一个显示器驱动,LVGL支持多个物理显示器。
Screen:一个Display创建多个Screen,可以理解为页面,Screen上可以添加各种LVGL支持的组件。
Object:object是LVGL构建GUI的基本单位,每个控件都属于Object,上面的Screen(页面)也是一个Object。
快速上手与讲解
手头的实验平台是 CSK6开发套件,目前CSK6芯片的SDK已经支持LVGL的使用,版本为LVGL8。
简单按钮例程的运行
在完成CSK6芯片的开发环境安装后
在终端执行以下指令获取sample:
lisa zep create
Sample所在路径:
boards → csk6 → subsys → display → lvgl → SimpleShow
编译:
lisa zep build –b csk6011a_nano
烧录:
lisa zep flash
运行效果:
Simple Show 工程解析
工程目录下的 prj.conf 文件保存着这个项目相关的配置:
overlay 文件则是设备树文件,定义了硬件相关的信息,包括对屏幕驱动ST7789V、触摸驱动FT5336,以及使用到的I2C接口、SPI接口的定义:
然后我们来看main.c文件
在main.c文件中,依次进行了以下的操作:
1.获取设备树的实例,也就是我们显示屏的实例
2.创建一个hello world的button的一个对象
3.然后去给button设置一个文字“hello world”,对齐方式为align center
4.创建一个count label,用来显示我们的计数器
5.在计数器的循环里面不断的去计数
6.更新显示
更详细的代码说明可见 LVGL例程与API讲解
LVGL官方提供的其他例程
LVGL也提供了其他丰富的例程,可以通过跑这些例程,查看工程源码,了解更多的LVGL用法。
这些例程也已经上传到LSCloud中,感兴趣的伙伴可以拉取代码:
git clone git@cloud.listenai.com:listenai_xqqin/lvgl_demo.git
LVGL基础开发
功能1:LVGL显示文字
功能2:LVGL显示图片
功能3:LVGL显示动图
获取更高阶的示例项目:
使用LVGL在屏幕上显示头肩检测&手势识别结果的项目源码已上传,可点击查看,使用的仓库分支为 feature/lvgl。
在安装lisa开发工具后可通过在命令行执行以下命令拉取代码:
lisa zep create --from-git https://cloud.listenai.com/zephyr/applications/app_algo_hsd_sample_for_csk6.git
更多进阶用法
除了以上基础用法,我们还可以使用LVGL开发一些大动图、页面切换等完整度更高的UI界面,感兴趣的同学可以评论区回复索取教程视频。
本课程由聆思科技资深解决方案专家覃晓庆讲解,涉及内容有
- 如何在 Zephyr 上进行高效开发高品质UI
- LVGL 是什么,有什么先进特性
- LVGL 的基础概念
- 如何基于 CSK6 AI 芯片,通过 LVGL 开发有趣实用的应用。
更多学习资源
如果需要获取更多与本教程相关的学习资源(如LVGL性能优化、刷新帧率提升教程、使用所用硬件平台等), 或者了解更多与嵌入式开发、AI芯片相关的其他课程,可以点击查看目录导航。