ESP32-1732s019 with integrated display, help needed

Hey guys, I tried making the integrated display work on the ESP board listed below
I did manage to research the pins on the Ali page and make the display light up along with a display on/off switch in HA.
However, I’m unable to display anything on there. All I’m getting is this:


Here comes my YAML. I would really appreciated if anyone could pouint me to the right direction. The ultimate goal here is to display a state of a HA entity (temperature). As you can see, I did try to get help from AI, that’s what’s with the notes :smiley:
https://www.aliexpress.com/item/1005005059421229.html?spm=a2g0o.order_list.order_list_main.5.1ac11802iHn2qe

esphome:
  name: esphome-web-813d00
  friendly_name: ESPHomeDisplay
  min_version: 2024.11.0
  name_add_mac_suffix: false

  on_boot:
    priority: 800
    then:
     - lambda: |-
        id(disp).enable();
        id(disp).transfer_byte(0x11);
        id(disp).disable();
esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: esp-idf

# Enable logging
logger:

font:
  - file: "gfonts://Roboto"
    id: roboto_font
    size: 20

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
- platform: esphome

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

# Example configuration entry with 2 sensors and filter

sensor:
  - platform: wifi_signal # Reports the WiFi signal strength/RSSI in dB
    name: "WiFi Signal dB"
    id: wifi_signal_db
    update_interval: 60s
    entity_category: "diagnostic"

  - platform: copy # Reports the WiFi signal strength in %
    source_id: wifi_signal_db
    name: "WiFi Signal Percent"
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    unit_of_measurement: "Signal %"
    entity_category: "diagnostic"
    device_class: ""


spi:
  clk_pin: GPIO12  # Likely SCK (SPI Clock)
  mosi_pin: GPIO13 # Likely MOSI (SPI Data)


display:
  - platform: st7789v
    model: CUSTOM
    eightbitcolor: False
    rotation: 270
    width: 170
    height: 320
    offset_width: 0
    offset_height: 35
    cs_pin: GPIO10    # Could be Chip Select (not confirmed)
    dc_pin: GPIO11    # Likely Data/Command (D/C)
    reset_pin: GPIO1 # Likely Reset (RST)
    id: disp
    auto_clear_enabled: false
    update_interval: never
    lambda: |-
      it.fill(Color::BLACK);
      delay(100);
      it.print(10, 10, id(roboto_font), Color::WHITE, TextAlign::TOP_LEFT, "Hello, World!");

output:
  - platform: gpio
    pin:
      number: GPIO14
      allow_other_uses: true  # Adjust based on your board
    id: backlight_control

light:
  - platform: binary
    output: backlight_control
    name: "Display Backlight"
    restore_mode: ALWAYS_ON


# Example configuration entry
# Example configuration entry
switch:
  - platform: gpio
    pin:
      number: GPIO14
      allow_other_uses: true
    name: "ESP Display"
    icon: "mdi:gate"


What’s the point?
Also, configure your PSRAM
and try with ILI9xxx component

Not really sure, learning as I go. Any ideas how to modify the yaml to make the existing display work, please?

Add this component to your yaml

psram:
  mode: octal
  speed: 80MHz

and give update interval 1s for example.

If you don’t get life on your display, try with ILI9xxx component:

display:
  - platform: ili9xxx
    model: st7789v
    dimensions:
      height: 170
      width: 320
      offset_height: 35
      offset_width: 0

    color_order: bgr
    invert_colors: true
    data_rate: 40MHz
    cs_pin: GPIO10    # Could be Chip Select (not confirmed)
    dc_pin: GPIO11    # Likely Data/Command (D/C)
    reset_pin: GPIO1 # Likely Reset (RST)
    id: disp
    show_test_card: true
1 Like

Thanks so much! This did get me a step further, not quite yet. Any ideas? I’ll do research of my own in the meantime, but any help is much appreciated!

esphome:
  name: esphome-web-813d00
  friendly_name: ESPHomeDisplay
  min_version: 2024.11.0
  name_add_mac_suffix: false

  on_boot:
    priority: 800
    then:
      - lambda: |-
          id(disp).enable();
          id(disp).transfer_byte(0x11);
          id(disp).disable();
esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: esp-idf

psram:
  mode: octal
  speed: 80MHz

# Enable logging
logger:

font:
  - file: "gfonts://Roboto"
    id: roboto_font
    size: 20

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
- platform: esphome

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

# Example configuration entry with 2 sensors and filter

sensor:
  - platform: wifi_signal # Reports the WiFi signal strength/RSSI in dB
    name: "WiFi Signal dB"
    id: wifi_signal_db
    update_interval: 60s
    entity_category: "diagnostic"

  - platform: copy # Reports the WiFi signal strength in %
    source_id: wifi_signal_db
    name: "WiFi Signal Percent"
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    unit_of_measurement: "Signal %"
    entity_category: "diagnostic"
    device_class: ""


spi:
  clk_pin: GPIO12  # Likely SCK (SPI Clock)
  mosi_pin: GPIO13 # Likely MOSI (SPI Data)


display:
  - platform: ili9xxx
    model: st7789v
    dimensions:
      height: 170
      width: 320
      offset_height: 35
      offset_width: 0

    color_order: bgr
    invert_colors: true
    data_rate: 40MHz
    cs_pin: GPIO10    # Could be Chip Select (not confirmed)
    dc_pin: GPIO11    # Likely Data/Command (D/C)
    reset_pin: GPIO1 # Likely Reset (RST)
    update_interval: 1s
    id: disp
    show_test_card: true
    lambda: |-
      it.fill(Color::BLACK);
      delay(100);
      it.print(10, 10, id(roboto_font), Color::WHITE, TextAlign::TOP_LEFT, "Hello, World!");

output:
  - platform: gpio
    pin:
      number: GPIO14
      allow_other_uses: true  # Adjust based on your board
    id: backlight_control

light:
  - platform: binary
    output: backlight_control
    name: "Display Backlight"
    restore_mode: ALWAYS_ON

What’s the output? Anything on the display? Errors on log?

Sorry, forgot to attach the image. No errors in the log

Not bad.
You need to play with parameters of ILI9 component.

Should print test image with red/green/blue bars.

You mean like the data rate, color invert, etc.?

I have never used that kind of display.
But yes, data rate, spi_mode …

Still no luck, the furthest I got is this. It is progress, but still nowhere near :frowning:

esphome:
  name: esphome-web-813d00
  friendly_name: ESPHomeDisplay
  min_version: 2024.11.0
  name_add_mac_suffix: false

  on_boot:
    priority: 800
    then:
      - lambda: |-
          id(disp).enable();
          id(disp).transfer_byte(0x11);
          id(disp).disable();
esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: esp-idf

psram:
  mode: octal
  speed: 80MHz

# Enable logging
logger:

font:
  - file: "gfonts://Roboto"
    id: roboto_font
    size: 20

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
- platform: esphome

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

# Example configuration entry with 2 sensors and filter

sensor:
  - platform: wifi_signal # Reports the WiFi signal strength/RSSI in dB
    name: "WiFi Signal dB"
    id: wifi_signal_db
    update_interval: 60s
    entity_category: "diagnostic"

  - platform: copy # Reports the WiFi signal strength in %
    source_id: wifi_signal_db
    name: "WiFi Signal Percent"
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    unit_of_measurement: "Signal %"
    entity_category: "diagnostic"
    device_class: ""

spi:
  clk_pin: GPIO12  # Likely SCK (SPI Clock)
  mosi_pin: GPIO13 # Likely MOSI (SPI Data)

display:
  - platform: ili9xxx
    model: st7789v
    dimensions:
      height: 170
      width: 320
      offset_height: 35
      offset_width: 0

    color_order: bgr
    invert_colors: true
    data_rate: 80MHz
    spi_mode: 0
    cs_pin: GPIO10    # Could be Chip Select (not confirmed)
    dc_pin: GPIO11    # Likely Data/Command (D/C)
    reset_pin: GPIO1 # Likely Reset (RST)
    update_interval: 1s
    id: disp
    rotation: 270
    show_test_card: true
    lambda: |-
      it.fill(Color::BLACK);
      delay(100);
      it.print(10, 10, id(roboto_font), Color::WHITE, TextAlign::TOP_LEFT, "Hello, World!");

output:
  - platform: gpio
    pin:
      number: GPIO14
      allow_other_uses: true  # Adjust based on your board
    id: backlight_control

light:
  - platform: binary
    output: backlight_control
    name: "Display Backlight"
    restore_mode: ALWAYS_ON

So you tried also lower data rate, like 20MHz and all spi modes 0-3?
You could also try adding miso_pin (some unused generic pin) on spi component.

I did. Tried that, put MISO pin as GPIO15, an unused pin according to the pinout listed, but the result is the same

Try swapping the height and width and read the docs section about transform.

That was it, we have life! Thanks so much to both for helping. For anyone wondering, below is my YAML that shows the test screen correctly

esphome:
  name: esphome-web-813d00
  friendly_name: ESPHomeDisplay
  min_version: 2024.11.0
  name_add_mac_suffix: false


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

psram:
  mode: octal
  speed: 80MHz

# Enable logging
logger:

font:
  - file: "gfonts://Roboto"
    id: roboto_font
    size: 20

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
- platform: esphome

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

# Example configuration entry with 2 sensors and filter

sensor:
  - platform: wifi_signal # Reports the WiFi signal strength/RSSI in dB
    name: "WiFi Signal dB"
    id: wifi_signal_db
    update_interval: 60s
    entity_category: "diagnostic"

  - platform: copy # Reports the WiFi signal strength in %
    source_id: wifi_signal_db
    name: "WiFi Signal Percent"
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    unit_of_measurement: "Signal %"
    entity_category: "diagnostic"
    device_class: ""

spi:
  clk_pin: GPIO12  # Likely SCK (SPI Clock)
  mosi_pin: GPIO13 # Likely MOSI (SPI Data)
  miso_pin: GPIO15

display:
  - platform: ili9xxx
    model: st7789v
    dimensions:
      height: 320
      width: 170
      offset_height: 0
      offset_width: 35


    color_order: bgr
    invert_colors: true
    data_rate: 5MHz
    spi_mode: 0
    cs_pin: GPIO10    # Could be Chip Select (not confirmed)
    dc_pin: GPIO11    # Likely Data/Command (D/C)
    reset_pin: GPIO1 # Likely Reset (RST)
    update_interval: 1s
    id: disp
    rotation: 90
    show_test_card: true

output:
  - platform: gpio
    pin:
      number: GPIO14
      allow_other_uses: true  # Adjust based on your board
    id: backlight_control

light:
  - platform: binary
    output: backlight_control
    name: "Display Backlight"
    restore_mode: ALWAYS_ON


# Example configuration entry
# Example configuration entry
switch:
  - platform: gpio
    pin:
      number: GPIO14
      allow_other_uses: true
    name: "ESP Display"
    icon: "mdi:gate"


2 Likes

Great, but remove rotation and use transform instead - will make display updates faster.

Will do, thanks!

Thanks for posting, I have the same board, and have got it working in HA like yours, i also added the lines to make it a BLE Gateway, but my quesion is how your update the content on the display from Home Assistant? Whats your use case with this deivce?
Idealy it woul dbe good to be able to display data such as “Number of new BLE Devices Discovered” on the dislpay, and then update to something else when there are no new BLE devices discovered.