ESP32 + LVGL 开发笔记(一):点亮屏幕

news/2025/11/18 20:19:31/文章来源:https://www.cnblogs.com/sleepypuffer/p/19239197

折腾了几天 lvgl,打算写一个简单的教程来记录一下。教程的最后会实现一下使用 lvgl 显示 lottie 动画的效果,见下图:

ESP32 + LVGL 教程(一):点亮屏幕-1761203963450

环境介绍

硬件:

  • esp32s3 n16r8核心板
  • 1.47寸 ips lcd彩色屏幕(st7789)
    • 分辨率320 x 172,没有触屏功能,色彩位深16
  • EC11编码器
    • 一圈是20刻度
  • 按键、跳线若干
  • 面包板

开发环境:
使用 esp-idf 开发,采用官方移植的 lvgl 库 esp_lvgl_port,esp_lvgl_port 会自动依赖 lvgl,版本分别是:

  • esp-idf v5.4.0
  • esp_lvgl_port 2.6.2
  • lvgl 9.3.0
    因为 lottie 组件是从 lvgl9 才引入的,所以如果要实现后续的 lottie 案例,lvgl 版本必须要必须大于 9

面包板接线

这一步,看着接吧🙄

点亮屏幕

不同屏幕或者不同分辨率,驱动方式可能会有所不同。但是市面上常见 屏幕驱动芯片 都会有 esp 官方驱动,没有官方驱动也可以去 ESP Component Registry 看看有没有相关驱动。
教程第一篇就先使用官方示例来点亮一下 st7789 驱动的屏幕:

1. 创建项目

  1. 点击 ESP-IDF 插件,点击 Advanced --> New Project Wizard 创建新项目
    image
  2. 选择模板
    image
    记得确认 芯片选型 和 串口选择(根据自己的串口选择)
    ![[ESP32 + LVGL 教程(一):点亮屏幕-1761201459700.png|568x15]]
    image

2. 引入 lvgl 官方移植

  • espressif/esp_lvgl_port • v2.6.2 • ESP Component Registry
    截止到这篇笔记,esp_lvgl_port 版本为 2.6.2,可以根据需求选择不同版本
  1. 引入 lvgl 官方依赖
    ![[ESP32 + LVGL 开发笔记(一):点亮屏幕-1761303042800.png|700x170]]
    相关依赖信息都在 idf_component.yml 中,点击 🔧 构建项目。点击构建会拉取idf_component 中引用的依赖
  2. 移植示例代码
    删除 /mainhello_world_main.cCMakeLists.txt。找到 esp_lvgl_port 2.6.2st7789 的驱动示例,复制 main.cCMakeLists.txt/image/main 中。
    示例路径为:

managed_components\espressif__esp_lvgl_port\examples\touchscreen\main

image

3. 修改项目配置

