ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)

  LVGL是一个C语言编写的免费的开源图形库,其提供了用于嵌入式GUI的各种元素。用户可以利用丰富的图形库资源,在消耗极低内存的情况下构建视觉效果丰富多彩的GUI 。只需 64kB 闪存和 8kB RAM 就足以满足简单的用户界面。LVGL 可以驱动单色OLED、TFT 显示器、监视器或任何其他显示器。c 代码使其可在任何平台上使用,例如 NXP LPCiMXSTM32PICArduinoESP32Raspberry 等。LVGL 的源码托管在 GitHub 上,拥有 MIT许可。 真正的完全免费。

在这里插入图片描述

  作为ESP32学习的后续,ESP32有充足的内存和计算资源去运行GUI。LVGL这两年发展态势迅猛,Githubstar和统计的使用者数量蹭蹭的往上长,直逼MCU领域的TOP1。加上MIT许可、充足的设计资源、低内存占用、简易的上手程度 等特点,自然想在ESP32上运行LVGL看看。刚开始还以为需要自己手动去移植LVGL内核、屏幕驱动、触摸驱动,直到翻了翻了Github发现竟然有配套ESP-IDFSDK的Demo,并且已经包含了众多液晶和触摸IC驱。动。。。。。。淦!那我之前还费那老劲偏要搞自己的easyio库干毛,不禁思考人生。


1、LVGL支持的LCD驱动IC和触摸IC型号


  • LCD驱动IC支持:ILI9341、ILI9481、ILI9486、ILI9488、ST7735S、ST7789、ST7796S、HX8357、GC9A01、SH1107、SSD1306、SH1107、FT81X、IL3820、JD79653、UC8151D、RA8875 等数十种LCD驱动IC。
  • 触摸驱动IC支持:XPT2046、FT6x06、STMPE610、ADCRAW、FT81x、RA8875。

  个人仅测试过 ILI9341ST7789V,可以完美驱动并运行显示,下面以这两种LCD驱动IC为代表,介绍下编译ESP32运行LVGL例程的过程。


2、获取LVGL的ESP32例程


Github源码地址:lv_port_esp32

首先阅读README,依赖的SDK版本为 ESP-IDF-V4.2,使用的LVGL版本为 V7.9
ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第1张图片

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
ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第2张图片

注意:上面的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
ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第3张图片


3、图形化工具配置工程,设置LCD驱动IC参数


很快啊,clone就做好了,有了原材料,下面开始配置工程。

  • 打开快捷方式 ESP-IDF 4.2 CMD
    ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第4张图片
  • 移动到刚才的工程目录。cd ..\lv_port_esp32
  • 打开图形化工具,配置工程。idf.py menuconfig
    ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第5张图片
  • 移动光标:Componment config >>> LVGL TFT Display controller
    ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第6张图片
    ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第7张图片
  • 1、更改屏幕驱动IC信息
  • 如下图配置:据测试,ili9341 和 st7789V 实际的配置方式略有不同,屏幕显示方向显示反转 这两个他俩是反的。还请留意,如屏幕显示方向设置错误会造成显示花屏。
    ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第8张图片
    ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第9张图片
  • 2、配置LCD与ESP32连接的GPIO引脚序号
  • 将光标移动到最后一行,Display Pin Assignments
  • 为了能然让ESP32SPI能以80MHz通信。需要使用SPI的IO_MUX默认输出引脚。RST、D/C、BLK可以任意IO映射。我的硬件配置如下。
    ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第10张图片
    ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第11张图片
  • 3、LVGL配置项
  • 返回前两级目录,找到 Componment config >>> LVGL configuration
    ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第12张图片
  • 设置LCD的像素分辨率。我用的屏幕是320x240的,其他参数请按照下图。
    ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第13张图片
  • 4、LVGL配置项
  • 返回前两级目录,找到 Componment config >>> lv_examples_configuration
    ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第14张图片
  • 默认运行的Demo是 Show demo widgets,当然也可进入后选择其他Demo来运行。
  • 这里就按 Show demo widgets 来,不做修改。
    ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第15张图片
  • 5、保存,退出
  • s 保存,回车确认保存。之后按几次 Esc,退出配置工具。
    ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第16张图片


