ESP32在ESP-IDF框架下使用LVGL(v8.3)

news2025/1/18 15:00:02

开发环境

VSCode+ESP-IDF插件
说明:IDF版本为4.4.4,最新版的5.0.1弃用了些东西,而lvgl_esp32_drivers对5以上的版本未适配,所以不建议使用5以上的版本
安装:安装教程,建议整体看完在进行安装,以免安装失败,教程安装的是5.0.1,需要改为4.4.4
Arduino移植教程:点击此处

加载库

lvgl:github下载地址,选择8.3版本
lvgl_esp32_driver:gihub下载地址
说明:将两个压缩包解压,将lvgl-release-v8.3重命名为lvgl,lvgl_esp32_drivers_master重命名为lvgl_esp32_drivers,新建ESP-IDF项目,在根目录下创建components文件夹,并将上面两个文件夹放入components文件夹中。
操作:clean一下项目,重新build一下项目,此时界面下方导航栏齿轮按钮(SDK Configuration editor)中会生成lvgl和驱动相关的配置。首次编译会出现如下错误:

错误一:
lvgl_helpers.h:58:25: error: 'LV_HOR_RES_MAX' undeclared (first use in this 
function); did you mean 'LV_HOR_RES'?
解决方法:
ctrl+鼠标左键,选中上述错误语句,找到错误文件lvgl_helpers.h;在给文件的第25行插入下面两个定义,需要根据自己的屏幕尺寸修改。
#define LV_HOR_RES_MAX 240
#define LV_VER_RES_MAX 320

错误二:
lvgl_helpers.c:159:9: error: 'SPI_HOST_MAX' undeclared (first use in this function); did you mean 'GPIO_PORT_MAX'?
解决方法:
还是上面的文件中,添加如下定义
#define SPI_HOST_MAX 3

lvgl_esp32_drivers配置

屏幕:st7789 240*320 2.8寸屏幕,屏幕接线方式如下。

ESP32引脚屏幕引脚
13MOSI
14SCK
15CS
2DC
EN 或 RSTRST
未接MISO
VCCBL/LED(背光)

点解VSCode界面下方导航栏齿轮按钮,抖索 Display Pin Assigments 配置如下:

在这里插入图片描述

测试

下面的程序,根据lvgl_port_esp32主程序修改而来。
打开齿轮按钮,使能一个lvgl示例,如下使能Benchmark your system,并将下面代码直接覆盖原来的主程序。如果你想测试其它示例,可以在下面中文注释下面,调用ui部分的逻辑代码即可。
在这里插入图片描述

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_freertos_hooks.h"
#include "freertos/semphr.h"
#include "esp_system.h"
#include "driver/gpio.h"
#include "lvgl/lvgl.h"
#include "lvgl_helpers.h"
#include <lv_demos.h>
/*********************
 *      DEFINES
 *********************/
#define TAG "demo"
#define LV_TICK_PERIOD_MS 1

/**********************
 *  STATIC PROTOTYPES
 **********************/
static void lv_tick_task(void *arg);
static void guiTask(void *pvParameter);
static void create_demo_application(void);

/**********************
 *   APPLICATION MAIN
 **********************/
void app_main() {

    
    xTaskCreatePinnedToCore(guiTask, "gui", 4096*2, NULL, 0, NULL, 1);
}

SemaphoreHandle_t xGuiSemaphore;

static void guiTask(void *pvParameter) {

    (void) pvParameter;
    xGuiSemaphore = xSemaphoreCreateMutex();
    lv_init();
    lvgl_driver_init();
    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.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, LV_TICK_PERIOD_MS * 1000));
    /* 在这里更换自己的UI */
    lv_demo_benchmark();
    while (1) {
        /* Delay 1 tick (assumes FreeRTOS tick is 10ms */
        vTaskDelay(pdMS_TO_TICKS(10));

        /* Try to take the semaphore, call lvgl related function on success */
        if (pdTRUE == xSemaphoreTake(xGuiSemaphore, portMAX_DELAY)) {
            lv_task_handler();
            xSemaphoreGive(xGuiSemaphore);
       }
    }
    /* A task should NEVER return */
    free(buf1);
    vTaskDelete(NULL);
}

static void lv_tick_task(void *arg) {
    (void) arg;
    lv_tick_inc(LV_TICK_PERIOD_MS);
}

上面程序是在lvgl_port_esp32的主程序修改而来,源程序直接运行会报下图中的错误,需要将lv_disp_buf_t修改为lv_disp_draw_buf_t,lv_disp_buf_init修改为lv_disp_draw_buf_init,将 disp_drv.buffer修改为disp_drv.draw_buf。除此以外,删除了一些没用的#if、#endif等内容,让程序看起来比较简洁。
在这里插入图片描述

