当前位置: 首页 > news >正文

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

折腾了几天 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.jsqmd.com/news/43913/

相关文章:

  • 聊聊deepseek对latex的辅助
  • 【LVGL】图片部件
  • linux c makefile
  • 基于自适应遗传算法风光场景生成的电动汽车并网优化调度【IEEE33节点】(Matlab代码建立)
  • 10大 spring源码设计模式 (图解+秒懂+史上最全)
  • 实用指南:《中国电力产业数字化》深度解析与前沿展望(下)——中国电力数字化转型路线图:SPARK 融合平台的设计与落地方案
  • High Frequency Active Auroral Research Program(HAARP)部分摘取
  • CF813E Army Creation
  • Mac 怎么安装 PyCharm 2020.1.dmg?超简单教程(附安装包)
  • TypeScript-安装安装
  • C# 蓝牙远程控制应用:从零达成移动设备与硬件的无线交互
  • 铭记旧友
  • AI热潮下的冷思考:从估值泡沫到就业现实
  • 杨辉三角形
  • update 锁表了: 执行一个update 表被锁了,原因是什么?
  • 标题:鸿蒙Next音频开发新篇章:深入解析Audio Kit(音频服务) - 实践
  • 春秋云境Apache OFBiz 目录遍历致代码执行漏洞 CVE-2024-36104
  • 在 Ubuntu 20.04 上安装 gcc/g++ 11,并使用 update-alternatives 管理多个版本。
  • Doris学习笔记
  • 人工智能之编程进阶 Python高级:第一章 栈和队列
  • Spring AI Alibaba 项目源码学习(十一)-Hook
  • linux c ini
  • Spring AI Alibaba 项目源码学习(十二)-完结:Tool
  • linux busybox
  • DS trick record 2
  • 详细介绍:MonkeyCode:开源AI编程助手的技术实践与应用价值
  • ftp,sftp,scp,tftp几种简单对比,以及python实现ftp功能
  • 实用指南:深入解析音频编解码器(Audio CODEC):硬件、接口与驱动开发
  • 福利MegaLLM–175刀免费额度建教程
  • C# 常用控件(学习笔记8)