我这个屏幕是没有触屏功能的,所以说触屏相关代码我就暂时都删了,有需要的也可以配置一下(应该配置几个引脚就行了吧,后续会采用 编码器按键 来控制
注释/删除触屏相关代码后,我列举一下需要修改的配置

  • 分辨率
    调整为自己屏幕的大小,我的屏幕是 320 * 172的。
    这里还有一点很重要在这里说明一下,这个示例的 "显示高度" 比较长,所以需要 320 来作为高,172 作为宽。
    image
  • 引脚配置
    这个根据自己的情况设置,这里简单说明一下相关引脚
    • SCLK,时钟引脚
    • MOSI / SDA,主输出从输入线
    • RST,复位引脚
    • DC,数据/命令选择引脚
    • CS,SPI 片选引脚
    • BL,LCD屏幕 背光引脚
      调整完就先进行一下 clean 操作,之后点击 🔥 一键三联看看效果喽🤗🤗🤗
      之所以先 clean 是因为之前 build 并没有生成 logo 的数组文件,需要清除重新构建一下。
      显示效果见👇👇
      image

惊了😲😲,问题大致概述一下的话,都有:

  • 颜色显示不对,logo 是红色才对
  • 显示错位,x 轴错位了一部分
  • y轴方向错误(板子在我左边放着),x轴暂时看不出来

接下来的修改会因为屏幕不同,修改参数也不同。这里我给出有哪些值得注意要改的,以及我自己的配置:

  1. 分辨率
    这部分还是很重要,请确认好屏幕参数
// 横屏显示
// #define EXAMPLE_LCD_H_RES   (320)
// #define EXAMPLE_LCD_V_RES   (172)
// 竖屏显示
#define EXAMPLE_LCD_H_RES   (172)
#define EXAMPLE_LCD_V_RES   (320)
  1. 颜色设置
    实例中 esp_lcd_panel_dev_config_t 设备配置的默认颜色格式是 BGR,这里需要该成 RGB
    const esp_lcd_panel_dev_config_t panel_config = {.reset_gpio_num = EXAMPLE_LCD_GPIO_RST,
#if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(6, 0, 0)// TODO: 需要该成 RGB// .rgb_endian = LCD_RGB_ENDIAN_BGR,.rgb_endian = LCD_RGB_ENDIAN_RGB,
#else// .rgb_ele_order = LCD_RGB_ELEMENT_ORDER_BGR,.rgb_ele_order = LCD_RGB_ELEMENT_ORDER_RGB,
#endif.bits_per_pixel = EXAMPLE_LCD_BITS_PER_PIXEL,};

光这么改还不够,编译、烧录你会发现红色的 logo 会显示 蓝色
image

这是因为 RRRRRGGGGGGBBBBB(RGB565) 显示为了 BBBBBGGGGGGRRRRR,红色和蓝色位置反了。
![[ESP32 + LVGL 开发笔记(一):点亮屏幕-1761310114817.png|660x197]]

在图示位置添加下面的代码设置颜色反转,颜色就会显示正常。

esp_lcd_panel_invert_color(lcd_panel, true);
  1. x轴错位 && y轴方向错误
    这一点来看一下 GPT 的讲解:

ST7789 控制器原生支持的最大逻辑分辨率是 240×320 或 240×240(取决于驱动配置)
当你设置分辨率为 320×172 时,显然和原生的坐标系不完全匹配,所以屏幕厂家会在模组内部「裁剪」或「偏移」显示窗口。

在刚才反转颜色的代码下添加:

// (240 - 172) / 2 = 34,将 172 替换为你的"宽度"计算一下
esp_lcd_panel_set_gap(lcd_panel, 34, 0);

y轴你可能会想到通过 esp_lcd_panel_mirror 来设置,但是会发现没效果。这是因为下方的 lvgl 设置会覆盖掉你的设置,所以这一块需要到 lvgl_port_display_cfg_t lvgl 显示配置进行修改:
image
设置 mirror_xmirror_y 为 false。见现在的显示效果:
image

好,现在大功告成,成功完美点亮一颗屏幕😎😎

屏幕相关设置也可以自己改一改看看效果,这种代码调整调整、看看效果很快就会熟练了🥳

参考连接

lvgl移植组件仓库

  • espressif/esp_lvgl_port • v2.6.2 • ESP Component Registry
    代码参考
  • diudiusloth/esp_lvgl_simple_tutorail: esp_lvgl 简单教程的示例代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/969309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聊聊deepseek对latex的辅助

聊聊deepseek对latex的辅助最近两天,用deepseek辅助latex写了一篇20页的反串讲文档,感觉结构清晰,且格式工整,一目了然。 很感慨的一点是,最开始的时候,是大学毕业论文时使用latex,当时就想着自己不用考虑work的…

【LVGL】图片部件

引言 图片部件(lv_img)图片部件相关 api 函数图片转换 LVGL 中要显示图片则需要 C 语言,或者 bin 的方式, 恰好 LVGL 官网提供了一个很好的在线工具:图像转换器 不过要注意的是选择自己当前的 LVGL 版本,下面是我…

linux c makefile

当然可以!在 Linux 系统中,makefile 是用于编译和构建项目的常用工具。它定义了项目的构建规则,帮助开发者自动化编译过程。一、什么是 Makefile? Makefile 是一个文本文件,它定义了如何编译和链接源代码。它告诉…

基于自适应遗传算法风光场景生成的电动汽车并网优化调度【IEEE33节点】(Matlab代码建立)

基于自适应遗传算法风光场景生成的电动汽车并网优化调度【IEEE33节点】(Matlab代码建立)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…

10大 spring源码设计模式 (图解+秒懂+史上最全)

本文 的 原文 地址 原始的内容,请参考 本文 的 原文 地址 本文 的 原文 地址 尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、…

实用指南:《中国电力产业数字化》深度解析与前沿展望(下)——中国电力数字化转型路线图:SPARK 融合平台的设计与落地方案

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

High Frequency Active Auroral Research Program(HAARP)部分摘取

High Frequency Active Auroral Research Program(HAARP)部分摘取原网站:https://haarp.gi.alaska.edu/ 部分摘取:利用最近研发的强大且灵活的电离层加热器(如EISCAT加热器,以及最近建成的HAARP加热器)对高频无…

CF813E Army Creation

考虑套用 HH 的项链做法,如果一个数前面第 \(k\) 个数小于 \(l\) 则可以选,那么用主席树维护值域线段树即可。

Mac 怎么安装 PyCharm 2020.1.dmg?超简单教程(附安装包)

Mac 怎么安装 PyCharm 2020.1.dmg?超简单教程(附安装包)​ 一、下载文件 安装包下载:https://pan.quark.cn/s/c35137bf43ce , PyCharm 2020.1.dmg文件,一般是在浏览器下载后,放在了「下载」文件夹里。如果没有,…

C# 蓝牙远程控制应用:从零达成移动设备与硬件的无线交互

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

铭记旧友

命运,总是一个恶劣地笑着,将人间搅得天翻地覆的死神。这次祂将手伸向她的父母,以名为“期许”的毒药杀死了她。 也曾挣扎过,将呼救之声传入爱情之耳,却不知会陷入更深的泥泞。 缺爱吗?或许吧,但命运所施舍给她的…

标题:鸿蒙Next音频开发新篇章:深入解析Audio Kit(音频服务) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Spring AI Alibaba 项目源码学习(十二)-完结:Tool

Tool 系统分析 请关注微信公众号:阿呆-bot 概述 本文档分析 Spring AI Alibaba Agent Framework 中的 Tool(工具)系统,包括工具的定义、注册、调用流程、扩展机制以及 AgentTool 的实现。 入口类说明 ToolCallback…

ftp,sftp,scp,tftp几种简单对比,以及python实现ftp功能

ftp,sftp,scp,tftp几种简单对比,以及python实现ftp功能对比如下:特性维度FTPSFTPSCPTFTP安全性 明文传输 基于SSH加密 基于SSH加密 无加密默认端口 21 22 22 69协议基础 TCP SSH SSH UDP认证方式 用户名/密码 多种(…

实用指南:深入解析音频编解码器(Audio CODEC):硬件、接口与驱动开发

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

福利MegaLLM–175刀免费额度建教程

0.简介 MegaLLM 是一个 API 中转服务,支持主流模型 OpenAI、Anthropic、Google、Meta 等,以及包括国产千问、DeepSeek、GLM、K2 等。可以在 Claude Code、 Codex、OpenCode、Kilocode、RooCode... 1. 注册就送 75 刀…

C# 常用控件(学习笔记8)

1. TreeView 树形控件/// <summary> /// 添加 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BtnTreeAdd_…

模拟赛记录 11/18

显然不应该把别人的模拟赛指认成自己的。

代码随想录Day14_

代码随想录Day14_226. 翻转二叉树 - 力扣(LeetCode)class Solution { public:TreeNode* invertTree(TreeNode* root) {if(root==NULL) return root;swap(root->left,root->right);invertTree(root->left);i…

白嫖MegaLLM–175刀免费额度建教程

0.简介 MegaLLM 是一个 API 中转服务,支持主流模型 OpenAI、Anthropic、Google、Meta 等,以及包括国产千问、DeepSeek、GLM、K2 等。可以在 Claude Code、 Codex、OpenCode、Kilocode、RooCode... 1. 注册就送 75 刀…