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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM