Problem with lvgl

8MB psram requires octal mode, you need to specify that in your config.

I got this working on the Xiao ESP32 S3.
I had to specify each detail of the board for the PSRAM to be recognised.
Not sure why some boards need this and some do not.
Here are the relevant parts of my config, this is partially copied ffrom sample projects online, I have not tested to see if all of it is actually needed.


esphome:
  name: $node_name
  friendly_name: $verbose_name
  comment: $comment
  platformio_options:
    board_build.arduino.memory_type: qio_opi
    board_build.flash_mode: qio
    build_flags:
      - "-DCONFIG_SPIRAM_CACHE_WORKAROUND"
      - "-mfix-esp32-psram-cache-issue"

esp32:
  board: esp32-s3-devkitc-1
  variant: esp32s3
  flash_size: 8MB
  framework:
    type: arduino

psram:
  mode: octal
  speed: 80MHz

I am able to use the version of the driver that can do partial updates and it seems to work.

BTW. The ESP32 S2 above died … USB stopped working, the second one I have had that did this … buyer beware :-/

Thanks

I started looking at which parts of the config I posted below were redundant.

To start, I commented out the platformio_options section and the S3’s PSRAM was no longer recognised.

I did not carry on :-/

I am starting with an ESP32 S3 480 x480.

I finished my building and OTA-upload with this:

......
Copied firmware to /data/build/esp-display/.pioenvs/esp-display/firmware.ota.bin
======================== [SUCCESS] Took 180.40 seconds ========================
INFO Build Info: config_hash=0xd1dd60ed build_time_str=2026-02-15 14:42:20 +0100
INFO Successfully compiled program.
INFO Connecting to 192.168.178.65 port 3232...
INFO Connected to 192.168.178.65
INFO Uploading /data/build/esp-display/.pioenvs/esp-display/firmware.bin (1078112 bytes)
Uploading: [============================================================] 100% Done...

INFO Upload took 2.97 seconds, waiting for result...
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from 192.168.178.65 using esphome API
INFO Successfully resolved esp-display @ 192.168.178.65 in 0.000s
WARNING Can't connect to ESPHome API for esp-display @ 192.168.178.65: Error connecting to [AddrInfo(family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, proto=6, sockaddr=IPv4Sockaddr(address='192.168.178.65', port=6053))]: [Errno 113] Connect call failed ('192.168.178.65', 6053) (SocketAPIError)
INFO Trying to connect to esp-display @ 192.168.178.65 in the background

I only see a black screen.
When I push the reset-button I get the old application.

These are my relevant configs:

esphome:
  name: "esp-display"
  friendly_name: "esp-display"
  comment: "Guition ESP32-S3-4848S040 480px * 480px Smart Screen"
  platformio_options:
      build_flags: "-DBOARD_HAS_PSRAM"
      board_build.arduino.memory_type: qio_opi  
      board_build.flash_mode: qio
  # on_boot:
  #   - priority: 400
  #     then:
  #       - script.execute: update_loading_page

esp32:
  board: esp32s3box
  flash_size: 16MB
  # board_build.flash_mode: dio
  framework:
    type: esp-idf
    sdkconfig_options:
      CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240: "y"
      CONFIG_ESP32S3_DATA_CACHE_64KB: "y"
      CONFIG_ESP32S3_DATA_CACHE_LINE_64B: "y"
      CONFIG_PM_ENABLE: "y"  # Enable power management
      CONFIG_PM_DFS_INIT_AUTO: "y"  # Enable automatic dynamic frequency scaling

psram:
  mode: octal
  speed: 80MHz

preferences:
  flash_write_interval: 5min

#-------------------------------------------
# LCD Back light
#-------------------------------------------
output:
  - platform: ledc
    pin: GPIO47
    id: display_backlight_output

light:
  - platform: monochromatic
    id: display_backlight
    name: LCD Backlight
    entity_category: config
    output: display_backlight_output
    restore_mode: ALWAYS_ON
    default_transition_length: 250ms    

#-------------------------------------------
# Touchscreen gt911
#-------------------------------------------
i2c:
  - id: bus_a
    sda: GPIO08
    scl: GPIO18
    scan: true
    sda_pullup_enabled: true
    scl_pullup_enabled: true
    frequency: 100kHz

  - sda: GPIO41
    scl: GPIO40
    scan: true
    sda_pullup_enabled: true
    scl_pullup_enabled: true
    frequency: 50kHz
    id: bus_b

spi:
  clk_pin: 7
  mosi_pin: 6

touchscreen:
  - platform: gt911
    i2c_id: bus_a
    address: 0x5D
    id: my_touchscreen
    display: my_display
    interrupt_pin:
      number: GPIO3
      ignore_strapping_warning: true
    # on_touch:
    #   - script.execute: track_activity
    #   - logger.log:
    #       format: Touch at (%d, %d)
    #       args: [touch.x, touch.y]

#-------------------------------------------
# Display
#-------------------------------------------
display:
  - platform: ili9xxx
    id: my_display
    model: S3BOX
    data_rate: 40MHz
    dimensions:
      width: 320
      height: 240
    cs_pin: 5
    dc_pin: 4
    reset_pin:
      number: 48
      inverted: true
    update_interval: never
    auto_clear_enabled: false
    invert_colors: false

Can someone point me what I am doing wrong?