ESP32C3 移植ST7735 LVGL

2023-11-19

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

关于ESP32
ESP32 系列模组具备卓越的性能和丰富的外设,集Wi-Fi、传统蓝牙、低功耗蓝牙为一体,提供高度集成的解决方案,广泛适用于各类物联网应用。

正是因为esp32的豪华配置,可以配合其esp-idf框架在其平台上轻松运行lvgl,个人做了一个例程cpu占用只有10%左右。

关于移植
由于官方的例程现在还没有适配lvgl8,所以博主尝试了一下移植,但是不能运行,所以说还是先拿lvgl7用着。

获取lvgl官方的lvgl例程
下载地址:https://github.com/lvgl/lv_port_esp32

要注意的是,这个是一个项目,我们自己使用的时候可以直接从lvgl官方库克隆代码,同时克隆esp32下的驱动,不必用这个项目。

打开项目的components文件夹,我们发现相关的库已经导入好了。


我们可以先从这个项目入手,先移植跑通后继续开发。

关于lvgl_esp32_drivers
这个是lvgl官方账号下的一个项目,主要用于在esp32下适配lvgl,包括屏幕,触摸等驱动

以下是支持的屏幕和触摸芯片:

屏幕
Display ControllerTypeInterfaceColor depth (LV_COLOR_DEPTH)Swap RGB565 color (LV_COLOR_16_SWAP)

ILI9341TFTSPI16: RGB565Yes

ILI9163CTFTSPI16: RGB565Yes

ILI9486TFTSPI16: RGB565Yes

ILI9488TFTSPI16: RGB565No

HX8357B/HX8357DTFTSPI16: RGB565Yes

ST7789TFTSPI16: RGB565Yes

ST7735STFTSPI16: RGB565Yes

FT81xTFTSingle, Dual, Quad SPI16: RGB565No

GC9A01TFTSPI16: RGB565Yes

RA8875TFTSPI16: RGB565Yes

SH1107MonochromeSPI1: 1byte per pixelNo

SSD1306MonochromeI2C1: 1byte per pixelNo

PCD8544MonochromeSPI1: 1byte per pixelNo

IL3820e-PaperSPI1: 1byte per pixelNo

UC8151D/ GoodDisplay GDEW0154M10 DESe-PaperSPI1: 1byte per pixelNo

FitiPower JD79653A/ GoodDisplay GDEW0154M09e-PaperSPI1: 1byte per pixelNo

Supported indev controllers
XPT2046

FT3236, FT6X36

FT6206 controllers should work as well (not tested)

STMPE610

FT81x (Single, Dual, and Quad SPI)

我购买的屏幕使用的是st7735s的芯片,测试可以完美驱动

配置项目
将项目克隆下来

git clone --recurse-submodules https://github.com/lvgl/lv_port_esp32.git

--recurse-submodules 同时克隆子模块


打开vscode按下ctrl+shift+p,按照图片添加vscode配置文件夹


然后点击下方设置,进入配置,记得点击esp32c3那里切换下芯片,变成esp32:

修改项目配置
修改编译优化级别,缩小编译文件大小


修改屏幕大小,开启交换RGB565颜色

横屏

 


修改驱动

 


降低spi频率,要不然画面会撕裂

 


修改引脚为自己连接的IO口

 


(可选)开启帧率显示

 


修改完后点击上方保存。

 

修改驱动代码
需要调整一部分代码,不然有一部分会花屏。

原理:ST7735s是为128*160屏幕设计的,我们是128*128的屏幕,需要跳过一部分像素。

 

 在components\lvgl_esp32_drivers\lvgl_spi_conf.h 修改

  1. 修改HSPI_HOST,在lvgl_spi_config.h大约67行上下:
#if defined (CONFIG_LV_TFT_DISPLAY_SPI_HSPI)
    #if CONFIG_IDF_TARGET_ESP32C3
        #define TFT_SPI_HOST SPI2_HOST
    #else
        #define TFT_SPI_HOST HSPI_HOST
    #endif
#elif defined (CONFIG_LV_TFT_DISPLAY_SPI_VSPI)
#define TFT_SPI_HOST VSPI_HOST
#elif defined (CONFIG_LV_TFT_DISPLAY_SPI_FSPI)
#define TFT_SPI_HOST FSPI_HOST
#endif

        2.在lvgl_helpers.c中207行左右

#if defined (CONFIG_IDF_TARGET_ESP32)
    assert((SPI_HOST <= host) && (VSPI_HOST >= host));
    const char *spi_names[] = {
        "SPI_HOST", "HSPI_HOST", "VSPI_HOST"
    };
#elif defined (CONFIG_IDF_TARGET_ESP32S2)
    assert((SPI_HOST <= host) && (HSPI_HOST >= host));
    const char *spi_names[] = {
        "SPI_HOST", "", ""
    };
#elif defined (CONFIG_IDF_TARGET_ESP32C3)
    // assert((SPI_HOST <= host) && (HSPI_HOST >= host));
    const char *spi_names[] = {
        "SPI2_HOST", "", ""
    };
#endif

 3.components\lvgl_esp32_drivers\lvgl_helpers.c  111行左右修改

//改为2 SPI_DMA_CH_AUTO
lvgl_spi_driver_init(TFT_SPI_HOST,
        DISP_SPI_MISO, DISP_SPI_MOSI, DISP_SPI_CLK,
        SPI_BUS_MAX_TRANSFER_SZ, SPI_DMA_CH_AUTO,
        DISP_SPI_IO2, DISP_SPI_IO3);

在 components\lvgl_esp32_drivers\lvgl_tft\st7735s.c 屏蔽 I2C 和AXP192 的相关代码


编译,上传项目测试
如果没有做自动下载电路,需要自己进入下载模式

如果没有问题应该是上图所示。

开启lvgl例程测试
需要改动一下,下载的这个程序如果是st7735只会显示hello world


编译,重新烧写,如果正常就会自动运行lvgl的demo

 

 

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

ESP32C3 移植ST7735 LVGL 的相关文章

  • aix升级openssh_AIX6.1上源码编译升级openssh6.6p1

    最近因为绿盟扫描到AIX5 3 AIX6 1系统有openssh高危漏洞 OPENSSH6 4之前的都报高危漏洞 IBM官网上也只有最新的openssh6 0安装文件供下载 没办法只有自己试验的用源码来安装升级 期间各种报错 搞了差不多一周
  • educoder答案pythonnumpy_Educoder 题解

    Solution 4 2 第一关 求个导发现有两个根 分别二分就行了 importnumpy as np E 1e 6 begin 请在此填写代码 计算6 np exp x 113 x 17 0的根 deff x return 6 np e

