Update 2026.6 broken all my CYDs again

I have several Cheap Yellow Displays around my house. The ESPHome Device Builder 2026.6 has broken them all again. (the 2026.5 update also broke them all). I managed, with the help from my forum, to fix the 2026.5 problems but changing the platform to mipi_spi and model to ILI9341 and some other tweaks and got them all back working.

Now with the 2026.6 update the displays break again. The yaml throws up an error in the code that dimension is now no longer valid. Removing that, the display only draws three quarters of the screen and cuts off the last 40px or so. Also, the top 30 lines now blink every second - and only the top 30 or so pixels the rest of the display is stable.

I have the screen rotated 180 degrees (for space constraints the power comes in from the right hand side as you look at the display). I have no idea how to fix this, particularly the blinking. I am not a technical person so tend to fumble my way through the fix but this one I have no idea of.

Anyone throw me any ideas on how to do this? What is causing the top 30px to blink? can I use an offset to use the full screen - though i don't think this will work as the display shows the beginning of the text correctly but cuts it off at arount the 280px width

Any help will be appreciated

Please provide your YAML, or nobody will be able to guess what you are talking about.

Also, if you're not a technical person, using betas is not a good idea (I suppose you speak about esphome 2026.6, which i still in beta)

sorry, told you I wasn't technical at all...

I don't have the broken code as I've reverted back to 2026.5.3 but this code is currently working on 2026.5.3

... setup code ...
spi:
  - id: tft
    clk_pin: GPIO14
    mosi_pin: GPIO13
    miso_pin: GPIO12
  - id: touch
    clk_pin: GPIO25
    mosi_pin: GPIO32
    miso_pin: GPIO39

# Set a pin to control the backlight
output:
  - platform: ledc
    pin: GPIO21
    id: backlight_pwm
    frequency: 1000 Hz
    inverted: false
  - platform: ledc
    pin: GPIO04
    id: led_red
    inverted: true
  - platform: ledc
    pin: GPIO17  
    id: led_blue 
    inverted: true
  - platform: ledc
    pin: GPIO16  
    id: led_green 
    inverted: true
interval:
  - interval: 300s
    then:
      - component.update: server_stats
      - lambda: |-
          id(page) = (id(page) +1);
          if (id(page) > 6) 
          {
            id(page) = 1;
          }
          id(page_timer) = millis();  // Reset timer on page change

display:
  - platform: mipi_spi
    id: server_stats
    color_order: BGR
    model: ILI9341
    spi_id: tft
    cs_pin: 
      number: GPIO15
      ignore_strapping_warning: true
    dc_pin:
      number: GPIO2
      ignore_strapping_warning: true
    invert_colors: false
    rotation: 180
    dimensions:
      width: ${width}
      height: ${height}
  #### Write the information to the pages
    lambda: |-
      // Pre-switch: UPS formatting
      float uptime = atof(id(UPS_time).state.c_str());        // Convert string to float
      float uptime2 = atof(id(UPS2).state.c_str());           // Convert string to float
      float load = atof(id(UPS_load).state.c_str());          // Convert string to float
... <rest of lambda code>

On updating to 2026.6.0, what I changed was to remove the dimensions: component as this was causing a compile error but the display then missed the last 40px and the blinking (in place) of the first 30px lines of the code. I have 6 pages of various stats pulled from home assistant in text_sensor: component. The pages update and redraw the display but again missing the last 40px and still blinks the first 30px. 1 page is just a B/W image. Again this loads 3/4 of the screen and the 30px of the image blinks leaving the rest of the image in tact.

Any specific reason you're upgrading to 2026.6.0?

Unless you really need some new functionality or there are some real security issues resolved in newer releases, there is no real need to update :wink:

And since you mentioned:

I don't think you are looking after new functionality either :wink:

My 2 cents, just keep an eye on the release notes, and unless there are some major security issues, don't bother with updating; you won't gain anything with the updates :wink:

Really, really hard to help without even the error message...

There's no real reason except for my OCD needing to get the notification off the settings in the sidebar - I know I can 'skip update' but my mind knows there's an update it it really does bug me. Also, if there ever is a security update needed to be installed I will be in the same position when applying that update as I am now so I'd rather get in and try and sort it earlier rather than later.
I don't understand a lot of the release notes, I had a quick look but didn't see anything in the breaking changes section I could see that would affect it and everything in the update checklist I had already changed - sensor: to text_sensor: for instance

@koying The original error message was that dimensions: is not valid in the display: module - that's why I removed it. The new yaml compiled and installed but thats when the display only used 3/4 of the width and the top 30 lines were continuously blinking. As the yaml compiled and updated the unit there was no second error message

How can I convince you that what you think the issue is, is probably not what it actually is.

Please try again with 2026.6 and:

  • post your whole YAML. As of you snippet, we don't know where the width and height parameters come from
  • post the full log of the errors you get

Please help us help you :wink:

To clarify, there's no reason to downgrade ESPhome flasher after you upgrade it. It's the flasher. It does not impact anything unless you update your devices to 2026.6. The flasher will not allow that because of configuration errors and your devices will continue to work. So there's other information here that seems to be missing/incorrect. Your devices still using the old version will work with home assistant 2026.6. So it really doesn't matter if you update ESPHome flasher or not.

