Waveshare ESP32-S3-Touch-LCD-2.1C working config?

Does anyone have a working config for this board? tried everything and I cannot get nothing on the display.

Waveshare ESP32-S3 2.1inch

ESP32-S3-Touch-LCD-2.1 Wiki

Here is my current config

esphome:
  name: round-display
  friendly_name: Round Display Panel

esp32:
  board: esp32-s3-devkitc-1
  variant: esp32s3
  framework:
    type: esp-idf

psram:
  mode: octal
  speed: 80MHz

logger:
api:

ota:
  platform: esphome

wifi:
  ssid: ""
  password: ""
  use_address: 

i2c:
  id: i2c_bus
  sda: GPIO15
  scl: GPIO7
  scan: true
  frequency: 400kHz

pca9554:
  - id: expander
    address: 0x20
    i2c_id: i2c_bus

switch:
  - platform: gpio
    id: backlight_sw
    pin: GPIO6
    name: "LCD Backlight"
    restore_mode: ALWAYS_ON

spi:
  - id: spi_lcd
    clk_pin: GPIO2
    mosi_pin: GPIO1
    miso_pin: GPIO42

font:
  - file: "arial.ttf"
    id: font_small
    size: 20

display:
  - platform: st7701s
    id: my_display
    spi_id: spi_lcd
    spi_mode: MODE1
    cs_pin:
      pca9554: expander
      number: 2
      mode:
        output: true
    reset_pin:
      pca9554: expander
      number: 0
      mode:
        output: true
    dimensions:
      width: 480
      height: 480
    color_order: RGB
    rotation: 0
    pclk_pin: GPIO41
    de_pin: GPIO40
    hsync_pin: GPIO38
    vsync_pin: GPIO39
    pclk_frequency: 24000000
    pclk_inverted: true
    hsync_pulse_width: 10
    hsync_back_porch: 20
    hsync_front_porch: 50
    vsync_pulse_width: 10
    vsync_back_porch: 10
    vsync_front_porch: 20
    data_pins:
      red: [GPIO46, GPIO3, GPIO8, GPIO18, GPIO17]
      green: [GPIO14, GPIO13, GPIO12, GPIO11, GPIO10, GPIO9]
      blue: [GPIO5, GPIO45, GPIO48, GPIO47, GPIO21]
    init_sequence:
      - [0xFF, 0x77, 0x01, 0x00, 0x00, 0x10]
      - [0xC0, 0xE9, 0x03]
      - [0xC1, 0x0D, 0x02]
      - [0xC2, 0x31, 0x05]
      - [0xCC, 0x10]
      - [0xCD, 0x08]
      - [0xB0, 0x00, 0x11, 0x18, 0x0C, 0x0E, 0x06, 0x08, 0x04, 0x08, 0x22, 0x04, 0x12, 0x12, 0x28, 0x2C, 0x0F]
      - [0xB1, 0x00, 0x11, 0x19, 0x0C, 0x0F, 0x07, 0x08, 0x05, 0x08, 0x23, 0x05, 0x12, 0x13, 0x29, 0x2C, 0x0F]
      - [0xFF, 0x77, 0x01, 0x00, 0x00, 0x11]
      - [0xB0, 0x6D]
      - [0xB1, 0x37]
      - [0xB2, 0x81]
      - [0xB3, 0x80]
      - [0xB5, 0x43]
      - [0xB7, 0x85]
      - [0xB8, 0x20]
      - [0xC1, 0x78]
      - [0xC2, 0x78]
      - [0xD0, 0x88]
      - [0xE0, 0x00, 0x00, 0x02]
      - [0xE1, 0x05, 0xB0, 0x00, 0x00, 0x06, 0xB0, 0x00, 0x00, 0x00, 0x33, 0x33]
      - [0xE2, 0x11, 0x11, 0x44, 0x44, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00]
      - [0xE3, 0x00, 0x00, 0x33, 0x33]
      - [0xE4, 0x44, 0x44]
      - [0xE5, 0x0C, 0xD2, 0xA0, 0xA0, 0x0E, 0xD4, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
      - [0xE6, 0x00, 0x00, 0x33, 0x33]
      - [0xE7, 0x44, 0x44]
      - [0xE8, 0x0D, 0xD3, 0xA0, 0xA0, 0x0F, 0xD5, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
      - [0xEB, 0x02, 0x00, 0x40, 0x40, 0x00, 0x00]
      - [0xED, 0xFF, 0x10, 0xAF, 0x76, 0x54, 0x0B, 0xA0, 0x10, 0x45, 0x67, 0x98, 0xBA]
      - [0xEF, 0x10, 0x0D, 0x04, 0x08, 0x3F, 0x1F]
      - [0xFF, 0x77, 0x01, 0x00, 0x00, 0x13]
      - [0xEF, 0x08]
      - [0xFF, 0x77, 0x01, 0x00, 0x00, 0x00]
      - [0x36, 0x00]
      - [0x3A, 0x66]
    update_interval: 1s
    lambda: |-
      it.fill(Color(255, 0, 0));  // Solid red test

touchscreen:
  - platform: cst816
    id: touch_panel
    i2c_id: i2c_bus
    interrupt_pin: GPIO16
    reset_pin:
      pca9554: expander
      number: 1
      mode:
        output: true
    calibration:
      x_min: 0
      x_max: 480
      y_min: 0
      y_max: 480

Try this

# Waveshare ESP32-S3-Touch-LCD-2.1

esphome:
  name: waveshare-21
  friendly_name: Waveshare 2.1
      
esp32:
  board: esp32-s3-devkitc-1
  flash_size: 8MB
  variant: esp32s3
  framework:
    type: esp-idf
    sdkconfig_options:
      CONFIG_ESPTOOLPY_FLASHFREQ: "80MHz" 
      CONFIG_ESPTOOLPY_FLASHMODE_QIO: y
      CONFIG_FLASHMODE_QIO: y
      CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240: y
      CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ: '240'
      CONFIG_SPIRAM_RODATA: "y"

psram:
  mode: octal
  speed: 80MHz

logger:

api:
  encryption:
    key:

ota:
  - platform: esphome
    password:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  ap:

captive_portal:

pca9554:
  - id: p_c_a
    address: 0x20
    i2c_id: i2c_bus

output:
  - platform: ledc
    id: gpio_backlight_pwm
    pin: GPIO06
    frequency: 100Hz
    channel: 0

light:
  - platform: monochromatic
    output: gpio_backlight_pwm
    name: Display Backlight
    icon: mdi:lightbulb-on
    id: display_backlight
    restore_mode: ALWAYS_ON
    gamma_correct: 1

i2c:
  - id: i2c_bus
    sda: 15
    scl: 7

touchscreen:
  - platform: cst816
    calibration:
      x_min: 0
      x_max: 430  # touchscreen is non linear on LHS!
      y_min: 0
      y_max: 480
    id: my_touchscreen
    i2c_id: i2c_bus
    reset_pin:
      pca9554: p_c_a
      number: 1
    interrupt_pin: GPIO16
    # on_update:
        # - lvgl.label.update:
            # id: coord_text
            # text: !lambda return str_sprintf("Touch points:\n id=%d x=%d, y=%d", touches[0].id, touches[0].x, touches[0].y);
        # - lambda: |-
            # for (auto touch: touches)  {
                # if (touch.state <= 2) {
                  # ESP_LOGI("Touch points:", "id=%d x=%d, y=%d", touch.id, touch.x, touch.y);
                # }
            # }
    
spi:
  - id: spi_lcd
    clk_pin: GPIO02
    mosi_pin: GPIO01
    interface: spi3

display:
  - platform: st7701s
    id: screen
    spi_mode: MODE0
    data_rate: 40Mhz 
    color_order: RGB
    auto_clear_enabled: false
    update_interval: never
    dimensions:
      width: 480
      height: 480
    cs_pin:
      pca9554: p_c_a
      number: 2
    reset_pin:
      pca9554: p_c_a
      number: 0
    de_pin: GPIO40
    hsync_pin: GPIO38
    vsync_pin: GPIO39
    pclk_pin: GPIO41
    pclk_frequency: 16Mhz
    pclk_inverted: false
    hsync_pulse_width: 8 #10
    hsync_back_porch:  10
    hsync_front_porch: 50 #10 
    vsync_pulse_width:  3 #2
    vsync_back_porch:  8 #12
    vsync_front_porch: 8 #14
    data_pins:
      red:
        - 46       #r1
        - 3        #r2
        - 8        #r3
        - 18       #r4
        - 17       #r5
      green:
        - 14       #g0
        - 13       #g1
        - 12       #g2
        - 11       #g3
        - 10       #g4
        - 9        #g5
      blue:
        - 5        #b1
        - 45       #b2
        - 48       #b3
        - 47       #b4
        - 21       #b5
    init_sequence:

      - [0xFF, 0x77, 0x01, 0x00, 0x00, 0x10]    # CMD2_BKSEL (command bank select BK0, BK func disabled)
      - [0xC0, 0x3B, 0x00]                      # Scan line
      - [0xC1, 0x0B, 0x02]                      # VBP
      - [0xC2, 0x07, 0x02]
      - [0xCC, 0x10]
      - [0xCD, 0x08]                            # RGB format | ?565??? 666??
      - [0xB0, 0x00, 0x11, 0x16, 0x0e, 0x11, 0x06, 0x05, 0x09, 0x08, 0x21, 0x06, 0x13, 0x10, 0x29, 0x31, 0x18]   # IPS | 255 | 251 | 247 down | 239 | 231 | 203 | 175 | 147 | 108 | 80 | 52 | 24 | 16 | 8 down | 4 | 0
      - [0xB1, 0x00, 0x11, 0x16, 0x0e, 0x11, 0x07, 0x05, 0x09, 0x09, 0x21, 0x05, 0x13, 0x11, 0x2a, 0x31, 0x18]   # IPS | 255 | 251 | 247 down | 239 | 231 | 203 | 175 | 147 | 108 | 80 | 52 | 24 | 16 | 8 down | 4 | 0
      - [0xFF, 0x77, 0x01, 0x00, 0x00, 0x11]
      - [0xB0, 0x6d]                            # VOP  3.5375+ *x 0.0125 | 5D
      - [0xB1, 0x37]                            # VCOM amplitude setting
      - [0xB2, 0x81]                            # VGH Voltage setting | 12V
      - [0xB3, 0x80]
      - [0xB5, 0x43]                            # VGL Voltage setting | -8.3V
      - [0xB7, 0x85]
      - [0xB8, 0x20]
      - [0xC1, 0x78]
      - [0xC2, 0x78]
      - [0xD0, 0x88]
      - [0xE0, 0x00, 0x00, 0x02]
      - [0xE1, 0x03, 0xA0, 0x00, 0x00, 0x04, 0xA0, 0x00, 0x00, 0x00, 0x20, 0x20]
      - [0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
      - [0xE3, 0x00, 0x00, 0x11, 0x00]
      - [0xE4, 0x22, 0x00]
      - [0xE5, 0x05, 0xEC, 0xA0, 0xA0, 0x07, 0xEE, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
      - [0xE6, 0x00, 0x00, 0x11, 0x00]
      - [0xE7, 0x22, 0x00]
      - [0xE8, 0x06, 0xED, 0xA0, 0xA0, 0x08, 0xEF, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
      - [0xEB, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00]
      - [0xED, 0xFF, 0xFF, 0xFF, 0xBA, 0x0A, 0xBF, 0x45, 0xFF, 0xFF, 0x54, 0xFB, 0xA0, 0xAB, 0xFF, 0xFF, 0xFF]
      - [0xEF, 0x10, 0x0D, 0x04, 0x08, 0x3F, 0x1F]
      - [0xFF, 0x77, 0x01, 0x00, 0x00, 0x13]    # CMD2_BKSEL (command bank select BK3, BK func enabled)
      - [0xEF, 0x08]
      - [0xFF, 0x77, 0x01, 0x00, 0x00, 0x00]    # CMD2_BKSEL (command bank select BK0, BK func disabled)
      - [0x36, 0x00]                            # MADCTL_CMD (already in esphome ST7701S::write_init_sequence_)
      - [0x3A, 0x66]                            # COLMOD 55/50=16bit(RGB565); 66=18bit(RGB666); 77?????3AH?=24bit(RGB888)
      - [0x11]                                  # SLEEP_OUT (already in esphome)
      - delay 120ms
      - [0x29]                                  # DISPLAY_ON (already in esphome)
      - delay 20ms

  - platform: pcf85063
    id: rtc_time
    i2c_id: i2c_bus
    update_interval: never
    

got this error

INFO ESPHome 2025.10.5
INFO Reading configuration /config/esphome/esphome-web-ac8440.yaml...
INFO Unable to import component pcf85063.display: No module named 'esphome.components.pcf85063.display'
Failed config

Platform not found: 'display.pcf85063'

I modify the code you sent and fix the error I finally got a flashing hello with a red background screen thank you so much for the help.

Glad you got it working