Waveshare ESP32-S3 7inch Capacitive Touch Display flickering and starting up scrolled half a page

This is my first post, so I hope I include everything, and I really appreciate any help.

I have three {kitchen, hall & lounge} Waveshare ESP32-S3 7-inch Capacitive Touch Displays that are mostly brilliant. They each display a custom dashboard using LVGL. I installed the kitchen first and copied the base ESPHome configuration to the lounge and hall dashboards so they are configured identically.

The kitchen board is perfect, whilst the hall and lounge boards have two annoying features.

  • On startup, the displays are scrolled 50% off screen. The hall display does this vertically, whereas the lounge display does it horizontally. I can swipe them back so they cover the full screen, and then it will not allow me to swipe them off-screen again.

  • In addition, the lounge and hall displays flicker occasionally. I think this is when they receive an update from Home Assistant, such as a switch changing state.

The three boards are configured identically apart from name, etc., as follows. I’ve only included the config as I have over 1000 lines of YAML for each display.

esphome:
  name: hall-display
  friendly_name: Hall Display
  min_version: 2025.11.0
  project:
    name: "Waveshare.ESP32-S3-Touch-LCD-7B"
    version: "1.0.0"

external_components:
  - source: github://pr#10071
    components: [waveshare_io_ch32v003]
    refresh: 1h

waveshare_io_ch32v003:
  - id: waveshare_io_hub
  
psram:
  mode: octal
  speed: 80MHz

preferences:
  flash_write_interval: 5min

esp32:
  board: esp32-s3-devkitc-1
  variant: esp32s3
  flash_size: 16MB
  cpu_frequency: 240MHz
  framework:
    type: esp-idf

################################################################################
# WiFi
################################################################################
wifi:
  networks:
    - ssid: !secret wifi_ssid
      password: !secret wifi_password
      manual_ip:
        static_ip: 192.168.2.130
        gateway: 192.168.2.1
        subnet: 255.255.255.0
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "${device_wifi_name} Hotspot"
    password: !secret wifi_password
  
captive_portal:

################################################################################
# Web Server
################################################################################
web_server:
  port: 80
  version: 3
  include_internal: true

################################################################################
# OTA
################################################################################
ota:
  - platform: esphome
    password: !secret ota_password

################################################################################
# Enable Home Assistant API
################################################################################
api:
  id: ha_api
  encryption:
    key: !secret encryption


################################################################################
# I2C for touchscreen
################################################################################
i2c:
  - id: bus_a
    sda: GPIO08
    scl: GPIO09
    scan: true

################################################################################
# IO Extender
################################################################################
ch422g:
  - id: ch422g_hub

################################################################################
# Enable logging
################################################################################
logger:
  level: DEBUG

and the screen config

display:
  - platform: rpi_dpi_rgb
    id: my_display
    update_interval: never
    auto_clear_enabled: false
    color_order: RGB
    pclk_frequency: 30MHZ
    dimensions:
      width: 800
      height: 480
    de_pin:
      number: 5
    hsync_pin:
      number: 46
      ignore_strapping_warning: true
    vsync_pin:
      number: 3
      ignore_strapping_warning: true
    pclk_pin: 7
    pclk_inverted: true
    reset_pin:
      waveshare_io_ch32v003: waveshare_io_hub
      number: 3
    hsync_back_porch: 152
    hsync_front_porch: 48
    hsync_pulse_width: 162
    vsync_back_porch: 13
    vsync_front_porch: 3
    vsync_pulse_width: 45
    data_pins:
      red:
        - 1         #r3
        - 2         #r4
        - 42        #r5
        - 41        #r6
        - 40        #r7
      blue:
        - 14        #b3
        - 38        #b4
        - 18        #b5
        - 17        #b6
        - 10        #b7
      green:
        - 39        #g2
        - 0         #g3
        - 45        #g4
        - 48        #g5
        - 47        #g6
        - 21        #g7

################################################################################
# Touch Screen
################################################################################
touchscreen:
  platform: gt911
  id: my_touchscreen
  display: my_display
  i2c_id: bus_a
  interrupt_pin: GPIO4
  calibration:
    x_min: 0
    x_max: 800
    y_min: 0
    y_max: 480
  reset_pin:
    waveshare_io_ch32v003: waveshare_io_hub
    number: 1
    mode: OUTPUT
  on_touch:
    then:
      - if:
          condition:
            - switch.is_on: switch_antiburn

          then:
            - switch.turn_off: switch_antiburn

You should always start with a search, you will the be able to see the latest code and talk to people playing with the device you are trying to get working.

Welcome to the forum and hopefully the link will help.

1 Like