目录
一、硬件说明
开发板:ESP-WROOM-32
屏幕:中景园1.47寸lcd显示屏高清ips172x320 st7789驱动液晶屏
二、新建工程
PlatformIO的安装这里就不再赘述,网上教程一搜一堆。这里简单说一下工程的设定。
如图所示,选择ESP32 Dev Modele的板子,开发框架选择Arduino(主要是因为看的资料用的这个框架,直接复制代码方便测试😁)。
三、安装及适配TFT_eSPI库
在PlatformIO的libraries部分找到TFT_eSPI库并添加到上一部分建立的工程内。打开User_Setup.h文件,找到下列代码取消注释并修改。分别是:
- 选择驱动型号
- 选择屏幕大小
- 定义GPIO口
根据自己硬件情况修改即可。
#define ST7789_DRIVER
#define TFT_WIDTH 172 // ST7789 172 x 320
#define TFT_HEIGHT 320 // ST7789 240 x 320
#define TFT_MOSI 13
#define TFT_SCLK 14
#define TFT_CS 15 // Chip select control pin
#define TFT_DC 2 // Data Command control pin
#define TFT_RST 4 // Reset pin (could connect to RST pin)
#define TOUCH_CS 21 // Chip select pin (T_CS) of touch screen
四、安装及适配lvgl库
和第三节一样,首先在在PlatformIO的libraries内搜索找到lvgl库。PlatformIO内甚至还提供了选择版本的功能,这里选择最新版本添加到工程里即可。之后在lvgl库里把lvgl_conf_template.h复制一份并重命名为lvgl_conf.h,然后再文件里把如图所示0改成1。lvgl库已经可以添加到工程内。
五、main文件编写
#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);
}
上述章节已经完成开发环境的搭建,这里在main文件里简单写一个程序,代码也是在网上随便找的。然后编译上传到开发板,运行成功。