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

T-Dongle-S3开发笔记——移植LVGL

添加lvgl组件 

idf.py add-dependency lvgl/lvgl>=8.*

新建终端执行命令后出现了新的文件:

清除再编译后才会出现lvgl库

优化为本地组件

以上方式修改了组件文件内容重新编译后文件又会变回去。

所以我们要把lvgl变成本地组件

1、要把 idf_component.yml 文件删除

2、把managed_components\lvgl__lvgl命名更改为components/lvgl

3、项目路径下的CMakeLists.txt添加components\lvgl路径

4、进入menuconfig配置lvgl ,取消选中“Uncheck this to use custom lv_conf.h”。以lv_conf.h进行配置

添加lvgl_esp32_drivers

 git clone https://github.com/lvgl/lvgl_esp32_drivers.git

根目录CMakeLists.txt添加:

set(EXTRA_COMPONENT_DIRS 
"components/lvgl" 
"components/lvgl_esp32_drivers"
)

报错1:

IDF 5.0 及以上版本中 driver 已经不再作为 IDF 项目的基础组件,要使用这些非基础组件必须在 IDF 项目组件的 CMakeLists.txt 文件内明确指出。

解决方法:lvgl_esp32_drivers组件下的CMakeLists.txt添加driver

idf_component_register(SRCS ${SOURCES}INCLUDE_DIRS ${LVGL_INCLUDE_DIRS}REQUIRES lvgl driver)

报错2 

bit_num 改为 duty_resolution

报错3

myproject/components/lvgl_esp32_drivers/lvgl_tft/esp_lcd_backlight.c:67:43: error: 'SIG_GPIO_OUT_IDX' undeclared (first use in this function)

添加头文件

#include <soc/gpio_sig_map.h>

报错4

implicit declaration of function 'gpio_matrix_out'; did you mean 'gpio_iomux_out'? [-Werror=implicit-function-declaration]

添加头文件 (vscode上的提示功能还不行,报错3可以提示)

#include <rom/gpio.h>

报错5

error: 'LV_HOR_RES_MAX' undeclared (first use in this function); 
did you mean 'LV_HOR_RES'?

lvgl_helpers.h添加定义

#define LV_HOR_RES_MAX  160
#define LV_HOR_RES_MAX  80

报错6

/myproject/components/lvgl_esp32_drivers/lvgl_tft/st7735s.c:101:9: error: implicit declaration of function 'gpio_pad_select_gpi 
'; did you mean 'esp_rom_gpio_pad_select_gpio'? [-Werror=implicit-function-declaration]

disp_spi.h 添加头文件

#include <rom/gpio.h>

报错7

myproject/components/lvgl_esp32_drivers/lvgl_tft/st7735s.c:110:26: error: 'portTICK_RATE_MS' undeclared (first use in this function); did you mean 'portTICK_PERIOD_MS'?

portTICK_RATE_MS 全部换成 portTICK_PERIOD_MS

相关配置

引脚配置

参考例程

// Display (ST7735s) hardware configuration:
#define DISPLAY_RST      1
#define DISPLAY_DC       2
#define DISPLAY_MOSI     3
#define DISPLAY_CS       4
#define DISPLAY_SCLK     5
#define DISPLAY_LEDA    38
#define DISPLAY_MISO    -1
#define DISPLAY_BUSY    -1
#define DISPLAY_WIDTH  160
#define DISPLAY_HEIGHT  80

Color settings

Memory settings

显示帧率

配置demo

屏幕方向

运行测试

测试代码

main.c

