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

这篇具有很好参考价值的文章主要介绍了ESP32在ESP-IDF框架下使用LVGL(v8.3)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开发环境

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引脚 屏幕引脚
13 MOSI
14 SCK
15 CS
2 DC
EN 或 RST RST
未接 MISO
VCC BL/LED(背光)

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

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

测试

下面的程序,根据lvgl_port_esp32主程序修改而来。
打开齿轮按钮,使能一个lvgl示例,如下使能Benchmark your system,并将下面代码直接覆盖原来的主程序。如果你想测试其它示例,可以在下面中文注释下面,调用ui部分的逻辑代码即可。
ESP32在ESP-IDF框架下使用LVGL(v8.3)

#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等内容,让程序看起来比较简洁。
ESP32在ESP-IDF框架下使用LVGL(v8.3)

虽然编译通过了,但对于合宙的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、设置屏幕尺寸,具体参数如下,注意红框内的内容。
ESP32在ESP-IDF框架下使用LVGL(v8.3)
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界面相关的程序不会得到编译。
ESP32在ESP-IDF框架下使用LVGL(v8.3)
5、在main.c文件中#include<ui.h>,在上面完整代码中文注释下面一行调用ui_init()函数。
6、将SDK Configuration editor的下面选项选中。
ESP32在ESP-IDF框架下使用LVGL(v8.3)
7、编译、下载。
8、设计图、与运行结果如下所示。

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

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

ESP32在ESP-IDF框架下使用LVGL(v8.3)文章来源地址https://www.toymoban.com/news/detail-415212.html

到了这里,关于ESP32在ESP-IDF框架下使用LVGL(v8.3)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vscode+esp-idf 搭建esp32开发环境,编译信息中文乱码

    1.修改波特率 2.C:UsersAdministrator.vscodeextensionsvsciot-vscode.vscode-arduino-0.6.0-win32-x64outsrccommon  打开文件 util.js 屏蔽掉这部分的代码 、  

    2024年02月10日
    浏览(35)
  • 使用一键安装工具快速搭建 ESP-IDF 开发环境 (Windows)

    我们收到用户对 ESP-IDF SDK 软件开发环境感到搭建难、门槛高的反馈。为解决用户在此方面的问题。为此,我们推出本期教程介绍在 Windows 操作系统下使用一键安装工具快速搭建 ESP-IDF 开发环境。 您可以观看下面的教程视频,也可以阅读接下来本篇的图文教程。 【乐鑫教程】

    2024年02月09日
    浏览(64)
  • 使用 VS Code 快速搭建 ESP-IDF 开发环境 (Windows、Linux、MacOS)

    ESP-IDF 是乐鑫官方的物联网开发框架,适用于 ESP32、ESP32-S、ESP32-C 和 ESP32-H 系列 SoC。它基于 C/C++ 语言提供了一个自给自足的 SDK,方便用户在这些平台上开发通用应用程序,并集成了大量的软件组件,包括 RTOS、外设驱动程序、网络栈、多种协议实现技术以及常见应用程序的使

    2024年02月14日
    浏览(48)
  • ESP32在Arduino框架下采用SPI或8bit并口方式使用LVGL(v8.3)

    小相机,按一下能拍照,并将照片保存在sd卡中。 使用的时VSCode+PlatformIO进行开发(强力推荐,用了就回不去了),当然也可以使用ArduinoIDE进行开发。 具体怎么使用上述软件,网上有很多答案,可以自行查找。 ESP-IDF移植教程:点击这里 使用到的库: TFT_eSPI 和 lvgl 注: 8bi

    2024年02月05日
    浏览(39)
  • VSCode安装Esp-IDF开发环境(pip version)出错解决办法

    可以看出是 pip版本问题 ,所以只需要在安装程序使用pip命令之前,完成pip的升级即可。 好像下载4点几的版本会出现此警告,导致安装失败;而下面安装5.0.1版本的时候同样出现了此警告,但是能够安装成功。 在VSCode扩展中找到Esp-IDF插件,点击卸载按钮。 注意:此时并没有

    2024年02月08日
    浏览(51)
  • 【ESP32填坑日记】环境篇① 一站式VScode+ESP-IDF搭建教程,附带Python出错填坑经验

    VScode+ESP-IDF开发环境搭建教程,附带Python和Git安装教程、安装出错踩坑经验、最新版安装包,文末附带神奇的免安装版!! 巨详细一站式VScode+ESP-IDF的开发环境搭建教程,附带Python和Git安装教程、安装出错踩坑经验,以及免安装版,小白跟我无脑操作也能一次点亮,文章最后附最

    2024年02月04日
    浏览(45)
  • 巨详细一站式VScode+ESP-IDF开发环境搭建教程,附带Python和Git安装教程、安装出错踩坑经验

    VScode+ESP-IDF开发环境搭建教程,附带Python和Git安装教程、安装出错踩坑经验、最新版安装包,文末附带神奇的免安装版!! 巨详细一站式VScode+ESP-IDF的开发环境搭建教程,附带Python和Git安装教程、安装出错踩坑经验,以及免安装版,小白跟我无脑操作也能一次点亮,文章最后附最

    2024年02月16日
    浏览(51)
  • 【ESP32】Espressif-IDE及ESP-IDF安装

    1.打开ESP-IDF 编程指南 2.点击快速入门–安装–手动安装–Windows Installer–Windows Installer Download 3.点击下载Espressif-IDE 2.10.0 with ESP-IDF v5.0.2 1.双击安装 espressif-ide-setup-2.10.0-with-esp-idf-5.0.2.exe 2.点击“确定” 3.选择“我同意此协议(A)”,点击“下一步” 4.点击“下一步” 5.点击“

    2024年02月15日
    浏览(47)
  • 利用群晖服务器安装乐鑫ESP-IDF编译环境

    NAS内通过套件中心下载Docker并安装ubuntu容器 打开Docker后进入注册表搜索ubuntu20.04选择第一个就可以(其余版本未进行测试) 等待安装成功后点击映像可查看 点击启动按钮后为容器命名,点击高级设置中的存储空间可在NAS本地创建一个文件夹(便于后续搭建完成后与本地交互) 点击

    2023年04月17日
    浏览(45)
  • ESP32接入网络后,循环扫描服务器IP及端口状态信息(ESP-IDF)

            本文使用的是ESP32系列的ESP32S3设备开发,ESP-IDF框架版本为 ESP-IDF V5.1 ,在VScode下以ESP-IDF插件的形式对设备开发。 后期经过对程序的测试发现,在ESP-IDF v4.4框架下编译开发,也可以实现循环扫描功能,实现功能的程序源码Demo见文末。         在嵌入式物联网这

    2024年02月02日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包