Board Support Package for ESP32-S3-LCD-EV-Board


# BSP: ESP32-S3-LCD-EV-Board

[![Component Registry](](

* [User Guide](

<div align=center><img src="" width=600/></div>

<div align=center><img src="" width=600/></div>

ESP32-S3-LCD-EV-Board is a development board for evaluating and verifying ESP32-S3 screen interactive applications. It has the functions of touch screen interaction and voice interaction. The development board has the following characteristics:

* Onboard ESP32-S3-WROOM-1 module, with built-in 16 MB Flash + 8/16 MB PSRAM
* Onboard audio codec + audio amplifier
* Onboard dual microphone pickup
* USB type-C interface download and debugging
* It can be used with different screen sub boards, and supports `RGB`, `8080`, `SPI`, `I2C` interface screens, as below:

|         Board Name         | Screen Size (inch) | Resolution | LCD Driver IC (Interface) | Touch Driver IC |                                                                            Schematic                                                                            | Support |
| -------------------------- | ------------------ | ---------- | ------------------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
| ESP32-S3-LCD-EV-Board-SUB1 | 0.9                | 128 x 64   | SSD1315 (I2C)             | *               | [link]( | Not yet |
|                            | 2.4                | 320 x 240  | ST7789V (SPI)             | XTP2046         |                                                                                                                                                                 | Not yet |
| ESP32-S3-LCD-EV-Board-SUB2 | 3.5                | 480 x 320  | ST7796S (8080)            | GT911           | [link]( | Not yet |
|                            | 3.95               | 480 x 480  | GC9503CV (RGB)            | FT5x06          |                                                                                                                                                                 | Yes     |
| ESP32-S3-LCD-EV-Board-SUB3 | 4.3                | 800 x 480  | ST7262E43 (RGB)           | GT1151          | [link]( | Yes     |

Here are some useful configurations in menuconfig that can be customed by user:

* `BSP_LCD_RGB_BUFFER_NUMS`: Configure the number of frame buffers. The anti-tearing function can be activated only when set to a value greater than one.
* `BSP_LCD_RGB_REFRESH_MODE`: Choose the refresh mode for the RGB LCD.
    * `BSP_LCD_RGB_REFRESH_AUTO`: Use the most common method to refresh the LCD.
    * `BSP_LCD_RGB_REFRESH_MANUALLY`: Refresh the LCD within a dedicated task. This can help manage PSRAM bandwidth.
    * `BSP_LCD_RGB_BOUNCE_BUFFER_MODE`: Enabling bounce buffer mode can lead to a higher PCLK frequency at the expense of increased CPU consumption. **This mode is particularly useful when dealing with [screen drift](, especially in scenarios involving Wi-Fi usage or writing to Flash memory.** This feature should be used in conjunction with `ESP32S3_DATA_CACHE_LINE_64B` configuration. For more detailed information, refer to the [documentation](
* `BSP_DISPLAY_LVGL_BUF_CAPS`: Select the memory type for the LVGL buffer. Internal memory offers better performance.
* `BSP_DISPLAY_LVGL_BUF_HEIGHT`: Set the height of the LVGL buffer, with its width aligning with the LCD's width. The default value is 100, decreasing it can lower memory consumption.
* `BSP_DISPLAY_LVGL_AVOID_TEAR`: Avoid tearing effect by using multiple buffers. This requires setting `BSP_LCD_RGB_BUFFER_NUMS` to a value greater than 1.
        * `BSP_DISPLAY_LVGL_FULL_REFRESH`: Use LVGL full-refresh mode. Set `BSP_LCD_RGB_BUFFER_NUMS` to `3` will get higher FPS when enable `BSP_DISPLAY_LVGL_ROTATION_NONE`.
        * `BSP_DISPLAY_LVGL_DIRECT_MODE`: Use LVGL's direct mode.
    * `BSP_DISPLAY_LVGL_ROTATION`: Rotate the screen clockwise. This requires setting `BSP_LCD_RGB_BUFFER_NUMS` to `3`. **The rotation is software-based and will substantially reduce FPS if enabled.**
        * `BSP_DISPLAY_LVGL_ROTATION_NONE`: No rotation.
        * `BSP_DISPLAY_LVGL_ROTATION_90`: 90-degree rotation.
        * `BSP_DISPLAY_LVGL_ROTATION_180`: 180-degree rotation.
        * `BSP_DISPLAY_LVGL_ROTATION_270`: 270-degree rotation.

Based on the above configurations, there are three different anti-tearing modes can be used:

* RGB double-buffer + LVGL full-refresh mode:
    * Set `BSP_LCD_RGB_BUFFER_NUMS` to `2`
* RGB double-buffer + LVGL direct-mode:
    * Set `BSP_LCD_RGB_BUFFER_NUMS` to `2`
* RGB triple-buffer + LVGL full-refresh mode:
    * Set `BSP_LCD_RGB_BUFFER_NUMS` to `3`


# ChangeLog

## v1.0.3 - 2023-02-13

### Features

* Configurations:
    * Support to set number of frame buffers for RGB
    * Support to use bounce-buffer for RGB
    * Support to change the minimum delay time of LVGL task
    * Support to change the stack size of LVGL task
    * Support to enable anti-tearing function simply by using multiple buffers
* RGB Anti-tearing:
    * Optimize direct mode
    * Use triple-buffer in full-refresh mode

## v2.0.0 - 2023-08-07

### Features

* Configurations:
    * Add support for screen rotation using triple buffers when enabling RGB anti-tearing.
    * Add support for configuring SPIFFS.
* Implementations:
    * Use `esp_lcd_panel_io_additions` and `esp_lcd_gc9503` components to drive the LCD of sub_board2.
    * Use `esp_codec_dev` component to handle audio chips.
    * Use `button` component to handle button.
    * Implement automatic detection of the LCD sub-board type
* APIs:
    * Add new APIs for display in `bsp/display.h`
    * Add new APIs for touch in `bsp/touch.h`
    * Add new APIs for spiffs, audio in `bsp/esp32_s3_lcd_ev_board.h`
    * Add new APIs for ADC in `bsp/esp32_s3_lcd_ev_board.h`

## v3.0.0 - 2023-12-02

### Bugfix

* Use `on_bounce_frame_finish` instead of `on_vsync` when enabling RGB bounce buffer mode.
* Fix some issues when enabling anti-tearing and rotation

### Features

* Configurations:
    * Support to set the pinned core for LVGL task
* Implementations:
    * Support ESP32-S3-WROOM-1-N16R16V module
    * Add warning for compiling and running when using `ESP-IDF` version `<5.1.2`

### Dependencies

* Update the version of `ESP-IDF` to `>5.0.1`
* Use `esp_lcd_gc9503` version `^1` when using `ESP-IDF` version `<5.1.2`
* Use `esp_lcd_gc9503` version `^3` when using `ESP-IDF` version `>=5.1.2`

readme of display_lvgl_demos example

                                        # Display LVGL Demos

This example shows LVGL internal demos with RGB LCD.

For common issues about RGB LCD, please refer to [LCD Development Guide](

## How to use the example

### Hardware Required

* ESP32-S3-LCD-EV-Board or ESP32-S3-LCD-EV-Board-2
* USB-C Cable

### Compile and flash

``` -p COMx build flash monitor

### Example outputs

I (0) cpu_start: App cpu up.
I (923) esp_psram: SPI SRAM memory test OK
I (932) cpu_start: Pro cpu start user code
I (932) cpu_start: cpu freq: 240000000 Hz
I (932) cpu_start: Application information:
I (935) cpu_start: Project name:     display_lvgl_demos
I (941) cpu_start: App version:      squareline-latest-29-geed37e1
I (948) cpu_start: Compile time:     Dec  2 2023 15:41:34
I (954) cpu_start: ELF file SHA256:  fb3ec2c6026f1bb4...
I (960) cpu_start: ESP-IDF:          v5.1.2
I (965) cpu_start: Min chip rev:     v0.0
I (969) cpu_start: Max chip rev:     v0.99
I (974) cpu_start: Chip rev:         v0.2
I (979) heap_init: Initializing. RAM available for dynamic allocation:
I (986) heap_init: At 3FC9BF28 len 0004D7E8 (309 KiB): DRAM
I (992) heap_init: At 3FCE9710 len 00005724 (21 KiB): STACK/DRAM
I (999) heap_init: At 3FCF0000 len 00008000 (32 KiB): DRAM
I (1005) heap_init: At 600FE010 len 00001FD8 (7 KiB): RTCRAM
I (1011) esp_psram: Adding pool of 15552K of PSRAM memory to heap allocator
I (1019) spi_flash: detected chip: gd
I (1023) spi_flash: flash io: qio
W (1027) spi_flash: Detected size(16384k) larger than the size in the binary image header(2048k). Using the size in the binary image header.
I (1041) sleep: Configure to isolate all GPIO pins in sleep state
I (1048) sleep: Enable automatic switching of GPIO sleep configuration
I (1055) app_start: Starting scheduler on CPU0
I (1060) app_start: Starting scheduler on CPU1
I (1060) main_task: Started on CPU0
I (1070) esp_psram: Reserving pool of 32K of internal memory for DMA/internal allocations
I (1078) main_task: Calling app_main()
I (1083) bsp_probe: Detect module with 16MB PSRAM
I (1088) bsp_probe: Detect sub_board3 with 800x480 LCD (ST7262), Touch (GT1151)
I (1096) bsp_sub_board: Initialize RGB panel
I (1134) gt1151: IC version: GT1158_000101(Patch)_0102(Mask)_00(SensorID)
I (1136) bsp_lvgl_port: Create LVGL task
I (1136) bsp_lvgl_port: Starting LVGL task
I (1164) app_main: Avoid lcd tearing effect
I (1165) app_main: LVGL direct-mode
W (1165) S3-LCD-EV-BOARD: This board doesn't support to change brightness of LCD
I (1171) app_main: Display LVGL demo
I (1370) main_task: Returned from app_main()

<a href="">
    <img alt="Try it with ESP Launchpad" src="" width="250" height="70">




License: Apache-2.0

To add this component to your project, run: add-dependency "espressif/esp32_s3_lcd_ev_board^2.1.0"

or download archive



more details


  • Downloaded in total
    Downloaded in total 3.8k times
  • Downloaded this version
    This version: 508 times


espressif/esp32_s3_lcd_ev_board version: 2.1.0 |