快速入门ESP32——移植LVGL(保姆级教程)

相关文章
快速入门ESP32——开发环境配置Arduino IDE
快速入门ESP32——开发环境配置PlatformIO IDE
快速入门ESP32—— platformIO添加开源库和自己的开发库
快速入门ESP32—— 解决platformIO添加开源库下载失败的问题
快速入门ESP32——点亮你的第一个LCD屏幕



前言

 在上一期我们移植了TFT_eSPI库成功点亮了LCD,本期就教大家怎么在platform上移植LVGL。 温馨提醒:请确保你的LCD能正常使用快速入门ESP32——点亮你的第一个LCD屏幕
 我的硬件是:ESP32S3+1.69LCD(无触摸),


一、下载LVGL库

  • 下载
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

二、修改配置

1、修改lv_conf.h配置

  • 将lv_conf_template.h文件要重命名为lv_conf.h
    在这里插入图片描述
  • 使能 v_conf.h文件
    在这里插入图片描述
  • 使能获取ESP32内部时钟,这样就不用单独提供心跳包了。(PS:在stm32中我们是通过定时器中断来提供心跳)
    在这里插入图片描述
  • 使能demo例程(在后面我们要使用到这个demo来测试)
    在这里插入图片描述

2、移动demo文件

  • 在platform中不会直接识别得到demo文件中的路径。所以我们需要将demo文件移动到src文件中
    在这里插入图片描述

3、修改LVGL Arduino 例程

  • 将arduino.ino文件全部复制到main,cpp中
    在这里插入图片描述
    在这里插入图片描述
  • 我们不能自己用这个例程,需要做一下修改

修改后main.cpp


#include <lvgl.h>
#include <TFT_eSPI.h>
#include "demos/lv_demos.h"


static const uint16_t screenWidth  = 240;//屏幕分辨率
static const uint16_t screenHeight = 280;

static lv_disp_draw_buf_t draw_buf;
static lv_color_t buf[ screenWidth * screenHeight ];

TFT_eSPI tft = TFT_eSPI(screenWidth, screenHeight); /* TFT instance */

/* Display flushing */
void my_disp_flush( lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p )
{
    uint32_t w = ( area->x2 - area->x1 + 1 );
    uint32_t h = ( area->y2 - area->y1 + 1 );

    tft.startWrite();
    tft.setAddrWindow( area->x1, area->y1, w, h );
    tft.pushColors( ( uint16_t * )&color_p->full, w * h, true );
    tft.endWrite();

    lv_disp_flush_ready( disp_drv );
}

void setup()
{
    Serial.begin( 115200 ); /* prepare for possible serial debug */
    Serial.println( "I am LVGL_Arduino" );

    lv_init();
    tft.begin();          /* TFT init */
    tft.setRotation( 3 ); /* Landscape orientation, flipped */

    lv_disp_draw_buf_init( &draw_buf, buf, NULL, screenWidth * screenHeight );
    /*Initialize the display*/
    static lv_disp_drv_t disp_drv;
    lv_disp_drv_init( &disp_drv );
    /*Change the following line to your display resolution*/
    disp_drv.hor_res = screenHeight;
    disp_drv.ver_res = screenWidth;
    disp_drv.flush_cb = my_disp_flush;
    disp_drv.draw_buf = &draw_buf;
    lv_disp_drv_register( &disp_drv );

    lv_demo_benchmark();          // OK

    Serial.println( "Setup done" );
}

void loop()
{
    lv_timer_handler(); /* let the GUI do its work */
    delay( 5 );
}


三、下载验证

  • 将程序下载到我们开发板中,查看效果
    在这里插入图片描述

四、错误修改指南

  • 要是下载到开发板中,屏幕没有一点反应。请确认移植TFT_eSPI后屏幕是否能正常显示
  • 下载若是花屏,查看分辨率是否设置正常还有缓存空间开辟是否太小
    在这里插入图片描述
    在这里插入图片描述

快速入门ESP32——移植LVGL(保姆级教程)