@koying I haven't got the time now as I'm just on my way to work and as of tomorrow I am away for a couple of weeks, sorry. Just to clarify though the width and height were set in substitutions: as 320 and 240 respectively - I can't remember why I set it in the substitutions: block, i do have 2 other sizes so I may have just been lazy and thought it's an easy place to change the sizes right at the top of the code but never actually used the other 2. And again, other than the initial dimensions: error when compiling which I removed, there is no error. The code compiles and uploads correctly All the info from the text_sensors: are there pulled in from HA but there is only 3/4 of the display ever updated and the first 30px y-coordinate lines blink on and off, the other 210px stay static and display the correct info up to the point where they are cut off at x-coordinate 280px. I know I don't seem to be explaining this well but If no one else has the issue I'll update again and post a picture of what I mean.

@petro I know it's only the flasher but on update I normally press 'update all' as I have 30+ esp32 devices and go to work leaving the update to go on it's merry way. I only use a home assistant yellow device (updated with a CM5 module) so updating that many devices takes a while and as I said My mild OCD won't let me rest if I know there's an 'update' waiting. Sorry, it's just the way I am...

By the look of it (and remember I'm in no way technical) the device seems to be ignoring the orientation and defaulting to 240x320 - whereas I set mine to 320x240 - but i can not understand the blinking first 30 lines of the display

Its broken my CYD as well

annoying

Broke 2.8 inch one and didnt break the 3.2

Same problem here. The code was last changed after the 2026.4 update.

The display is totally messed up. It looks like when I set a label with lambda, it is placed on a different position on the screen.

          now.strftime(date_str, sizeof(date_str), "%d %b");
          lv_label_set_text(id(p1_de_tijd_digitaal), time_str);

So I see the time twice. The old and the new value on two different positions....

Even the right side (about 40 px) of the display is looking like white noise.

Dimensions are working for me. Very strange, because I just removed it and added it again....
This is my code:

display:
  - id: main_display
    platform: mipi_spi
    model: ILI9341
    spi_id: tft
    cs_pin:
      number: 15
      ignore_strapping_warning: true
    dc_pin:
      number: 2
      ignore_strapping_warning: true
    invert_colors: false
    color_depth: 16bit
    color_order: RGB
    update_interval: never
    auto_clear_enabled: false
    
    dimensions:
      width: 240
      height: 320
      
    transform:
      swap_xy: false
      mirror_x: true
      mirror_y: false # false

UPDATE:
There is a difference in the dimensions with my old version; the width should be 320, but I am not able to set it to 320. Only 240 is allowed.

UPDATE 2: PROBLEM SOLVED!!

Under LVGL add a line rotation: 90:

lvgl:
  buffer_size: 25%
  rotation: 90
  top_layer:

Then change your display section to:

display:
  - id: main_display
    platform: mipi_spi #ili9xxx
    model: ILI9341
    spi_id: tft
    cs_pin:
      number: 15
      ignore_strapping_warning: true
    dc_pin:
      number: 2
      ignore_strapping_warning: true
    invert_colors: false
    color_depth: 16bit
    color_order: RGB
    update_interval: never
    auto_clear_enabled: false

# Changed this the other way around:    
    dimensions:
      width: 240
      height: 320

# Swap xy was true but is now accomplished in LVGL by rotate: 90      
    transform:
      swap_xy: true #false
      mirror_x: false
      mirror_y: false

Hope it solves your problems too...

PS I really like the new ESPHOME looks, great job!

If this is still an issue with the latest build 2026.6.1 - please file a bug report on it.

You can do this directly from within the ESPHome app (dot menu, top right).
Remember to add the error report and the yaml config for us to look at.

Same for me tried 2026.6.0 and 2026.6.1 both resulted in a white screen, reverted to 2026.5.3 all good. Github issue raised.

MIPI_SPI Driver ILI9341 broken on ESPHome 2026.6.0 and 2026.6.1 · Issue #1571 · esphome/device-builder

display:
  - platform: mipi_spi
    id: display1
    model: ILI9341
    dc_pin: GPIO27
    reset_pin: GPIO26
    rotation: 90
    update_interval: 10s
    lambda: |-
    rotation: 90`

rotation: 90 possible under display? If I do that, I get an error that it should be under LVGL:
use of 'rotation' in the display config is not compatible with LVGL, please set rotation in the LVGL config instead.

I really think that the problem is caused by the width property. I can not change it to 320.
I use the display horizontally.

Excellent, put that in an issue like @carlhye said

Problem solved, see my last post...

On my CYD, I had to twinkle quite a bit to make it work.
(horizontal use)

display:
  - platform: mipi_spi
    model: ILI9341
    ...
    dimensions:
      width: 240
      height: 320
    transform:
      swap_xy: true
      mirror_x: true
      mirror_y: true

touchscreen:
  - platform: xpt2046
    ...
    transform:
      swap_xy: false
      mirror_x: true
      mirror_y: false

lvgl:
  rotation: 270

I had the exact same issue with my CYDs.

After hours of tests, i think i've finally found some fixes, that apply for those using either LVGL or directly using it.xxx lambda code to print on the display.

I've documented both case in the following GH issue:

HTH