深圳晶彩智能ESP32-2432S028R概述:
深圳晶彩智能出品ESP32-32432S028R為2.8寸彩色屏采用分辨率320x240彩色液晶屏,驅動芯片是ILI9431。板載樂鑫公司出品ESP-WROOM-32,Flash 4M。型號尾部“R”標識電阻膜的感壓式觸摸屏,驅動芯片是XPT2046。
他的屏幕驅動芯片ILI9431和電阻觸碰芯片XPT2046沒有采用共用SPI的接法,就不能直接使用TFT_eSPI庫驅動,電阻觸碰芯片采用第三方XPT2046_Touchscreen庫。
這款產品發布后,由于其制作精良價格優惠,受到了國際玩家的普遍追捧,各位大蝦稱其為“Cheap Yellow Display”,簡稱CYD。
這是一個能干活的開發板,用于為您的物聯網項目構建彩色顯示屏,帶有TFT屏幕的單獨ESP32板更方便和實用,明顯越升二次開發產品的格調。
完美得到LVGL9和lovyanGFX庫支持
LVGL是最流行的免費和開源嵌入式圖形庫,可為任何MCU, MPU和顯示類型創建漂亮的ui。
從消費電子產品到工業自動化,任何應用程序都可以利用LVGL的30多個內置小部件,100多個樣式屬性,web啟發的布局和支持多種語言的排版系統。
LovyanGFX 是一個高效且功能豐富的圖形庫,專為連接到ESP32、ESP8266和ATSAMD51的顯示器設計。它兼容多種通訊協議,如SPI、I2C和8位并行接口,適用于各種LCD、OLED和EPD顯示屏。這個庫不僅提供了與流行的AdafruitGFX和TFT_eSPI類似的功能,而且在速度和特性上有了顯著提升,讓開發變得更加便捷。
LGFX_AUTODETECT類中自動識別多款“Cheap Yellow Display”,其中就包括ESP32-2432S028R,本示例就結合這兩個庫,使用Arduino IDE的方法,用最快捷的方法讓各位玩家來適配LVGL9,直接在液晶屏上操作各種組建,把構想變成實景圖。
Arduino IDE SDK和LVGL9,LovyanGFX的版本
Arduino IDE SDK 3.0.2版本
lvgl 9.1.0版本
LovyanGFX 1.1.16版本
配置LVGL9庫
1,修改 lv_conf.h
LVGL 有一個名為 lv_conf.h 的配置文件。當安裝 LVGL 時,請遵循以下配置步驟:
進入已安裝的 Arduino 庫目錄。
進入 lvgl 并復制 lv_conf_template.h 到Arduino 庫目錄中,該文件應位于 lvgl 庫同級文件夾。然后重命名為 lv_conf.h 。
下圖可見 lv_conf.h 的布局:
用Notepad++對 lv_conf.h 修改:
默認設置是“0”,設置為“1”以啟用內容。
第15行 #if 1
如果lvgl設置在屏幕上顯示當前幀率(FPS):
第751行 #define LV_USE_SYSMON 1
第764行 #define LV_USE_PERF_MONITOR 1
本示例全面演示LVGL9的examples,widgets和demos,需要分別置1啟用。譬如允許 examples構建示例:
第929行 #define LV_BUILD_EXAMPLES 1
2,移動examples和demos庫的位置。
將Arduino\libraries\lvgl里的examples和demos庫拖曳到src文件夾里面:
3,修改lv_examples.h
用Notepad++對C:\Users\用戶名\Documents\Arduino\libraries\lvgl\src\examples\lv_examples.h修改為:
第16行 #include "lvgl.h"
用Notepad++對C:\Users\用戶名\Documents\Arduino\libraries\lvgl\src\demos\lv_demos.h修改為:
第16行 #include "lvgl.h"
用最簡單的程序展示LVGL9的絢麗功能
#include <SPI.h> // SPI Library
#include <lvgl.h> // LVGL9
#define LGFX_AUTODETECT
#include <LovyanGFX.hpp>static const uint32_t screenWidth = 320; // LCD寬度
static const uint32_t screenHeight = 240; // LCD高度
static uint8_t draw_buf[screenWidth * screenHeight / 10]; // 緩沖器
static ulong lvgl_tick_millis = millis(); // tick#include <examples\lv_examples.h> // examples
//#include <examples\widgets\lv_example_widgets.h> // widgets
//#include <demos\lv_demos.h> // demosLGFX tft;void init_display() {static lv_display_t *disp;disp = lv_display_create(screenWidth, screenHeight);lv_display_set_flush_cb(disp, flush);lv_display_set_buffers(disp, draw_buf, NULL, sizeof(draw_buf),LV_DISPLAY_RENDER_MODE_PARTIAL);
}void flush(lv_display_t *disp, const lv_area_t *area, uint8_t *px_map) {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 *)px_map, w * h, true);tft.writePixelsDMA((lgfx::rgb565_t *)px_map, w * h); // LGFXtft.endWrite();lv_display_flush_ready(disp);
}void init_touch() {lv_indev_t *indev = lv_indev_create();lv_indev_set_type(indev, LV_INDEV_TYPE_POINTER); lv_indev_set_read_cb(indev, my_touchpad_read);
}void my_touchpad_read(lv_indev_t *indev, lv_indev_data_t *data) {uint16_t touchX, touchY;bool touched = tft.getTouch(&touchX, &touchY);if (!touched) {data->state = LV_INDEV_STATE_REL;return;}if (touchX < screenWidth && touchY < screenWidth) {data->state = LV_INDEV_STATE_PR;data->point.x = touchX;data->point.y = touchY; }
}void setup() {tft.begin();tft.setRotation(1);tft.fillScreen(TFT_BLUE);lv_init(); // lvgl 初始化init_display(); // 顯示和緩沖初始化init_touch(); // 觸碰初始化// demos ------------------------------------------------------------//lv_demo_widgets(); // 34% memory used//lv_demo_benchmark(); // 38% memory used//lv_demo_keypad_encoder(); // 24% memory used//lv_demo_music(); // 56% memory used//get_started -------------------------------------------------------//lv_example_get_started_3(); // 2 button//lv_example_get_started_1(); // Hello World//lv_example_get_started_2(); // button couter//lv_example_get_started_4(); // Slider//others ------------------------------------------------------------//lv_example_observer_1(); // Slider//lv_example_observer_2(); // logged out//lv_example_observer_3(); // time & setlv_example_observer_4(); // Slider & Button//lv_example_observer_5(); // update//lv_example_observer_6(); // 10 button//widgets -----------------------------------------------------------//lv_example_image_3();//lv_example_animimg_1();//lv_example_arc_1();//lv_example_arc_2();//lv_example_bar_1();//lv_example_bar_2();//lv_example_bar_3();//lv_example_bar_4();//lv_example_bar_5();//lv_example_bar_6();//lv_example_bar_7();//lv_example_button_1();//lv_example_button_2(); // 24% memory used//lv_example_button_3();//lv_example_buttonmatrix_1();//lv_example_buttonmatrix_2();//lv_example_buttonmatrix_3();//lv_example_calendar_1();//lv_example_canvas_1 fail//lv_example_canvas_2();//lv_example_canvas_3();//lv_example_canvas_4();//lv_example_canvas_5();//lv_example_canvas_6();//lv_example_canvas_7();//lv_example_canvas_8 fail//lv_example_chart_1();//lv_example_chart_2();//lv_example_chart_3();//lv_example_chart_4();//lv_example_chart_5();//lv_example_chart_6();//lv_example_chart_7();//lv_example_chart_8();//lv_example_checkbox_1();//lv_example_checkbox_2();//lv_example_dropdown_1();//lv_example_dropdown_2();//lv_example_dropdown_3();//lv_example_image_1();//lv_example_image_2();//lv_example_image_4();//lv_example_imagebutton_1_fail//lv_example_keyboard_1();//lv_example_keyboard_2();//lv_example_label_1();//lv_example_label_2();//lv_example_label_3 fail//lv_example_label_4 fail//lv_example_label_5();//lv_example_led_1//lv_example_line_1//lv_example_menu_1//lv_example_menu_2//lv_example_menu_3//lv_example_menu_4//lv_example_menu_5//lv_example_msgbox_1//lv_example_obj_1//lv_example_obj_2//lv_example_roller_1//lv_example_roller_2 fail//lv_example_roller_3 fail//lv_example_scale_1();//lv_example_scale_2();//lv_example_scale_3();//lv_example_scale_4();//lv_example_scale_5();//lv_example_slider_1();//lv_example_slider_2();//lv_example_slider_3();//lv_example_slider_4();//lv_example_span_1();//lv_example_spinbox_1();//lv_example_spinner_1();//lv_example_switch_1();//lv_example_table_1();//lv_example_table_2();//lv_example_tabview_1();//lv_example_tabview_2();//lv_example_textarea_1();//lv_example_textarea_2();//lv_example_textarea_3();//lv_example_tileview_1();//lv_example_tileview_2 fail//lv_example_win_1();
}void loop() {lv_task_handler();unsigned long tick_millis = millis() - lvgl_tick_millis;lvgl_tick_millis = millis();lv_tick_inc(tick_millis);yield();delay(5);
}
多選下拉列表效果展示:
【深圳晶彩智能ESP32-2432S028R實時觀察LVGL9效果】
https://www.bilibili.com/video/BV1tTa3eSExr?vd_source=7350ed30aaee73c2cb1cac26a00a8b30