ESP32移植LVGL8.1(基于vscode平台)

  • 1 PlatformIO下载LVGL

  在PlatformIO库中直接搜索Lvgl添加到工程

  (ps:因为这里下载的v8.1.0版本没有lv_demos,若需要运行例程可以自己再下载一个,不过注意下载完后需要把lv_demo_conf_template.h改成lv_demo_conf.h,要不然不能编译)

 

  • 2 修改文件名

  lvgl_config_template.h修改为lvgl_config.h

  #if 0 改为1

  这时候就可以编译了(否则编译不了)

 

  • 3 移植显示驱动

  首先添加TFT_eSPI

 

  

  定义彩屏引脚(在User_Setup.h文件里)

 

  剩下的spi引脚是esp32默认的

  这里注意如果不接RST将其设为-1、此时一定要把屏幕rst引脚接到高电平3.3V、否则不接为低电平、会一直保持复位状态、屏幕不亮

  配置文件修改

 

  配置文件修改

  在User_Setup_Select.h文件中选择取消注释你需要的屏幕型号驱动文件

   

 

  修改此处(我这个彩屏需要、别的也许不需要修改)

 

  (ps:LVGL的长宽设置是横着来看的,原本TFT库的是竖着来看的,所以这里长宽需要反过来,当然视具体情况而定)

 

  • 4 移植驱动

  参考arduino的例程 位置:\lvgl\examples\arduino\LVGL_Arduino

  7735没有触屏,测试代码如下:

 1 #include <lvgl.h>
 2 #include <TFT_eSPI.h>
 3 
 4 static lv_disp_draw_buf_t draw_buf;    //定义显示器变量
 5 static lv_color_t buf[TFT_WIDTH * 10]; //定义刷新缓存
 6 
 7 TFT_eSPI tft = TFT_eSPI();
 8 
 9 /* Display flushing */
10 void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p)
11 {
12     uint32_t w = (area->x2 - area->x1 + 1);
13     uint32_t h = (area->y2 - area->y1 + 1);
14 
15     tft.startWrite();                                        //使能写功能
16     tft.setAddrWindow(area->x1, area->y1, w, h);             //设置填充区域
17     tft.pushColors((uint16_t *)&color_p->full, w * h, true); //写入颜色缓存和缓存大小
18     tft.endWrite();                                          //关闭写功能
19 
20     lv_disp_flush_ready(disp); //调用区域填充颜色函数
21 }
22 
23 void setup()
24 {
25     tft.init(); //初始化
26     tft.setRotation(3);
27     lv_init();
28     lv_disp_draw_buf_init(&draw_buf, buf, NULL, TFT_WIDTH * 10);
29 
30     /*Initialize the display*/
31     static lv_disp_drv_t disp_drv;
32     lv_disp_drv_init(&disp_drv);
33     /*Change the following line to your display resolution*/
34     disp_drv.hor_res = TFT_WIDTH;
35     disp_drv.ver_res = TFT_HEIGHT;
36     disp_drv.flush_cb = my_disp_flush;
37     disp_drv.draw_buf = &draw_buf;
38     lv_disp_drv_register(&disp_drv);
39 
40     lv_obj_t *label = lv_label_create(lv_scr_act());
41     lv_label_set_text(label, "Hello world!");
42     lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
43 }
44 
45 void loop()
46 {
47 
48     lv_timer_handler(); /* let the GUI do its work */
49     delay(5);
50 }
View Code

 

posted @ 2022-02-25 14:54  ArsSama  阅读(1860)  评论(0编辑  收藏  举报