ESP32-S3-Touch-LCD-4.3B运行PlatformIO LVGL8.4

· 更新于

esp32lcdlvglpioPlatformIO

主要的库:

https://github.com/esp-arduino-libs/ESP32_Display_Panel

https://github.com/lvgl/lvgl

步骤:

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!!!