ESP32-S3-Touch-LCD-4.3B运行PlatformIO LVGL8.4
主要的库:
https://github.com/esp-arduino-libs/ESP32_Display_Panel
步骤:
1,先git clone https://github.com/esp-arduino-libs/ESP32\_Display\_Panel.git
2,然后复制 文件夹ESP32_Display_Panel\examples\PlatformIO到指定位置(我们的工程)
3,使用vscode+pio打开PlatformIO文件夹
4,pio会自动下载lvgl和ESP32_Display_Panel库,ESP32_IO_Expander库
可以修改lvgl为8.4,当前9.0不成功,已测试
lib_deps =
https://github.com/lvgl/lvgl.git#release/v8.4
5,修改文件ESP_Panel_Board_Custom.h
``/* * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ #pragma once // *INDENT-OFF* #define I2C_MASTER_SCL_IO 9 /*!< GPIO number used for I2C master clock */ #define I2C_MASTER_SDA_IO 8 /*!< GPIO number used for I2C master data */ #define I2C_MASTER_NUM I2C_NUM_0 /*!< I2C master i2c port number, the number of i2c peripheral interfaces available will depend on the chip */ #define I2C_MASTER_FREQ_HZ 400000 /*!< I2C master clock frequency */ #define I2C_MASTER_TX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */ #define I2C_MASTER_RX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */ #define I2C_MASTER_TIMEOUT_MS 1000 #define GPIO_INPUT_IO_4 4 #define GPIO_INPUT_PIN_SEL 1ULL<<GPIO_INPUT_IO_4 /* Set to 1 if using a custom board */ #define ESP_PANEL_USE_CUSTOM_BOARD (1) // 0/1 #if ESP_PANEL_USE_CUSTOM_BOARD //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////// Please update the following macros to configure the LCD panel ///////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* Set to 1 when using an LCD panel */ #define ESP_PANEL_USE_LCD (1) // 0/1 #if ESP_PANEL_USE_LCD /** * LCD Controller Name. Choose one of the following: * - EK9716B * - GC9A01, GC9B71, GC9503 * - ILI9341 * - NV3022B * - SH8601 * - SPD2010 * - ST7262, ST7701, ST7789, ST7796, ST77916, ST77922 */ #define ESP_PANEL_LCD_NAME ST7262 /* LCD resolution in pixels */ #define ESP_PANEL_LCD_WIDTH (800) #define ESP_PANEL_LCD_HEIGHT (480) /* LCD Bus Settings */ /** * If set to 1, the bus will skip to initialize the corresponding host. Users need to initialize the host in advance. * It is useful if other devices use the same host. Please ensure that the host is initialized only once. * * Set to 1 if only the RGB interface is used without the 3-wire SPI interface, */ #define ESP_PANEL_LCD_BUS_SKIP_INIT_HOST (1) // 0/1 /** * LCD Bus Type. Choose one of the following: * - ESP_PANEL_BUS_TYPE_I2C (not ready) * - ESP_PANEL_BUS_TYPE_SPI * - ESP_PANEL_BUS_TYPE_QSPI * - ESP_PANEL_BUS_TYPE_I80 (not ready) * - ESP_PANEL_BUS_TYPE_RGB (only supported for ESP32-S3) */ #define ESP_PANEL_LCD_BUS_TYPE (ESP_PANEL_BUS_TYPE_RGB) /** * LCD Bus Parameters. * * Please refer to https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/peripherals/lcd.html and * https://docs.espressif.com/projects/esp-iot-solution/en/latest/display/lcd/index.html for more details. * */ #if ESP_PANEL_LCD_BUS_TYPE == ESP_PANEL_BUS_TYPE_SPI #define ESP_PANEL_LCD_BUS_HOST_ID (1) // Typically set to 1 #define ESP_PANEL_LCD_SPI_IO_CS (5) #if !ESP_PANEL_LCD_BUS_SKIP_INIT_HOST #define ESP_PANEL_LCD_SPI_IO_SCK (7) #define ESP_PANEL_LCD_SPI_IO_MOSI (6) #define ESP_PANEL_LCD_SPI_IO_MISO (-1) // -1 if not used #endif #define ESP_PANEL_LCD_SPI_IO_DC (4) #define ESP_PANEL_LCD_SPI_MODE (0) // 0/1/2/3, typically set to 0 #define ESP_PANEL_LCD_SPI_CLK_HZ (40 * 1000 * 1000) // Should be an integer divisor of 80M, typically set to 40M #define ESP_PANEL_LCD_SPI_TRANS_QUEUE_SZ (10) // Typically set to 10 #define ESP_PANEL_LCD_SPI_CMD_BITS (8) // Typically set to 8 #define ESP_PANEL_LCD_SPI_PARAM_BITS (8) // Typically set to 8 #elif ESP_PANEL_LCD_BUS_TYPE == ESP_PANEL_BUS_TYPE_QSPI #define ESP_PANEL_LCD_BUS_HOST_ID (1) // Typically set to 1 #define ESP_PANEL_LCD_SPI_IO_CS (5) #if !ESP_PANEL_LCD_BUS_SKIP_INIT_HOST #define ESP_PANEL_LCD_SPI_IO_SCK (9) #define ESP_PANEL_LCD_SPI_IO_DATA0 (10) #define ESP_PANEL_LCD_SPI_IO_DATA1 (11) #define ESP_PANEL_LCD_SPI_IO_DATA2 (12) #define ESP_PANEL_LCD_SPI_IO_DATA3 (13) #endif #define ESP_PANEL_LCD_SPI_MODE (0) // 0/1/2/3, typically set to 0 #define ESP_PANEL_LCD_SPI_CLK_HZ (40 * 1000 * 1000) // Should be an integer divisor of 80M, typically set to 40M #define ESP_PANEL_LCD_SPI_TRANS_QUEUE_SZ (10) // Typically set to 10 #define ESP_PANEL_LCD_SPI_CMD_BITS (32) // Typically set to 32 #define ESP_PANEL_LCD_SPI_PARAM_BITS (8) // Typically set to 8 #elif ESP_PANEL_LCD_BUS_TYPE == ESP_PANEL_BUS_TYPE_RGB #define ESP_PANEL_LCD_RGB_CLK_HZ (16 * 1000 * 1000) #define ESP_PANEL_LCD_RGB_HPW (4) #define ESP_PANEL_LCD_RGB_HBP (8) #define ESP_PANEL_LCD_RGB_HFP (8) #define ESP_PANEL_LCD_RGB_VPW (4) #define ESP_PANEL_LCD_RGB_VBP (16) #define ESP_PANEL_LCD_RGB_VFP (16) #define ESP_PANEL_LCD_RGB_PCLK_ACTIVE_NEG (1) // 0: rising edge, 1: falling edge // | 8-bit RGB888 | 16-bit RGB565 | // |--------------|---------------| #define ESP_PANEL_LCD_RGB_DATA_WIDTH (16) // | 8 | 16 | #define ESP_PANEL_LCD_RGB_PIXEL_BITS (16) // | 24 | 16 | #define ESP_PANEL_LCD_RGB_FRAME_BUF_NUM (1) // 1/2/3 #define ESP_PANEL_LCD_RGB_BOUNCE_BUF_SIZE (0) // Bounce buffer size in bytes. This function is used to avoid screen drift. // To enable the bounce buffer, set it to a non-zero value. Typically set to `ESP_PANEL_LCD_WIDTH * 10` // The size of the Bounce Buffer must satisfy `width_of_lcd * height_of_lcd = size_of_buffer * N`, // where N is an even number. #define ESP_PANEL_LCD_RGB_IO_HSYNC (46) #define ESP_PANEL_LCD_RGB_IO_VSYNC (3) #define ESP_PANEL_LCD_RGB_IO_DE (5) // -1 if not used #define ESP_PANEL_LCD_RGB_IO_PCLK (7) #define ESP_PANEL_LCD_RGB_IO_DISP (-1) // -1 if not used // | RGB565 | RGB666 | RGB888 | // |--------|--------|--------| #define ESP_PANEL_LCD_RGB_IO_DATA0 (14) // | B0 | B0-1 | B0-3 | #define ESP_PANEL_LCD_RGB_IO_DATA1 (38) // | B1 | B2 | B4 | #define ESP_PANEL_LCD_RGB_IO_DATA2 (18) // | B2 | B3 | B5 | #define ESP_PANEL_LCD_RGB_IO_DATA3 (17) // | B3 | B4 | B6 | #define ESP_PANEL_LCD_RGB_IO_DATA4 (10) // | B4 | B5 | B7 | #define ESP_PANEL_LCD_RGB_IO_DATA5 (39) // | G0 | G0 | G0-2 | #define ESP_PANEL_LCD_RGB_IO_DATA6 (0) // | G1 | G1 | G3 | #define ESP_PANEL_LCD_RGB_IO_DATA7 (45) // | G2 | G2 | G4 | #if ESP_PANEL_LCD_RGB_DATA_WIDTH > 8 #define ESP_PANEL_LCD_RGB_IO_DATA8 (48) // | G3 | G3 | G5 | #define ESP_PANEL_LCD_RGB_IO_DATA9 (47) // | G4 | G4 | G6 | #define ESP_PANEL_LCD_RGB_IO_DATA10 (11) // | G5 | G5 | G7 | #define ESP_PANEL_LCD_RGB_IO_DATA11 (1) // | R0 | R0-1 | R0-3 | #define ESP_PANEL_LCD_RGB_IO_DATA12 (2) // | R1 | R2 | R4 | #define ESP_PANEL_LCD_RGB_IO_DATA13 (42) // | R2 | R3 | R5 | #define ESP_PANEL_LCD_RGB_IO_DATA14 (41) // | R3 | R4 | R6 | #define ESP_PANEL_LCD_RGB_IO_DATA15 (40) // | R4 | R5 | R7 | #endif #if !ESP_PANEL_LCD_BUS_SKIP_INIT_HOST #define ESP_PANEL_LCD_3WIRE_SPI_IO_CS (0) #define ESP_PANEL_LCD_3WIRE_SPI_IO_SCK (1) #define ESP_PANEL_LCD_3WIRE_SPI_IO_SDA (2) #define ESP_PANEL_LCD_3WIRE_SPI_CS_USE_EXPNADER (0) // 0/1 #define ESP_PANEL_LCD_3WIRE_SPI_SCL_USE_EXPNADER (0) // 0/1 #define ESP_PANEL_LCD_3WIRE_SPI_SDA_USE_EXPNADER (0) // 0/1 #define ESP_PANEL_LCD_3WIRE_SPI_SCL_ACTIVE_EDGE (0) // 0: rising edge, 1: falling edge #define ESP_PANEL_LCD_FLAGS_AUTO_DEL_PANEL_IO (0) // Delete the panel IO instance automatically if set to 1. // If the 3-wire SPI pins are sharing other pins of the RGB interface to save GPIOs, // Please set it to 1 to release the panel IO and its pins (except CS signal). #define ESP_PANEL_LCD_FLAGS_MIRROR_BY_CMD (!ESP_PANEL_LCD_FLAGS_AUTO_DEL_PANEL_IO) // The `mirror()` function will be implemented by LCD command if set to 1. #endif #else #error "The function is not ready and will be implemented in the future." #endif /* ESP_PANEL_LCD_BUS_TYPE */ /** * LCD Vendor Initialization Commands. * * Vendor specific initialization can be different between manufacturers, should consult the LCD supplier for * initialization sequence code. Please uncomment and change the following macro definitions. Otherwise, the LCD driver * will use the default initialization sequence code. * * There are two formats for the sequence code: * 1. Raw data: {command, (uint8_t []){ data0, data1, ... }, data_size, delay_ms} * 2. Formater: ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(delay_ms, command, { data0, data1, ... }) and * ESP_PANEL_LCD_CMD_WITH_NONE_PARAM(delay_ms, command) */ // #define ESP_PANEL_LCD_VENDOR_INIT_CMD() \ // { \ // {0xFF, (uint8_t []){0x77, 0x01, 0x00, 0x00, 0x10}, 5, 0}, \ // {0xC0, (uint8_t []){0x3B, 0x00}, 2, 0}, \ // {0xC1, (uint8_t []){0x0D, 0x02}, 2, 0}, \ // {0x29, (uint8_t []){0x00}, 0, 120}, \ // or \ // ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xFF, {0x77, 0x01, 0x00, 0x00, 0x10}), \ // ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xC0, {0x3B, 0x00}), \ // ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xC1, {0x0D, 0x02}), \ // ESP_PANEL_LCD_CMD_WITH_NONE_PARAM(120, 0x29), \ // } /* LCD Color Settings */ /* LCD color depth in bits */ #define ESP_PANEL_LCD_COLOR_BITS (16) // 8/16/18/24 /* * LCD RGB Element Order. Choose one of the following: * - 0: RGB * - 1: BGR */ #define ESP_PANEL_LCD_BGR_ORDER (0) // 0/1 #define ESP_PANEL_LCD_INEVRT_COLOR (0) // 0/1 /* LCD Transformation Flags */ #define ESP_PANEL_LCD_SWAP_XY (0) // 0/1 #define ESP_PANEL_LCD_MIRROR_X (0) // 0/1 #define ESP_PANEL_LCD_MIRROR_Y (0) // 0/1 /* LCD Other Settings */ /* Reset pin */ #define ESP_PANEL_LCD_IO_RST (-1) // IO num of RESET pin, set to -1 if not use #define ESP_PANEL_LCD_RST_LEVEL (0) // Active level. 0: low level, 1: high level #endif /* ESP_PANEL_USE_LCD */ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////// Please update the following macros to configure the touch panel /////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* Set to 1 when using an touch panel */ #define ESP_PANEL_USE_TOUCH (1) // 0/1 #if ESP_PANEL_USE_TOUCH /** * Touch controller name. Choose one of the following: * - CST816S * - FT5x06 * - GT911, GT1151 * - ST1633, ST7123 * - TT21100 * - XPT2046 */ #define ESP_PANEL_TOUCH_NAME GT911 /* Touch resolution in pixels */ #define ESP_PANEL_TOUCH_H_RES (ESP_PANEL_LCD_WIDTH) // Typically set to the same value as the width of LCD #define ESP_PANEL_TOUCH_V_RES (ESP_PANEL_LCD_HEIGHT) // Typically set to the same value as the height of LCD /* Touch Panel Bus Settings */ /** * If set to 1, the bus will skip to initialize the corresponding host. Users need to initialize the host in advance. * It is useful if other devices use the same host. Please ensure that the host is initialized only once. */ #define ESP_PANEL_TOUCH_BUS_SKIP_INIT_HOST (1) // 0/1 /** * Touch panel bus type. Choose one of the following: * - ESP_PANEL_BUS_TYPE_I2C * - ESP_PANEL_BUS_TYPE_SPI */ #define ESP_PANEL_TOUCH_BUS_TYPE (ESP_PANEL_BUS_TYPE_I2C) /* Touch panel bus parameters */ #if ESP_PANEL_TOUCH_BUS_TYPE == ESP_PANEL_BUS_TYPE_I2C #define ESP_PANEL_TOUCH_BUS_HOST_ID (0) // Typically set to 0 #define ESP_PANEL_TOUCH_I2C_ADDRESS (0) // Typically set to 0 to use the default address. // - For touchs with only one address, set to 0 // - For touchs with multiple addresses, set to 0 or the address // Like GT911, there are two addresses: 0x5D(default) and 0x14 #if !ESP_PANEL_TOUCH_BUS_SKIP_INIT_HOST #define ESP_PANEL_TOUCH_I2C_CLK_HZ (400 * 1000) // Typically set to 400K #define ESP_PANEL_TOUCH_I2C_SCL_PULLUP (1) // 0/1 #define ESP_PANEL_TOUCH_I2C_SDA_PULLUP (1) // 0/1 #define ESP_PANEL_TOUCH_I2C_IO_SCL (9) #define ESP_PANEL_TOUCH_I2C_IO_SDA (8) #endif #elif ESP_PANEL_TOUCH_BUS_TYPE == ESP_PANEL_BUS_TYPE_SPI #define ESP_PANEL_TOUCH_BUS_HOST_ID (1) // Typically set to 1 #define ESP_PANEL_TOUCH_SPI_IO_CS (5) #if !ESP_PANEL_TOUCH_BUS_SKIP_INIT_HOST #define ESP_PANEL_TOUCH_SPI_IO_SCK (7) #define ESP_PANEL_TOUCH_SPI_IO_MOSI (6) #define ESP_PANEL_TOUCH_SPI_IO_MISO (9) #endif #define ESP_PANEL_TOUCH_SPI_CLK_HZ (1 * 1000 * 1000) // Should be an integer divisor of 80M, typically set to 1M #else #error "The function is not ready and will be implemented in the future." #endif /* ESP_PANEL_TOUCH_BUS_TYPE */ /* Touch Transformation Flags */ #define ESP_PANEL_TOUCH_SWAP_XY (0) // 0/1 #define ESP_PANEL_TOUCH_MIRROR_X (0) // 0/1 #define ESP_PANEL_TOUCH_MIRROR_Y (0) // 0/1 /* Touch Other Settings */ /* Reset pin */ #define ESP_PANEL_TOUCH_IO_RST (-1) // IO num of RESET pin, set to -1 if not use // For GT911, the RST pin is also used to configure the I2C address #define ESP_PANEL_TOUCH_RST_LEVEL (0) // Active level. 0: low level, 1: high level /* Interrupt pin */ #define ESP_PANEL_TOUCH_IO_INT (-1) // IO num of INT pin, set to -1 if not use // For GT911, the INT pin is also used to configure the I2C address #define ESP_PANEL_TOUCH_INT_LEVEL (0) // Active level. 0: low level, 1: high level #endif /* ESP_PANEL_USE_TOUCH */ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////// Please update the following macros to configure the backlight //////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #define ESP_PANEL_USE_BACKLIGHT (0) // 0/1 #if ESP_PANEL_USE_BACKLIGHT /* Backlight pin */ #define ESP_PANEL_BACKLIGHT_IO (45) // IO num of backlight pin #define ESP_PANEL_BACKLIGHT_ON_LEVEL (1) // 0: low level, 1: high level /* Set to 1 if you want to turn off the backlight after initializing the panel; otherwise, set it to turn on */ #define ESP_PANEL_BACKLIGHT_IDLE_OFF (0) // 0: on, 1: off /* Set to 1 if use PWM for brightness control */ #define ESP_PANEL_LCD_BL_USE_PWM (1) // 0/1 #endif /* ESP_PANEL_USE_BACKLIGHT */ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////// Please update the following macros to configure the IO expander ////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* Set to 0 if not using IO Expander */ #define ESP_PANEL_USE_EXPANDER (0) // 0/1 #if ESP_PANEL_USE_EXPANDER /** * IO expander name. Choose one of the following: * - CH422G * - HT8574 * - TCA95xx_8bit * - TCA95xx_16bit */ #define ESP_PANEL_EXPANDER_NAME CH422G /* IO expander Settings */ /** * If set to 1, the driver will skip to initialize the corresponding host. Users need to initialize the host in advance. * It is useful if other devices use the same host. Please ensure that the host is initialized only once. */ #define ESP_PANEL_EXPANDER_SKIP_INIT_HOST (1) // 0/1 /* IO expander parameters */ #define ESP_PANEL_EXPANDER_HOST_ID (0) // Typically set to 0 #define ESP_PANEL_EXPANDER_I2C_ADDRESS (0x20) // The actual I2C address. Even for the same model of IC, // the I2C address may be different, and confirmation based on // the actual hardware connection is required #if !ESP_PANEL_EXPANDER_SKIP_INIT_HOST #define ESP_PANEL_EXPANDER_I2C_CLK_HZ (400 * 1000) // Typically set to 400K #define ESP_PANEL_EXPANDER_I2C_SCL_PULLUP (1) // 0/1 #define ESP_PANEL_EXPANDER_I2C_SDA_PULLUP (1) // 0/1 #define ESP_PANEL_EXPANDER_I2C_IO_SCL (18) #define ESP_PANEL_EXPANDER_I2C_IO_SDA (8) #endif #endif /* ESP_PANEL_USE_EXPANDER */ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////// Please utilize the following macros to execute any additional code if required. ////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // #define ESP_PANEL_BEGIN_START_FUNCTION( panel ) // #define ESP_PANEL_BEGIN_EXPANDER_START_FUNCTION( panel ) // #define ESP_PANEL_BEGIN_EXPANDER_END_FUNCTION( panel ) // #define ESP_PANEL_BEGIN_LCD_START_FUNCTION( panel ) // #define ESP_PANEL_BEGIN_LCD_END_FUNCTION( panel ) // #define ESP_PANEL_BEGIN_TOUCH_START_FUNCTION( panel ) // #define ESP_PANEL_BEGIN_TOUCH_END_FUNCTION( panel ) // #define ESP_PANEL_BEGIN_BACKLIGHT_START_FUNCTION( panel ) // #define ESP_PANEL_BEGIN_BACKLIGHT_END_FUNCTION( panel ) // #define ESP_PANEL_BEGIN_END_FUNCTION( panel ) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////// File Version /////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /** * Do not change the following versions, they are used to check if the configurations in this file are compatible with * the current version of `ESP_Panel_Board_Custom.h` in the library. The detailed rules are as follows: * * 1. If the major version is not consistent, then the configurations in this file are incompatible with the library * and must be replaced with the file from the library. * 2. If the minor version is not consistent, this file might be missing some new configurations, which will be set to * default values. It is recommended to replace it with the file from the library. * 3. Even if the patch version is not consistent, it will not affect normal functionality. * */ #define ESP_PANEL_BOARD_CUSTOM_FILE_VERSION_MAJOR 0 #define ESP_PANEL_BOARD_CUSTOM_FILE_VERSION_MINOR 2 #define ESP_PANEL_BOARD_CUSTOM_FILE_VERSION_PATCH 2 #endif /* ESP_PANEL_USE_CUSTOM_BOARD */ // *INDENT-OFF*``
6,关闭ESP_Panel_Board_Supported.h文件里面的宏定义,因为我们使用了自定义的板子
7,ESP_Panel_Conf.h文件保持默认
8,lvgl_port_v8.h文件保持默认
9,APP.cpp里面如下
``/** * # LVGL Porting Example * * The example demonstrates how to port LVGL (v8.3.x). And for RGB LCD, it can enable the avoid tearing fucntion. * * ## How to Use * * To use this example, please firstly install the following dependent libraries: * * - lvgl (v8.3.x) * * Then follow the steps below to configure: * * 1. For **ESP32_Display_Panel**: * * - [Configure drivers](https://github.com/esp-arduino-libs/ESP32_Display_Panel#configuring-drivers) if needed. * - If using a supported development board, follow the [steps](https://github.com/esp-arduino-libs/ESP32_Display_Panel#using-supported-development-boards) to configure it. * - If using a custom board, follow the [steps](https://github.com/esp-arduino-libs/ESP32_Display_Panel#using-custom-development-boards) to configure it. * * 2. Follow the [steps](https://github.com/esp-arduino-libs/ESP32_Display_Panel#configuring-lvgl) to configure the **lvgl**. * 3. Modify the macros in the [lvgl_port_v8.h](./lvgl_port_v8.h) file to configure the LVGL porting parameters. * 4. Navigate to the `Tools` menu in the Arduino IDE to choose a ESP board and configure its parameters, please refter to [Configuring Supported Development Boards](https://github.com/esp-arduino-libs/ESP32_Display_Panel#configuring-supported-development-boards) * 5. Verify and upload the example to your ESP board. * * ## Serial Output * * ```bash * ... * LVGL porting example start * Initialize panel device * Initialize LVGL * Create UI * LVGL porting example end * IDLE loop * IDLE loop * ... * ``` * * ## Troubleshooting * * Please check the [FAQ](https://github.com/esp-arduino-libs/ESP32_Display_Panel#faq) first to see if the same question exists. If not, please create a [Github issue](https://github.com/esp-arduino-libs/ESP32_Display_Panel/issues). We will get back to you as soon as possible. * */ #include <Arduino.h> #include <ESP_Panel_Library.h> #include <ESP_IOExpander_Library.h> #include <lvgl.h> #include "lvgl_port_v8.h" // #include "demos/lv_demos.h" // Extend IO Pin define #define TP_RST 1 #define LCD_BL 2 #define LCD_RST 3 #define SD_CS 4 #define USB_SEL 5 /** /* To use the built-in examples and demos of LVGL uncomment the includes below respectively. * You also need to copy `lvgl/examples` to `lvgl/src/examples`. Similarly for the demos `lvgl/demos` to `lvgl/src/demos`. */ // #include <demos/lv_demos.h> // #include <examples/lv_examples.h> static void event_handler(lv_event_t * e) { lv_event_code_t code = lv_event_get_code(e); if(code == LV_EVENT_CLICKED) { LV_LOG_USER("Clicked"); } else if(code == LV_EVENT_VALUE_CHANGED) { LV_LOG_USER("Toggled"); } } void lv_example_btn_888(void) { lv_obj_t * label; lv_obj_t * btn1 = lv_btn_create(lv_scr_act()); lv_obj_add_event_cb(btn1, event_handler, LV_EVENT_ALL, NULL); lv_obj_align(btn1, LV_ALIGN_CENTER, 0, -40); label = lv_label_create(btn1); lv_label_set_text(label, "Button"); lv_obj_center(label); lv_obj_t * btn2 = lv_btn_create(lv_scr_act()); lv_obj_add_event_cb(btn2, event_handler, LV_EVENT_ALL, NULL); lv_obj_align(btn2, LV_ALIGN_CENTER, 0, 40); lv_obj_add_flag(btn2, LV_OBJ_FLAG_CHECKABLE); lv_obj_set_height(btn2, LV_SIZE_CONTENT); label = lv_label_create(btn2); lv_label_set_text(label, "Toggle"); lv_obj_center(label); } void setup() { String title = "LVGL porting example"; Serial.begin(115200); pinMode(GPIO_INPUT_IO_4, OUTPUT); /** * These development boards require the use of an IO expander to configure the screen, * so it needs to be initialized in advance and registered with the panel for use. * */ Serial.println("Initialize IO expander"); /* Initialize IO expander */ ESP_IOExpander *expander = new ESP_IOExpander_CH422G((i2c_port_t)I2C_MASTER_NUM, ESP_IO_EXPANDER_I2C_CH422G_ADDRESS_000, I2C_MASTER_SCL_IO, I2C_MASTER_SDA_IO); // ESP_IOExpander *expander = new ESP_IOExpander_CH422G(I2C_MASTER_NUM, ESP_IO_EXPANDER_I2C_CH422G_ADDRESS_000); expander->init(); expander->begin(); expander->multiPinMode(TP_RST | LCD_BL | LCD_RST | SD_CS | USB_SEL, OUTPUT); expander->multiDigitalWrite(TP_RST | LCD_BL | LCD_RST, HIGH); delay(100); //gt911 initialization, must be added, otherwise the touch screen will not be recognized //gt911 初始化,必须要加,否则会无法识别到触摸屏 //initialization begin expander->multiDigitalWrite(TP_RST | LCD_RST, LOW); delay(100); digitalWrite(GPIO_INPUT_IO_4, LOW); delay(100); expander->multiDigitalWrite(TP_RST | LCD_RST, HIGH); delay(200); //initialization end Serial.println(title + " start"); Serial.println("Initialize panel device"); ESP_Panel *panel = new ESP_Panel(); panel->init(); #if LVGL_PORT_AVOID_TEAR // When avoid tearing function is enabled, configure the RGB bus according to the LVGL configuration ESP_PanelBus_RGB *rgb_bus = static_cast<ESP_PanelBus_RGB *>(panel->getLcd()->getBus()); rgb_bus->configRgbFrameBufferNumber(LVGL_PORT_DISP_BUFFER_NUM); rgb_bus->configRgbBounceBufferSize(LVGL_PORT_RGB_BOUNCE_BUFFER_SIZE); #endif panel->begin(); Serial.println("Initialize LVGL"); lvgl_port_init(panel->getLcd(), panel->getTouch()); Serial.println("Create UI"); /* Lock the mutex due to the LVGL APIs are not thread-safe */ lvgl_port_lock(-1); /* Create a simple label */ lv_obj_t *label = lv_label_create(lv_scr_act()); lv_label_set_text(label, title.c_str()); lv_obj_align(label, LV_ALIGN_CENTER, 0, 0); /** * Try an example. Don't forget to uncomment header. * See all the examples online: https://docs.lvgl.io/master/examples.html * source codes: https://github.com/lvgl/lvgl/tree/e7f88efa5853128bf871dde335c0ca8da9eb7731/examples */ lv_example_btn_888(); /** * Or try out a demo. * Don't forget to uncomment header and enable the demos in `lv_conf.h`. E.g. `LV_USE_DEMOS_WIDGETS` */ // lv_demo_widgets(); // lv_demo_benchmark(); // lv_demo_music(); // lv_demo_stress(); /* Release the mutex */ lvgl_port_unlock(); Serial.println(title + " end"); } void loop() { Serial.println("IDLE loop"); delay(1000); }``
成功!
当前问题:
demo不可用,提示找不到demo的函数,可以明明给了lv_conf.h
这个文件可以放在两个地方:
1,直接放在lvgl文件夹旁边
2,添加宏定义 LV_CONF_INCLUDE_SIMPLE
build_flags =
-DLV_CONF_INCLUDE_SIMPLE
然后程序就会自动寻找lv_conf.h文件
程序里面直接就是#include “lv_conf.h”
可是还是提示找不到。
demo问题已解决
1,app.cpp里面先放头#include <demos/lv_demos.h>
2,程序里正常调用,比如lv_demo_benchmark();
3,lv_conf.h文件可以放在任意文件夹
4,在pio的配置文件里面,
使用宏LV_CONF_INCLUDE_SIMPLE
用-I 加上lv_conf.h所在的文件夹位置,我的在src里面,如下
build_flags =
-I src
-DLV_CONF_INCLUDE_SIMPLE
编译,成功运行,OK!!!