虽然编译通过了,但对于合宙的esp32s3来说还是没有画面显示。需要将lvgl_helpers.c的第180行,修改成如下代码,如果是其它芯片比如ESP32S2等,也要做相应的修改,网上有相关的教程。

 #if defined (CONFIG_IDF_TARGET_ESP32C3)|| defined (CONFIG_IDF_TARGET_ESP32S3)
    dma_channel = SPI_DMA_CH_AUTO;
 #endif

编写自己的UI界面

使用软件SquareLine Studio,版本1.2.2,该版本支持LVGL 8.2.0、8.3.3、8.3.4
1、设置屏幕尺寸,具体参数如下,注意红框内的内容。
在这里插入图片描述
2、随便拖拽两个控件。选择Export->Export UI Files,会导出.c和.h文件。
3、在VScode中使用ctrl+shift+p,选择ESP-IDF:创建新的ESP-IDF组件,输入组件文件夹的名字(例如:my_ui)
.h头文件放在include文件夹中,将其它.c文件放在include文件夹之外。
4、将下面CMakeList.txt文件中的内容覆盖原来生成的CMakeList.txt文件。可复制下面的c程序中的内容。否则,ui界面相关的程序不会得到编译。
在这里插入图片描述
5、在main.c文件中#include<ui.h>,在上面完整代码中文注释下面一行调用ui_init()函数。
6、将SDK Configuration editor的下面选项选中。
在这里插入图片描述
7、编译、下载。
8、设计图、与运行结果如下所示。

