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

2023-11-02

  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
在这里插入图片描述

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
在这里插入图片描述


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


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

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


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


  • 退出图形化配置工具,回到了命令行窗口。
  • 编译工程:idf.py build
    在这里插入图片描述
  • 编译成功后,根据自己ESP32板子的端口,下载:idf.py -p COM26 flash
    在这里插入图片描述
  • 最后的运行显示效果。
  • 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
    在这里插入图片描述


Fork工程


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

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

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

在这里插入图片描述

请添加图片描述


LVGL_V8可用


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

  lvgl_v8_esp32 源码


Visual Studio模拟器使用


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


开源硬件 - 立创EDA


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

在这里插入图片描述
在这里插入图片描述


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

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

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

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

  • 开源学习交流Q群:827686418

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 计算机磁盘管理进行磁盘转移,将磁盘移到另一台计算机

    将磁盘移到另一台计算机 10 12 2017 本文内容 适用于 Windows 10 Windows 8 1 Windows Server 半年频道 Windows Server 2016 Windows Server 2012 R2 Wi
  • Hive 分组

    2 1 Group By 语句 GROUP BY 语句通常会和聚合函数一起使用 按照一个或者多个列队结果进行分组 然 后对每个组执行聚合操作 1 案例实操 1 计算 emp 表每个部门的平均工资 hive default gt select
  • 雪花算法(SnowFlake)

    简介 现在的服务基本是分布式 微服务形式的 而且大数据量也导致分库分表的产生 对于水平分表就需要保证表中 id 的全局唯一性 对于 MySQL 而言 一个表中的主键 id 一般使用自增的方式 但是如果进行水平分表之后 多个表中会生成重复的
  • Java线程的同步机制(synchronized关键字)

    线程的同步机制 synchronized 1 背景 例子 创建个窗口卖票 总票数为100张 使用实现Runnable接口的方式 1 问题 卖票过程中 出现了重票 错票 gt 出现了线程的安全问题 2 问题出现的原因 当某个线程操作车票的过程