随机推荐

  • 语义分割实践—耕地提取(二分类)

    开篇 感谢李沐老师团队为深度学习教学做出的巨大贡献 对李沐老师及团队致以深深的敬意 同时 对技术开发社区以及编程技术网站的优质创作者们 Jack Cui等 表示深深的感谢 一 深度学习网络中的常见概念 一 Ground Truth 通常指人
  • 06 CubeMX HAL库stm32作从机 硬件I2C中断接收无BUG程序

    文章目录 CubeMX HAL库stm32作从机 硬件I2C中断接收无BUG程序 一 设置烧录模式 二 使用外部晶振 三 开启IIC中断 四 设置IIC参数 五 配置外部时钟 六 设置工程信息 七 代码生成项配置 八 在Keil中打开工程
  • on conflict do update

    使用ON CONFLICT DO UPDATE语法的主要优点是可以使SQL语句更加简洁和高效 相比于传统的INSERT和UPDATE两个步骤执行 使用ON CONFLICT DO UPDATE可以将这两个步骤合并为一个数据库操作 从而减少了
  • IntelliJ IDEA 15款 神级超级牛逼插件推荐(自用,真的超级牛逼)

    来源 http suo im 5X5Rql 满满的都是干货 所有插件都是在 ctrl alt s 里的plugins 里进行搜索安装 1 CodeGlance 代码迷你缩放图插件 2 Codota 代码提示工具 扫描你的代码后 根据你的敲击
  • android检测新版本并下载安装的方法

    很多客户端程序都有检测是否有更新的功能 本文大体介绍了其实现过程 此功能模块也是开源中国客户端中的源码 个人感觉用到的安卓基础知识还是比较全面的 很适合初学者学习进阶 检查App更新 param context param isShowMs
  • Win10 64bit系统中VS2015与OpenCV3.2配置开发环境

    1 将OpenCV解压到D盘根目录 个人认为纯英文目录比较保险 2 VS2015建立控制台工程 设置为64位debug开发环境 3 配置工程属性 在可执行目录 executable directories 中 确认已包含opencv包里的b
  • VRTK4.0 学习Day3

    假装是第三天吧 我这里的情况是 勾选了这个支持之后 会将下方这个XR Plug in Managerment就下好了 我还打开了那个保龄球的那个项目 那里面的这个XR Plug in Managerment是没有的 也不要去导入 我导入之后
  • windows下搭建编译chromium的开发环境

    本篇为windows下搭建编译chromium的方法 mac篇 mac下搭建编译chromium的开发环境 二七 CSDN博客 linux篇 linux 搭建和编译 chromium 环境 二七 CSDN博客 注意 搭建部署chromium
  • js 将一维数组转成二维数组

    开发时遇上一个将一维数组转换成二维数据结构的要求 记录一下工具函数 说明 这是一个函数 直接复制到
  • 接口测试这么玩才明白

    接口测试作为当下提升测试效能的利器 逐步被大家所认同 但同时很多团队在落地接口自动化时 又会感觉效果不是很明显 投入了大量的时间 写了很多脚本 但是效果并不是很明显 其中有各种问题 结合某团队的现状 分享一些实践经验 仅供参考 引入接口测试
  • Java解析XML的四种方法详解

    XML现在已经成为一种通用的数据交换格式 它的平台无关性 语言无关性 系统无关性 给数据集成与交互带来了极大的方便 对于XML本身的语法知识与技术细节 需要阅读相关的技术文献 这里面包括的内容有DOM Document Object Mod
  • c语言下列编程段的错误,C语言编程题目(有错误)

    问题描述 C语言编程题目 有错误 输入精度e 用下列公式求cosx的近似值 精确到最后一项的绝对值小雨e 要求调用和定义函数funcos e x 求余弦函数的近似值 cosx x的0次方 0 x的2次方 2 x的4次方 4 x的6次方 6
  • 58同城 -- 前端一面

    面我的是一个小哥哥 面试体验挺好的 大概进行了35分钟左右 自我介绍 面试内容 为什么向做前端 怎么学习的前端 本人非科班哈 然后问我项目 直接问项目 没问笔试令我有点意外 问我印象最深的项目 印象最深的功能 遇到的难点 前端存储的区别 C
  • python格式化字符串 时间戳 转 UTC(2023-01-11T16:00:00Z)格式时间

    前言 公司前端的时间参数分为两类 一种是时间戳传参 另一种是 2023 01 11T16 00 00Z UTC 时间传参 有些脚本需要用到datatime datatime因此要整理一下相关方法 获取时间戳 my timestamp tim
  • mysql引擎机制_Mysql存储引擎以及锁机制

    一 常用命令 1 查看引擎 默认为InnoDB 查看mysql提供的存储引擎 show engienes 查看mysql当前默认的存储引擎 show variables like storage engine 查看某张表用了什么引擎 sho
  • 解决css中上下外边距(margin)在父元素中溢出的问题

    两个办法 给父元素添加overflow hidden 即可 给父元素添加透明边框border 1px solid transparent 给父元素添加伪元素 before after content display table 改变光标的颜
  • Unity Application.OpenURL Unity打开网页链接

    一般情况下 在电脑上使用Application OpenURL可以正常打开网页 但是如果网页以www开头 例如www baidu com 在电脑上可以正常打开 但是发布成apk后就没有反应了 此时应将Application OpenURL
  • 怎样管理计算机启动项,启动项管理,详细教您电脑开机启动项怎么设置

    电脑开机启动项 就是电脑开机的时候系统会在前台或者后台运行的程序 一般我们主要说的是windows系统的开机启动项 在Windows的配置文件也会加载一些自动运行的程序 那电脑开机启动项怎么设置 下面 小编给大家介绍设置电脑开机启动项的步骤
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • ESP32C3 移植ST7735 LVGL

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