# BSP: ESP32-S3-LCD-EV-Board [![Component Registry](https://components.espressif.com/components/espressif/esp32_s3_lcd_ev_board/badge.svg)](https://components.espressif.com/components/espressif/esp32_s3_lcd_ev_board) * [User Guide](https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s3/esp32-s3-lcd-ev-board/user_guide.html) <div align=center><img src="https://docs.espressif.com/projects/esp-dev-kits/zh_CN/latest/_images/ESP32-S3-LCD-EV-Board_480x480.png" width=600/></div> <div align=center><img src="https://docs.espressif.com/projects/esp-dev-kits/zh_CN/latest/_images/ESP32-S3-LCD-EV-Board_800x480.png" 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](https://docs.espressif.com/projects/esp-dev-kits/zh_CN/latest/_static/esp32-s3-lcd-ev-board/schematics/SCH_ESP32-S3-LCD-Ev-Board-SUB1_V1.0_20220617.pdf) | 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](https://docs.espressif.com/projects/esp-dev-kits/zh_CN/latest/_static/esp32-s3-lcd-ev-board/schematics/SCH_ESP32-S3-LCD-EV-Board-SUB2_V1.2_20230509.pdf) | 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](https://docs.espressif.com/projects/esp-dev-kits/zh_CN/latest/_static/esp32-s3-lcd-ev-board/schematics/SCH_ESP32-S3-LCD-EV-Board-SUB3_V1.1_20230315.pdf) | 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](https://docs.espressif.com/projects/esp-faq/en/latest/software-framework/peripherals/lcd.html#why-do-i-get-drift-overall-drift-of-the-display-when-esp32-s3-is-driving-an-rgb-lcd-screen), 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](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/peripherals/lcd.html#bounce-buffer-with-single-psram-frame-buffer). * `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_MODE`: * `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` * Enable `BSP_DISPLAY_LVGL_AVOID_TEAR` and `BSP_DISPLAY_LVGL_FULL_REFRESH` * RGB double-buffer + LVGL direct-mode: * Set `BSP_LCD_RGB_BUFFER_NUMS` to `2` * Enable `BSP_DISPLAY_LVGL_AVOID_TEAR` and `BSP_DISPLAY_LVGL_DIRECT_MODE` * RGB triple-buffer + LVGL full-refresh mode: * Set `BSP_LCD_RGB_BUFFER_NUMS` to `3` * Enable `BSP_DISPLAY_LVGL_AVOID_TEAR` and `BSP_DISPLAY_LVGL_FULL_REFRESH`
# 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`
# Display LVGL Demos This example shows LVGL internal demos with RGB LCD. For common issues about RGB LCD, please refer to [LCD Development Guide](https://docs.espressif.com/projects/esp-iot-solution/en/latest/display/lcd/lcd_development_guide.html#common-problems). ## 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 ``` idf.py -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="https://espressif.github.io/esp-launchpad/?flashConfigURL=https://espressif.github.io/esp-bsp/config.toml&app=display_lvgl_demos"> <img alt="Try it with ESP Launchpad" src="https://espressif.github.io/esp-launchpad/assets/try_with_launchpad.png" width="250" height="70"> </a>
idf.py add-dependency "espressif/esp32_s3_lcd_ev_board^2.1.0"
To create a project from this example, run:
idf.py create-project-from-example "espressif/esp32_s3_lcd_ev_board^2.1.0:display_lvgl_demos"