file(GLOB_RECURSE SOURCES 	./*.c )
idf_component_register(SRCS ${SOURCES}
                    INCLUDE_DIRS "include"
                    REQUIRES lvgl)

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

解决vue-print-nb打印时多出一页空白,vue-print-nb打印有空白页

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 打印table表格&#xff0c;需要用到vue-print-nb插件&#xff0c;使用该插件可以一键弹窗打印页面 效果如图 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 查了一下&#xff…

斩获“双金”!玻色量子在中国移动第七届创客马拉松大赛脱颖而出

​4月7日&#xff0c;中国移动第七届创客马拉松大赛总决赛在厦门圆满落幕。此次大赛以“能力无界 智算同行”为主题&#xff0c;经过近4000个创新项目的层层选拔&#xff0c;玻色量子凭借“相干量子计算设备”项目脱颖而出&#xff0c;成功摘取“双金”&#xff1a;总决赛全球通…

Qt5.12实战之菜单栏工具栏与状态栏使用

演示效果: 1.widget工程创建 2.ui设计 双击打开下图所示的.ui文件 菜单设计: 添加子菜单 修改QMenu及QAction对象名称为可识别名 具体修改操作如下: QMenu和QAction类似 在QAction列表中修改QAction对象 具体修改方法如下: 为QAction也就是菜单项目添加点击事件处理: 选择信号…

公网远程访问连接Minecraft我的世界服务器 - MCSM控制面板

文章目录 概述1.MCSManager 安装2.内网穿透2.1 安装cpolar内网穿透 3. 访问公网地址4.固定公网地址4.1 保留一个二级子域名4.2 配置固定二级域名4.3 访问固定公网地址 5. 设置节点公网地址6. 固定节点公网地址6.1 保留一个固定tcp地址6.2 配置固定TCP地址 概述 MCSManager 是一…

After Effects 2022(AE 2022)forMac/win图文安装教程

After Effects简称“AE”是Adobe公司推出的一款图形视频处理软件&#xff0c;适用于从事设计和视频特技的机构&#xff0c;包括电视台、动画制作公司、个人后期制作工作室以及多媒体工作室。属于层类型后期软件。可以帮助您高效且精确地创建无数种引人注目的动态图形和震撼人心…

NPDP认证|B端产品经理是如何做竞品调研的?

做竞品的目的主要是为了对比和测试。 对方比我好的地方我规避&#xff0c;发挥我自己的产品优势&#xff0c;对方差的地方我要切入&#xff0c;把他打败。 通过竞品分析后&#xff0c;企业可以确定我们进入市场的机会&#xff0c;也为后期进行产品测试提供有效的分析依据。 那么…

9.4 数组的指针和指向数组的指针变量-1

9.4 数组的指针和指向数组的指针变量-1 一.指向数组元素的指针变量的定义和赋值二.通过指针引用数组元素1.情况12.情况23.情况34.情况45.情况5注意事项&#xff1a; 情况6&#xff1a;*p 优先级相同&#xff0c;并且都是从右到左的结合性&#xff0c;所以 *(p)情况7&#xff1a…

Maven(四):Maven的使用——java工程与Web工程

Maven&#xff08;四&#xff09;&#xff1a;Maven的使用&#xff08;中&#xff09; 前言一、实验四&#xff1a;创建 Maven 版的 Web 工程1、说明2、操作3、生成的pom.xml4、生成的Web工程的目录结构5、创建 Servlet5.1 在 main 目录下创建 java 目录5.2 在 java 目录下创建…

备受瞩目的南卡OE Pro上线!稳坐国内开放式蓝牙耳机TOP1,舒适音质双在线!

4月10号&#xff0c;国内专业资深声学品牌Nank南卡&#xff0c;将推出2023年度旗舰机——南卡OE Pro不入耳开放式蓝牙耳机&#xff0c;致力打造全新不入耳、不伤耳、安全健康佩戴体验&#xff0c;无论是音质体验还是佩戴舒适度&#xff0c;都完胜同行业不入耳开放式耳机&#x…

Ubuntu系统设置中文

在工作中有时候需要&#xff0c;设置系统编码为中文编码&#xff0c;记录一下配置中文编码的流程 ubuntu所需的安装包&#xff1a;(3条消息) linux中文编码locale资源-CSDN文库 date可以查看是否设置了中文编码 date 没有设置中文编码时是这样的显示格式 将包解压了&#xf…

美颜sdk的性能测试与优化技巧

在移动应用中&#xff0c;美颜功能已成为不可或缺的一部分。美颜sdk作为实现美颜功能的关键技术之一&#xff0c;其性能测试与优化显得尤为重要。本文将介绍美颜sdk的性能测试与优化技巧&#xff0c;希望能给您解答疑惑。 一、性能测试 1、常用性能指标 美颜sdk的性能测试主…

智慧医院微信小程序定制开发功能有哪些

无论是哪个时代&#xff0c;人们对于医疗资源的需求都没有消退过&#xff0c;尤其是随着经济条件的提高&#xff0c;人们也越来越关注健康问题。无论是生病就诊还是定期体检都要用到医疗资源。但是平时到医院好像什么时候都人满为患&#xff0c;排很长时间的队&#xff0c;不仅…

数字乡村振兴智慧农业整体规划建设方案2022(ppt可编辑)

项目建设需求 1、农业遥感应用&#xff1a;土地资源分布情况、农作物种植品类分析、作物种植面积监测及区域规划、农作物长势动态监测、农作物估产、病虫害的监测及预警。2、测土配方施肥系统&#xff1a;可查询到相关土地的土壤信息&#xff0c;如&#xff1a;土壤类型、养分…

【顺序表】

顺序表和链表 顺序表1. 函数声明部分2. 函数的实现部分&#xff08;1&#xff09;初始化&#xff08;2&#xff09;尾插&#xff08;3&#xff09;头插&#xff08;4&#xff09;尾删&#xff08;5&#xff09;头删&#xff08;6&#xff09;在pos位置插入x&#xff08;7&#…

【Python实战】入门级都能学懂的Python爬虫之仅需8行代码一键免费下载音乐,听歌自由真这么简单?

前言 据说互联网上 50%以上的流量都是爬虫创造的&#xff0c;也许你看到很多热门数据都是爬虫所创造的&#xff0c; 所以可以说无爬虫就无互联网的繁荣。 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即…

C语言的深度解析

C语言的深度解析 C语言概述C语言内存管理C语言标准库 C语言概述 C是一种通用的、过程式编程编程语言&#xff0c;支持结构化编程、词法作用域和递归&#xff0c;使用静态类型系统&#xff0c;并且广发用于系统软件与应用软件的开发。 C语言具有高效、灵活、功能丰富、表达力强…

EMQX vs NanoMQ | 2023 MQTT Broker 对比

引言 EMQX 和 NanoMQ 都是由全球领先的开源物联网数据基础设施软件供应商 EMQ 开发的开源 MQTT Broker。 EMQX 是一个高度可扩展的大规模分布式 MQTT Broker&#xff0c;能够将百万级的物联网设备连接到云端。NanoMQ 则是专为物联网边缘场景设计的轻量级 Broker。 本文中我们…

基于MATLAB语音信号的数字滤波

MATLAB语音信号的数字滤波 一、实验目的 掌握使用 FFT 进行信号谱分析的方法设计数字滤波器对指定的语音信号进行滤波处理 二、实验内容 导入音频信号&#xff0c;并绘制出时域波形和频域波形&#xff1a; 可以看到&#xff0c;频谱上有很多额外的噪音频率&#xff0c;在…

智加科技与舍弗勒签订商用车先进转向系统量产合作协议,将率先量产行业首个正向开发的智能重卡冗余转向

自动驾驶已经成为当前汽车行业的重要发展趋势之一。在此背景下&#xff0c;在2023上海国际汽车展期间&#xff0c;智加科技与舍弗勒集团签订量产合作协议&#xff0c;双方将在自动驾驶商用车先进转向系统领域展开合作&#xff0c;共同推动重卡自动驾驶的技术应用和创新发展。 图…

用TrackEval评测自己的数据集

TrackEval库虽然很专业&#xff0c;但是设置路径很麻烦&#xff0c;于是我自己基于TrackEval简单写了个对评测自己数据集更友好的&#xff0c;仅限2DMOT数据集&#xff0c;可以评测多类别。 项目地址&#xff08;欢迎star&#xff01;&#xff09;https://github.com/JackWoo0…