LVGL with Waveshare 3.5B Weird Screen Behavior

I have a waveshare 3.5B touchscreen

Ive uploaded the following code:


external_components:

  • source: github://pr#17513
    components: [mipi_spi]
    refresh: 1h

esp32:
variant: esp32s3
flash_size: 16MB # board is ESP32-S3R8, 16MB flash
framework:
type: esp-idf

psram:
mode: octal # ESP32-S3R8 = 8MB octal PSRAM
speed: 80MHz

QSPI bus for the display

spi:

  • id: qspi_bus
    type: quad
    clk_pin: 5
    data_pins: [1, 2, 3, 4] # D0..D3

Touch controller (AXS15231B) shares the board I2C bus

i2c:

  • id: i2c_bus
    sda: 8
    scl: 7

display:

  • platform: mipi_spi
    id: lcd
    model: WAVESHARE-ESP32-S3-TOUCH-LCD-3.5B
    dimensions: 320 x 480

touchscreen:

  • platform: axs15231
    id: touch
    i2c_id: i2c_bus
    display: lcd
    on_touch:
    • lambda: |-
      ESP_LOGI(“touch”, “x=%d, y=%d, x_raw=%d, y_raw=%d”, touch.x, touch.y, touch.x_raw, touch.y_raw);

output:

  • platform: ledc
    id: backlight_output
    pin: 6
    light:
  • platform: monochromatic
    id: backlight
    name: “Backlight”
    output: backlight_output
    restore_mode: ALWAYS_ON

font:

  • file:
    type: gfonts
    family: Montserrat
    weight: 700
    id: montserrat_20b
    size: 20
    bpp: 4
    glyphsets: [GF_Latin_Core]
  • file:
    type: gfonts
    family: Poppins
    weight: 700
    id: poppins_14b
    size: 14
    bpp: 4
    glyphsets: [GF_Latin_Core]

image:

lvgl:
rotation: 90
top_layer:
scrollbar_mode: “OFF”
widgets:
- arc:
id: lv_arc_5
x: -95
y: 0
width: 170
height: 155
align: CENTER
value: 18
min_value: 10
max_value: 28
adjustable: true
start_angle: 135
end_angle: 45
indicator:
arc_color: 0xF63C3C
arc_width: 10
knob:
pad_all: 5
pad_all: 25
on_click:
- homeassistant.action:
action: light.toggle
data:
entity_id: light.dinning_room_light

pages:
- id: canvas_1
  bg_color: 0x111827
  pad_all: 0
  scrollbar_mode: "OFF"
  widgets:
  - image:
      id: lv_image_3
      x: 0
      y: 0
      width: 480
      height: 320
      src: img_mountains_862870_1280
  - label:
      id: lv_label_7
      x: 115
      y: 25
      width: 290
      height: 45
      text: "Test Area"
      text_color: 0xFFFFFF
      text_align: CENTER
      long_mode: DOT
      text_font: montserrat_20b

Screen turns-on I get this

When I press on the widget, it opens a smaller widgets in the corner of the screen.
I’m not sure why it’s opening a smaller widget in the corner, anyone have any idea as to why?

Thanks

Firstly, enclose your yaml in triple-back ticks ```above and below to get correct code formatting. Whatever you did in your post makes the yaml hard to read.

Secondly, remove the external components block from your config - the driver has been merged into the ESPHome release since 2026.8.0.

Then, try this for the display config:

platform: mipi_spi
  id: lcd
  model: WAVESHARE-ESP32-S3-TOUCH-LCD-3.5B
  init_sequence:
    - [0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA5]
    - [0xC1, 0x33]
    - [0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]

and see if it fixes the problem.

Thanks Clyde,

I do apologize for my half-hazardly posting of my yaml code; I’ve been fighting with it for hours and as a last resort posted it while in a “fit-of-rage”.

I have since changed the code as you suggested but have the same result. I even

removed the touchscreen component which still gave me the same result.

I’m considering abandoning this 3.5B Waveshare and buying one that has more examples and support.

You can still modify your first post and make your code readable, like suggested above..

You can add full_refresh: true to the lvgl config, which will work-around the issue at the cost of slower updates (should still be acceptable.)

Clyde!!!

Thanks a million!!! “full_refresh: true” into the Lvgl code has solved my issues.