当前位置: 首页 > 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;。以下是一…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...