LVGL
是一个C语言编写的免费的开源图形库,其提供了用于嵌入式GUI
的各种元素。用户可以利用丰富的图形库资源,在消耗极低内存的情况下构建视觉效果丰富多彩的GUI
。只需 64kB
闪存和 8kB
RAM 就足以满足简单的用户界面。LVGL
可以驱动单色OLED、TFT 显示器、监视器或任何其他显示器。c 代码使其可在任何平台上使用,例如 NXP LPC
或 iMX
、STM32
、PIC
、Arduino
、ESP32
、Raspberry
等。LVGL 的源码托管在 GitHub
上,拥有 MIT许可
。 真正的完全免费。
作为ESP32
学习的后续,ESP32
有充足的内存和计算资源去运行GUI
。LVGL这两年发展态势迅猛,Github
的star
和统计的使用者数量蹭蹭的往上长,直逼MCU
领域的TOP1。加上MIT许可
、充足的设计资源、低内存占用、简易的上手程度 等特点,自然想在ESP32
上运行LVGL
看看。刚开始还以为需要自己手动去移植LVGL
内核、屏幕驱动、触摸驱动,直到翻了翻了Github
发现竟然有配套ESP-IDF
SDK的Demo
,并且已经包含了众多液晶和触摸IC驱。动。。。。。。淦!那我之前还费那老劲偏要搞自己的easyio
库干毛,不禁思考人生。
个人仅测试过 ILI9341
和 ST7789V
,可以完美驱动并运行显示,下面以这两种LCD驱动IC为代表,介绍下编译ESP32
运行LVGL
例程的过程。
Github源码地址:lv_port_esp32
首先阅读README
,依赖的SDK版本为 ESP-IDF-V4.2
,使用的LVGL版本为 V7.9
。
ESP-IDF-V4.2
环境搭建可以看我这篇博客:Windows下基于ESP-IDF | Cmake | VScode插件的 ESP32 开发环境搭建
我的IDF
环境早已搭建完毕,详细过程可见上面链接,这里直接来获取LVGL的ESP32例程
。
clone
源码,为方便寻路径就直接放到IDF
同级目录下。递归clone:git clone --recurse-submodules https://github.com/lvgl/lv_port_esp32.git
注意:上面的clone
要用递归,直接git clone https://github.com/lvgl/lv_port_esp32.git
会导致components
文件夹下缺失子模块,看到的文件夹内容是空的,从而编译失败。而完整的lv_port_esp32
占200多MB,缺失了子模块的可没那么多。
用的时候先看一眼README
文档,正确的操作是:git clone --recurse-submodules https://github.com/lvgl/lv_port_esp32.git
很快啊,clone就做好了,有了原材料,下面开始配置工程。
ESP-IDF 4.2 CMD
。cd ..\lv_port_esp32
idf.py menuconfig
Componment config
>>> LVGL TFT Display controller
更改屏幕驱动IC信息
。屏幕显示方向
和 显示反转
这两个他俩是反的。还请留意,如屏幕显示方向
设置错误会造成显示花屏。配置LCD与ESP32连接的GPIO引脚序号
。Display Pin Assignments
。ESP32
的SPI
能以80MHz
通信。需要使用SPI的IO_MUX
默认输出引脚。RST、D/C、BLK可以任意IO映射。我的硬件配置如下。LVGL配置项
。Componment config
>>> LVGL configuration
。320x240
的,其他参数请按照下图。LVGL配置项
。Componment config
>>> lv_examples_configuration
。Show demo widgets
,当然也可进入后选择其他Demo来运行。Show demo widgets
来,不做修改。保存,退出
。s
保存,回车确认保存。之后按几次 Esc
,退出配置工具。idf.py build
。ESP32
板子的端口,下载:idf.py -p COM26 flash
。Show demo widgets
。Benchmark your system
。LVGL官方在线文档 - PC模拟器:PC模拟器
乐鑫 - LVGL图形库文档:LVGL图形库
NXP GUI Guider
开发工具:GUI Guider
Demo
对ST7789
的适配可能部分有误,明明landscape
应该是横屏,而portiait
应该是竖屏,到了ST7789
却全都反过来了。lcd
例程,可尝试自行添加驱动。在最初点ST7789
时遇到花屏问题迟迟不能解决,改动了驱动的配置源码后可正常显示。不过后来发现之前导致花屏的原因,是Demo中把ST7789
的横竖屏方向搞反了而造成的。40MHz-SPI
下,运行 Benchmark your system
的测试成绩。不明意思,36FPS可能因为用了局部刷新吧。easyio
驱动库中,有对ESP32的SPI-双缓冲环形DMA
进行过整合。刷整屏
的测试成绩为:SPI-环形DMA
的效率)ESP-IDF
适配的开源驱动库:ESP32驱动库 - Easyio 鉴于大家说上面的过程略有繁琐,求博主源码。现已fork了原工程,并修改了 sdkconfig
,以完美适配 ST7789V + FT6236U
单点电容触摸屏。
递归clone后,直接编译、下载、运行即可,省掉了上面的配置步骤。
仓库地址:ESP32 - LVGL - ST7789V+FT6236U
csdn转存失败,预览链接:http://zhiliangma.gitee.io/imgs/202111/lvgl_v8_test4.gif
lvgl_v8_esp32 源码
为方便LVGL的学习,一般会将代码运行于电脑的模拟器上:LVGL VS模拟器使用
看了上面图片,有没有想要个同款开发板的想法。
不辜负粉丝期待,硬件现已开源,立创EDA工程,一起去打样白嫖吧。
ESP32开发板开源啦 ESP32-IOT-KIT全开源物联网开发板
立创开源社区:ESP32开发板 IOT-KIT原理图、PCB、BOM
ESP32开源驱动库Easyio的使用,基于ESP-IDF开发框架
更多ESP32 IDF教程,详见我的专栏。
这么贴心方便的教程,别忘收藏点赞+star。