VSCode+Platfrom io 环境下ESP32配置TFT_eSPI和lvgl驱动1.3寸TFT屏幕

本文详细记录了作者在ESP32开发板上移植TFT_eSPI库和配置LVGL库的过程,包括硬件接线、软件安装、配置步骤以及可能遇到的问题解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:本文是学习lvgl前的移植过程,用来当作笔记,复习查阅方便,如有侵权,联系删除。
另外本人也是初学者,有很多理解不透彻的或者错误的理解,希望大家多多批评指针,一起进步。

一. 硬件接线图

开发板使用的是ESP-WROOM-32,显示屏使用的是优信电子购买的1.3寸240x240的TFT七针显示屏。

接线表
显示屏ESP32
GND(接地)GND
VCC(接3.3V)VCC

SCL(SPI时钟引脚)

D18
SDA(SPI MOSI引脚)D23
RES(复位引脚)D19
DC(命令 数据选择)D5
BLK(背光)D21(实测此引脚接不接好像无所谓)

二. 下载并配置TFT_eSPI

2.1 新建ESP32项目

2.2 下载TFT_eSPI库

选择最新版本添加到项目中。

选择刚才创建的项目,点Add。

然后TFT_eSPI库就成功的下载到项目中了。

2.3 修改TFT_eSPI配置

打开项目的.pio\libdeps\esp32dev\TFT_eSPI\User_Setup.h文件。

取消注释掉自己显示屏使用的驱动,其他驱动全部注释。这里使用的是ST7789

显示屏宽高选择 240x240

根据接线表设置引脚宏定义

设置SPI速率

至此已经配置完成。

2.4 运行示例

在TFT_eSPI中提供了很多示例程序,这里选择一个时钟示例程序,由于示例程序是320x240的所以显示屏显示不全。将示例程序中的代码全部复制到main文件下,编译,下载即可。

2.5. 可能遇到的问题

1. include <spi.h>报错

在platformio.ini中添加lib_ldf_mode = deep+可解决。

三. 下载并配置lvgl

2.1 下载lvgl库

这里使用的是V8.3.9

2.2 修改lvgl配置

在lvgl库里将lvgl_conf_template.h复制一份并重命名为lvgl_conf.h。

然后打开lvgl_conf.h把如图所示0改成1。lvgl库已经配置完成。

2.3 示例程序

在main.cpp文件中复制下面的代码,编译下载,测试是否正常运行。此代码是网上找的,如有侵权,联系删除。

#include <lvgl.h>
#include <TFT_eSPI.h>
 
static lv_disp_draw_buf_t draw_buf;       //定义显示器变量
static lv_color_t buf[TFT_WIDTH * 10];    //定义刷新缓存

TFT_eSPI tft = TFT_eSPI();
 

/* Display flushing */
void my_disp_flush(lv_disp_drv_t *disp, 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); //调用区域填充颜色函数
}


void setup()
{
    tft.init();         //初始化
    tft.setRotation(0); //屏幕旋转方向(横向)
    lv_init();
    lv_disp_draw_buf_init(&draw_buf, buf, NULL, TFT_WIDTH * 10);
 
    /*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 = TFT_WIDTH;
    disp_drv.ver_res = TFT_HEIGHT;
    disp_drv.flush_cb = my_disp_flush;
    disp_drv.draw_buf = &draw_buf;
    lv_disp_drv_register(&disp_drv);
 
    /*获取LVGL版本信息*/
    String LVGL_Arduino = "Hello LVGL! ";
    LVGL_Arduino += String('V') + lv_version_major() + "." + lv_version_minor() + "." + lv_version_patch(); //版本
    lv_obj_t *label = lv_label_create(lv_scr_act());
    lv_label_set_text(label, LVGL_Arduino.c_str());
    lv_obj_align(label, LV_ALIGN_CENTER, 0, 0); //居中显示
}
 

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sffgewmdpoqwdq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值