4、编译、下载、运行显示


  • 退出图形化配置工具,回到了命令行窗口。
  • 编译工程:idf.py build
    ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第17张图片
  • 编译成功后,根据自己ESP32板子的端口,下载:idf.py -p COM26 flash
    ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第18张图片
  • 最后的运行显示效果。
  • ST7789,运行 Show demo widgets
  • ili9431,运行 Benchmark your system



更多资源


LVGL官方在线文档 - PC模拟器:PC模拟器

乐鑫 - LVGL图形库文档:LVGL图形库

NXP GUI Guider 开发工具:GUI Guider


注意事项


  • DemoST7789的适配可能部分有误,明明landscape应该是横屏,而portiait应该是竖屏,到了ST7789却全都反过来了。
  • 如果出现花屏。建议先尝试降低SPI时钟速率,再尝试更改显示方向。
  • 该Demo的LCD驱动框架,沿用IDF的lcd例程,可尝试自行添加驱动。在最初点ST7789时遇到花屏问题迟迟不能解决,改动了驱动的配置源码后可正常显示。不过后来发现之前导致花屏的原因,是Demo中把ST7789的横竖屏方向搞反了而造成的。
  • 关于帧率,以下是在40MHz-SPI下,运行 Benchmark your system 的测试成绩。不明意思,36FPS可能因为用了局部刷新吧。
  • 在我的easyio驱动库中,有对ESP32的SPI-双缓冲环形DMA进行过整合。刷整屏的测试成绩为:
    (刷提前解码好的图片,等待上一帧DMA发送完成前只有数据的转移而无计算,单纯的为了测试 SPI-环形DMA 的效率)
    80MHz 刷屏可达 53.5FPS。(理论最大值:80x1000x1000 / 320 /240 /2/8 = 65.1)
    40MHz 刷屏可达 30.2FPS。(理论最大值:40x1000x1000 / 320 /240 /2/8 = 32.5)
  • 友情推荐一波自己为ESP-IDF适配的开源驱动库:ESP32驱动库 - Easyio
    ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第19张图片


Fork工程


  鉴于大家说上面的过程略有繁琐,求博主源码。现已fork了原工程,并修改了 sdkconfig,以完美适配 ST7789V + FT6236U 单点电容触摸屏。

  递归clone后,直接编译、下载、运行即可,省掉了上面的配置步骤。

  仓库地址:ESP32 - LVGL - ST7789V+FT6236U

在这里插入图片描述

ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第20张图片


LVGL_V8可用


  csdn转存失败,预览链接:http://zhiliangma.gitee.io/imgs/202111/lvgl_v8_test4.gif

  lvgl_v8_esp32 源码


Visual Studio模拟器使用


  为方便LVGL的学习,一般会将代码运行于电脑的模拟器上:LVGL VS模拟器使用


开源硬件 - 立创EDA


  看了上面图片,有没有想要个同款开发板的想法。

在这里插入图片描述
ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)_第21张图片


  不辜负粉丝期待,硬件现已开源,立创EDA工程,一起去打样白嫖吧。

ESP32开发板开源啦 ESP32-IOT-KIT全开源物联网开发板

立创开源社区:ESP32开发板 IOT-KIT原理图、PCB、BOM

ESP32开源驱动库Easyio的使用,基于ESP-IDF开发框架

  • 开源学习交流Q群:827686418

更多ESP32 IDF教程,详见我的专栏。

这么贴心方便的教程,别忘收藏点赞+star。

你可能感兴趣的:(ESP32,LVGL,&,ESP32,嵌入式,物联网,GUI,ESP32,LVGL)