<think>好的,用户想在Arduino移植LVGL以支持SD文件系统,我需要根据提供的引用内容来整理步骤。首先,用户提到的引用[3]提到使用TFT_eSPI和lvgl库,并且是在PlatformIO环境下开发,这可能是个关键点。 首先,我需要确认LVGL的配置文件设置。根据引用[1],lv_conf.h需要放在Arduino的libraries目录下,所以用户需要复制并修改这个文件,启用文件系统相关的宏定义,比如LV_USE_FS_POSIX和LV_FS_POSIX_PATH。这一步是基础配置。 接下来,用户需要安装必要的库。引用[3]中提到使用TFT_eSPI和lvgl库,在PlatformIO中安装这些库应该没问题。同时,SD卡的支持可能需要额外的库,比如SD库或SdFat,这需要检查用户的硬件是否兼容。 然后是TFT_eSPI的配置,用户需要根据屏幕类型修改User_Setup.h文件,设置正确的引脚和接口类型。比如SPI或并口,这里可能需要用户根据具体硬件调整。 接下来是文件系统的初始化。用户需要初始化SD卡,可能需要使用SD.begin()或者SdFat库的函数。这部分代码需要包含在setup函数中,确保SD卡正确挂载。 在LVGL中注册文件系统驱动,用户需要调用lv_fs_drv_init和lv_fs_drv_register,设置打开、读取等函数指针。这部分可能需要参考LVGL的文档,确保文件系统接口正确对接。 最后是示例代码,用户可能需要一个简单的例子来显示SD卡中的图片或读取文件。需要确保示例代码包含必要的头文件和初始化步骤,并处理可能的错误情况,比如SD卡未检测到。 用户可能遇到的问题包括配置文件路径错误、SD卡初始化失败、文件系统驱动注册不正确等。需要提醒用户检查硬件连接、库版本以及配置宏是否正确定义。 另外,用户可能使用PlatformIO,所以需要指导如何在platformio.ini中添加依赖库,比如lvgl和TFT_eSPI。同时,引用[2]提到复制示例代码到main.cpp,并保留#include <Arduino.h>,这也需要注意。 最后,相关问题可能需要涵盖性能优化、其他文件系统支持或者硬件兼容性问题,帮助用户进一步扩展应用。</think>在Arduino框架下移植LVGL支持SD文件系统需要结合硬件驱动和软件配置,以下是具体实现步骤: ### 一、环境准备 1. 安装PlatformIO插件(推荐)或Arduino IDE 2. 在platformio.ini中添加依赖库: ```ini lib_deps = lvgl/lvgl@^8.3.10 bodmer/TFT_eSPI@^2.5.0 arduino-libraries/SD@^1.2.4 ``` ### 二、关键配置步骤 1. **LVGL配置**: - 复制`lv_conf_template.h`到项目目录,重命名为`lv_conf.h` - 启用文件系统支持: ```c #define LV_USE_FS_POSIX 1 #define LV_FS_POSIX_LETTER 'S' // SD卡挂载点标识符 #define LV_FS_POSIX_PATH "/sd" // 对应SD卡挂载路径[^3] ``` 2. **TFT_eSPI屏幕驱动配置**: - 修改`User_Setup.h`中的引脚定义: ```c #define TFT_CS 5 // 屏幕片选引脚 #define TFT_DC 2 // 数据/命令控制引脚 #define SD_CS 4 // SD卡片选引脚 ``` ### 三、SD文件系统集成 1. **硬件初始化**: ```cpp void setup() { // 初始化SPI总线 SPI.begin(SCK, MISO, MOSI, SD_CS); // 挂载SD卡 if(!SD.begin(SD_CS)){ Serial.println("SD卡初始化失败"); return; } } ``` 2. **LVGL文件系统注册**: ```cpp void lv_fs_init() { lv_fs_drv_t fs_drv; lv_fs_drv_init(&fs_drv); fs_drv.letter = 'S'; fs_drv.open_cb = sd_open_cb; fs_drv.read_cb = sd_read_cb; fs_drv.write_cb = sd_write_cb; fs_drv.seek_cb = sd_seek_cb; fs_drv.tell_cb = sd_tell_cb; lv_fs_drv_register(&fs_drv); } ``` ### 四、示例代码(显示SD卡图片) ```cpp lv_obj_t * img = lv_img_create(lv_scr_act()); lv_img_set_src(img, "S:/images/logo.bin"); // 从SD卡加载二进制图片 lv_obj_align(img, LV_ALIGN_CENTER, 0, 0); ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值