随机推荐

  • spring中的扩展点解析以及实践使用

    文章目录 1 ApplicationContextInitializer 2 BeanDefinitionRegistryPostProcessor 3 BeanFactoryPostProcessor 4 InstantiationAwa
  • 西门子S7-200 PLC接地和接线

    对于所有的电器设备 接地和接线是非常重要的 它能够确保系统具备最优的操作特性 同时能够为系统提供更好的电子噪声保护 在接地和接线之前 必须先确保设备的电源已被切断 也要保证与该设备相关的设备电源已被切断 在对S7 200及其相关设备接线时
  • 从零推导一个多层感知机神经网络(附matlab源码,可直接运行)

    可以先跳到代码示例部分看看效果 算法基础 激活函数 损失函数 链式法则 向量求导 代码示例 代码文件结构说明 函数脚本 可运行脚本 效果演示 代码下载链接 算法基础 激活函数 激活函数的作用 激活函数把非线性引入了神经网络 后面的代码用到的
  • pnpm替换lerna+yarn的踩坑记录

    如果有使用monorepo的需求 lerna yarn会是很多开发者的选择 然而在实际开发中 lerna的很多功能我们并不需要 同时它也存在着一定的上手学习成本 而且 yarn也会存在一些问题比如多个项目会重复安装依赖 幽灵依赖等 这时候不
  • redis命令行基本操作

    文章目录 基本概念 对数据库的操作 对数据的操作 增删改查 数值操作 整数数据 浮点数据 其他 基本概念 redis的键是区分大小写的 user 与 USER 是两个键 配置文件 redis conf 对数据库的操作 SELECT
  • mpeg4视频中,I帧、p帧、B帧的判定

    mpeg4的每一帧开头是固定的 00 00 01 b6 那么我们如何判断当前帧属于什么帧呢 在接下来的2bit 将会告诉我们答案 注意 是2bit 不是byte 下面是各类型帧与2bit的对应关系 00 I Frame 01 P Frame
  • PBFT简单介绍

    PBFT是一种常用于联盟链的共识算法 中文名是实用拜占庭容错算法 首先用户发送交易到区块链网络中 主节点接收到交易并向其他节点进行广播 其他节点收到广播后记录下交易并广播给其他节点 当各节点收到相同交易的广播次数 包括节点自己本身一次 达到
  • windows10+python3.6+anaconda+pytorch-cpu的初步环境搭建

    windows10 python3 6 anaconda pytorch cpu的初步环境搭建 安装pytorch cpu 新建环境 1 利用anaconda进行创建新的环境 cmd conda create n pytorch pytho
  • 2018年LeetCode高频算法面试题刷题笔记——分割回文串(字符串)

    1 解答之前的碎碎念 这个题我的想法是 第一刀依次切在第1 s length 2个元素后面 得到两个字符串s0和s1 首先判断s0整体是否为回文 不是则第一刀的位置 1 然后再检测s1整体是否为回文 并在s1的第1 s1 length 2个
  • C++关于(*i)->n为何要加括号

    include
  • Linux基础命令--文件和目录管理命令

    目录 常用文件和目录管理命令 1 ls命令 ls命令还支持一些选项和参数 例如 2 ll命令 基本用法如下 3 cd命令 除了基础用法外 cd命令还有一些常用的选项 如 4 pwd命令 基础用法如下 5 mkdir命令 基础用法如下 6 r
  • Dilated Convolution介绍

    Dilated Convolution介绍 相关的两篇论文分别是 ICLR2016 MULTI SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS 和 CVPR2017 Dilated Res
  • vcruntime140.dll重新安装方法,vcruntime140.dll修复教程

    vcruntime140 dll是Microsoft Visual C Redistributable的一部分 它是Windows操作系统上非常重要的一个动态链接库文件 这个文件包含了一些运行时库函数 用于支持运行在Windows上使用了M
  • C# RestSharp,Body提交

    关于RestSharp Body提交 需要引用RestSharp 遇到一个问题 使用Httprequest提交Post请求时 各种值传不过去 使用Postman用同样的 添加请求头 传输json格式亦然 经过大佬指点 用Postman里面的
  • MATLAB删除任意字符

    删除空格 s isspace s 去除空格 删除字符串中所有的16进制的0 char2asc2 abs s 转asc2 char2asc2 char2asc2 0 删除NULL 0 s char char2asc2 删除字符串中所有的16进
  • 在Windows下使用Curl工具完美操作ElasticSearch

    首先可以从 http curl haxx se download html上下载并安装Windows环境下的Curl 安装完成后 将Curl的I386目录的完整路径添加到Windows的Path环境变量中 C Users Carl gt c
  • 专利与论文-1:为什么要写专利?专利有什么好处?

    前言 很多人 都认为写专利没什么多大的用处 不过是个人赚一点公司申请专利的奖励而已 对个人和公司 用处都不是大 还不如做学习一些专业技能或做一些实际项目 花在专利上的实际不太值得 随着时间和知识双重积累 越来越会发现专利 无论对于个人还公司
  • 强化学习代码实战入门

    这是一个易理解的 demo 300行左右 可以作为RL的入门代码 辅助基础公式的理解 这个是我自己的学习笔记 三连留下邮箱 可以直接发送完整的代码标注文件 如有错误 麻烦指出 我已经蛮久没写博了 上一篇RL博客也快一年半了 很久没做这一块了
  • Java生成二维码并解决中文乱码问题

    Java生成二维码并解决中文乱码问题 引入依赖 JAVA代码 引入依赖 maven工程
  • ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)

    LVGL是一个C语言编写的免费的开源图形库 其提供了用于嵌入式GUI的各种元素 用户可以利用丰富的图形库资源 在消耗极低内存的情况下构建视觉效果丰富多彩的GUI 只需 64kB 闪存和 8kB RAM 就足以满足简单的用户界面 LVGL 可