主要的库:
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!!!
本文地址: ESP32-S3-Touch-LCD-4.3B运行PlatformIO LVGL8.4