#include <stdio.h>
#include "esp_log.h"
#include "esp_system.h"
#include "freertos/FreeRTOS.h"
#include "freertos/event_groups.h"
#include "lvgl.h"
#include "lvgl_helpers.h"#include "demos/lv_demos.h"
#include <esp_timer.h>#define TAG "main"void lv_tick_task(void *arg)
{lv_tick_inc(1);
}void app_main(void)
{/* Initialize SPI or I2C bus used by the drivers */lvgl_driver_init();lv_init();/*Create a LED and switch it OFF*///lv_obj_t * led1  = lv_led_create(lv_scr_act());//lv_obj_align(led1, NULL, LV_ALIGN_CENTER, -80);// lv_led_off(led1);lv_color_t *buf1 = heap_caps_malloc(DISP_BUF_SIZE * sizeof(lv_color_t), MALLOC_CAP_DMA);assert(buf1 != NULL);static lv_color_t *buf2 = NULL;static lv_disp_draw_buf_t disp_buf;uint32_t size_in_px = DISP_BUF_SIZE;lv_disp_draw_buf_init(&disp_buf, buf1, buf2, size_in_px);lv_disp_drv_t disp_drv;lv_disp_drv_init(&disp_drv);disp_drv.hor_res = LV_HOR_RES_MAX;disp_drv.ver_res = LV_VER_RES_MAX;disp_drv.flush_cb = disp_driver_flush;disp_drv.draw_buf = &disp_buf;lv_disp_drv_register(&disp_drv);const esp_timer_create_args_t periodic_timer_args = {.callback = &lv_tick_task,.name = "periodic_gui"};esp_timer_handle_t periodic_timer;ESP_ERROR_CHECK(esp_timer_create(&periodic_timer_args, &periodic_timer));ESP_ERROR_CHECK(esp_timer_start_periodic(periodic_timer, 1 * 1000));// lvgl demo演示lv_demo_widgets();// lv_demo_stress();while (1){/* Delay 1 tick (assumes FreeRTOS tick is 10ms */vTaskDelay(pdMS_TO_TICKS(10));lv_task_handler();}}

运行报错

运行后不断重启报错

E (418) spi: spi_bus_initialize(764): invalid dma channel, chip only support spi dma channel auto-alloc

lvgl_helpers.c修改:

运行效果

T-Dongle-S3开发笔记-移植LVGL资源-CSDN文库

相关文章:

T-Dongle-S3开发笔记——移植LVGL

添加lvgl组件 idf.py add-dependency lvgl/lvgl>8.* 新建终端执行命令后出现了新的文件&#xff1a; 清除再编译后才会出现lvgl库 优化为本地组件 以上方式修改了组件文件内容重新编译后文件又会变回去。 所以我们要把lvgl变成本地组件 1、要把 idf_component.yml 文…...

SOPHON算能科技新版SDK环境配置以及C++ demo使用过程

目录 1 SDK大包下载 2 获取SDK中的库文件和头文件 2.1 注意事项 2.2 交叉编译环境搭建 2.2.1 首先安装工具链 2.2.2 解压sophon-img包里的libsophon_soc__aarch64.tar.gz&#xff0c;将lib和include的所有内容拷贝到soc-sdk文件夹 2.2.3 解压sophon-mw包里的sophon-mw-s…...

Linux-SSH被攻击-解决方案

文章目录 一、检查攻击来源二、防范措施三、Fail2banfirewallcmd-ipset安装Fail2ban&#xff1a;安装firewalld&#xff1a;配置Fail2ban&#xff1a;配置firewalld以使用fail2ban&#xff1a;测试配置&#xff1a; SSH端口暴露在公网上很可能被黑客扫描&#xff0c;并尝试登入…...

第1章 计算机系统概述(2)

1.4操作系统结构 随着操作系统功能的不断增多和代码规模的不断变大,合理的操作系统结构,对于降低操作系统复杂度,提升操作系统安全与可靠性来说变得尤为重要。 分层法: 优点: 1.便于系统调试和验证,简化系统的设计和实现 2.易于扩充和维护 缺点: 1.合理定义各层较难(依赖关系比…...

【Java中23种设计模式-单例模式--饿汉式】

加油&#xff0c;新时代打工人&#xff01; 简单粗暴&#xff0c;直接上代码。 23种设计模式定义介绍 Java中23种设计模式-单例模式 Java中23种设计模式-单例模式2–懒汉式线程不安全 Java中23种设计模式-单例模式2–懒汉式2线程安全 package mode;/*** author wenhao* dat…...

基于JavaWeb实现的在线蛋糕商城

一、系统架构 前端&#xff1a;jsp | bootstrap | js | css 后端&#xff1a;servlet | mybatis 环境&#xff1a;jdk1.7 | mysql | maven | tomcat 二、代码及数据库 三、功能介绍 01. web页-首页 02. web页-商品分类 03. web页-热销 04. web页-新品 05. w…...

【Pytorch】各种维度变换函数总结

维度变换千万不要混着用&#xff0c;尤其是交换维度的transpose和更改观察视角的view或者reshape&#xff01;混用了以后虽然不会报错&#xff0c;但是数据是乱的, 建议用einops中的rearrange&#xff0c;符合人的直观&#xff0c;不容易出错。 一个例子&#xff1a; >>…...

typescript 泛型详解

typescript 泛型 泛型是可以在保证类型安全前提下&#xff0c;让函数等与多种类型一起工作&#xff0c;从而实现复用&#xff0c;常用于: 函数、接口、class中。 需求:创建一个id 函数&#xff0c;传入什么数据就返回该数据本身(也就是说&#xff0c;参数和返回值类型相同)。 …...

【Ubuntu内核】解决Ubuntu 20.04更新内核后无法联网的问题

最近在使用Ubuntu 20.04时&#xff0c;在更新内核后无法进行WiFi联网。我的电脑上装载的是AX211型号的无线网卡&#xff0c;之前安装了相应的驱动&#xff0c;并且一直正常使用。但不小心更新到了Linux 5.15.0-94-generic后&#xff0c;突然发现无法连接网络了。 于是首先怀疑…...

20-k8s中pod的调度-nodeSelector节点选择器

一、概念 我们先创建一个普通的deploy资源&#xff0c;设置为10个副本 [rootk8s231 dns]# cat deploy.yaml apiVersion: apps/v1 kind: Deployment metadata: name: dm01 spec: replicas: 10 selector: matchLabels: k8s: k8s template: metadata: …...

win10下wsl2使用记录(系统迁移到D盘、配置国内源、安装conda环境、配置pip源、安装pytorch-gpu环境、安装paddle-gpu环境)

wsl2 安装好后环境测试效果如下&#xff0c;支持命令nvidia-smi&#xff0c;不支持命令nvcc&#xff0c;usr/local目录下没有cuda文件夹。 系统迁移到非C盘 wsl安装的系统默认在c盘&#xff0c;为节省c盘空间进行迁移。 1、输出wsl -l 查看要迁移的系统名称 2、执行导出命…...

数据结构与算法:栈

朋友们大家好啊&#xff0c;在链表的讲解过后&#xff0c;我们本节内容来介绍一个特殊的线性表&#xff1a;栈&#xff0c;在讲解后也会以例题来加深对本节内容的理解 栈 栈的介绍栈进出栈的变化形式 栈的顺序存储结构的有关操作栈的结构定义与初始化压栈操作出栈操作获取栈顶元…...

Newtonsoft.Json设置忽略某些字段

using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace TestProject1 {/// <summary>/// 输出json时&#xff0c;设置忽略哪些…...

【c++每天一题】跳跃游戏

题目 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1…...

【C# 中抓取包含多个屏幕内容的整个桌面】

要在 C# 中抓取包含多个屏幕内容的整个桌面&#xff0c;可以使用 .NET Framework 或者其他第三方库来实现。一种常见的方法是使用 System.Windows.Forms 和 System.Drawing 命名空间中的类来实现屏幕截图。以下是一个示例代码&#xff0c;演示如何抓取包含多个屏幕内容的整个桌…...

数据库管理-第152期 Oracle Vector DB AI-04(20240220)

数据库管理152期 2024-02-20 数据库管理-第152期 Oracle Vector DB & AI-04&#xff08;20240220&#xff09;1 常用的向量检索方法聚类图搜索哈希量化 2 Oracle Vector DB中的索引索引&#xff08;默认&#xff09; 索引&#xff08;高级&#xff09;3 EMBEDDINGSSQL EMBE…...

uniapp app端水印组件封装 一次引入版

直接上代码 <template><view><canvas canvas-id"myCanvas"style"width: 100vw; height: 100vh;opacity: 0;position: fixed;top: -1000px;"></canvas></view> </template><script>export default {name: "…...

最新Unity游戏主程进阶学习大纲(2个月)

过完年了&#xff0c;很多同学开始重新规划自己的职业方向,找更好的机会,准备升职或加薪。今天给那些工作了1~5年的开发者梳理”游戏开发客户端主程”的学习大纲&#xff0c;帮助大家做好面试准备。适合Unity客户端开发者。进阶主程其实就是从固定的几个方面搭建好完整的知识体…...

NoSQL 数据库管理工具,搭载强大支持:Redis、Memcached、SSDB、LevelDB、RocksDB,为您的数据存储提供无与伦比的灵活性与性能!

NoSQL 数据库管理工具&#xff0c;搭载强大支持&#xff1a;Redis、Memcached、SSDB、LevelDB、RocksDB&#xff0c;为您的数据存储提供无与伦比的灵活性与性能&#xff01; 【官网地址】&#xff1a;http://www.redisant.cn/nosql 介绍 直观的用户界面 从单一应用程序中同…...

基于Spring Boot的多级缓存系统设计

在构建大规模应用时&#xff0c;缓存系统是提高性能的关键因素之一。为了更有效地利用缓存&#xff0c;我们可以设计一个基于Spring Boot的多级缓存系统&#xff0c;结合本地内存缓存&#xff08;如Caffeine&#xff09;和分布式缓存&#xff08;如Redis&#xff09;。以下是一…...

终极指南:Redoc安全最佳实践,全面保护你的API文档

终极指南&#xff1a;Redoc安全最佳实践&#xff0c;全面保护你的API文档 【免费下载链接】redoc &#x1f4d8; OpenAPI/Swagger-generated API Reference Documentation 项目地址: https://gitcode.com/gh_mirrors/re/redoc Redoc是一款强大的OpenAPI/Swagger生成API参…...

Pixel Aurora Engine镜像部署:支持RTX 3060及以上显卡的轻量级方案

Pixel Aurora Engine镜像部署&#xff1a;支持RTX 3060及以上显卡的轻量级方案 1. 项目概览 Pixel Aurora Engine是一款专为像素艺术创作设计的AI绘图工作站&#xff0c;采用复古8-bit游戏风格界面&#xff0c;让AI艺术创作变得像玩游戏一样有趣。这个轻量级解决方案特别针对…...

STM32标准库开发入门与实战指南

1. STM32入门指南&#xff1a;从零开始掌握标准库开发作为一名嵌入式开发者&#xff0c;我深知STM32的学习曲线有多陡峭。记得我第一次接触STM32时&#xff0c;面对密密麻麻的寄存器手册和复杂的开发环境&#xff0c;完全不知从何入手。经过多年的项目实践和教学经验&#xff0…...

终极指南:免费解锁Cursor Pro完整功能,告别AI编程限制

终极指南&#xff1a;免费解锁Cursor Pro完整功能&#xff0c;告别AI编程限制 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reach…...

4.1第一次练习作业

1.在root用户的主目录下创建两个目录分别为haha和hehe&#xff0c;复制hehe目录到haha目录并重命名为apple。[rootlocalhost ~]# mkdir {haha,hehe} [rootlocalhost ~]# cp -r hehe haha [rootlocalhost ~]# cd haha [rootlocalhost haha]# mv hehe apple2.将hehe目录移动到app…...

Win10主机与Win7虚拟机共享文件夹超详细指南(VMware/虚拟机新手必看)

Win10主机与Win7虚拟机无缝共享文件夹全流程解析 刚接触虚拟机的用户经常会遇到一个棘手问题&#xff1a;如何在主机和虚拟机之间高效传输文件&#xff1f;复制粘贴受限、U盘来回插拔效率低下&#xff0c;而共享文件夹功能正是解决这一痛点的最佳方案。本文将手把手带你完成从零…...

2026届毕业生推荐的十大降重复率助手实际效果

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能技术于学术写作领域的运用愈发广泛&#xff0c;其助力论文撰写的本领已获实证&#…...

python-langchain框架(1-8-2 缓存机制——验证缓存的效果)

当用户提出一个常见问题时&#xff0c;首次调用大模型需要经历网络传输、排队等待、模型推理等完整链路&#xff0c;响应时间通常在1至3秒。这个时长已超过人类对“流畅交互”的心理阈值&#xff08;200毫秒&#xff09;&#xff0c;用户会明显感知到“卡顿”和“等待焦虑”。而…...

离线部署GraphRAG的tiktoken避坑指南:从源码解析到本地化实践

1. 离线部署GraphRAG的核心痛点&#xff1a;tiktoken的网络依赖问题 当你准备在内网环境部署GraphRAG时&#xff0c;第一个拦路虎往往是tiktoken这个看似简单的编码库。我在某金融机构的私有化部署项目中就遇到过这样的场景&#xff1a;所有服务器都处于物理隔离状态&#xff0…...

CVPR 2024人脸黑科技:3D头像重建如何用单张自拍搞定?附开源项目推荐

CVPR 2024单图3D头像重建技术实战&#xff1a;从算法原理到开源工具落地 当你在社交媒体上传自拍时&#xff0c;是否想过这张平面照片能瞬间转化为可360度旋转的数字化身&#xff1f;CVPR 2024最新研究成果正在让这个想象成为现实——无需专业设备&#xff0c;仅用普通手机拍摄…...