Help needed to get this tiny screen working - ESP32-c6 1.47in display

Got the same error, it’s due to framework/platform versions.
After fiddling around a bit, I got it working.
Here is my YAML, the only new thing I did is the RGB LED light control.

substitutions:
  id: esp32c6_lcd

esp32:
  board: esp32-c6-devkitc-1
  variant: esp32c6
  flash_size: 4MB
  framework:
    type: esp-idf
    version: 5.3.1
    platform_version: 6.9.0
    sdkconfig_options:
      CONFIG_ESPTOOLPY_FLASHSIZE_DETECT: y
      CONFIG_ESPTOOLPY_FLASHSIZE_4MB: y
      CONFIG_OPENTHREAD_ENABLED: n
      CONFIG_USE_MINIMAL_MDNS: y
      # Memory optimization
      COMPILER_OPTIMIZATION_SIZE: y
      COMPILER_OPTIMIZATION_LEVEL_RELEASE: y
      CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE: y
      CONFIG_HEAP_POISONING_DISABLED: y

esphome:
  friendly_name: "ESP32-C6 1.47 LCD"
  name: esp32c6-lcd
  name_add_mac_suffix: false
  project:
    name: "Waveshare.ESP32-C6-LCD-1-47in"
    version: "v"
  platformio_options:
    board_build.flash_mode: dio
    build_flags:
      - "-DI2C_NUM_1=I2C_NUM_0"
      - "-DBOARD_HAS_PSRAM"
      - "-Wl,-Map,output.map"
    board_build.arduino.memory_type: qio_opi
    platform_packages:
      - platformio/toolchain-xtensa-esp-elf @ 14.2.0+20241119
logger:

# RGB LED
light:
  - platform: esp32_rmt_led_strip
    id: "${id}_led"
    name: "Led"
    rgb_order: RGB
    pin: GPIO8
    num_leds: 1
    chipset: SK6812

api:
  encryption:
    key: "..."

ota:
  - platform: esphome
    password: "..."

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

i2c:
  - id: bus_a
    sda: GPIO1
    scl: GPIO2
    scan: False

spi:
  clk_pin: GPIO7
  miso_pin: GPIO5
  mosi_pin: GPIO6

one_wire:
  - pin: GPIO10
    platform: gpio

binary_sensor:
  - platform: status
    name: "Status"
    id: "${id}_status"
    icon: mdi:check-network
    entity_category: diagnostic

button:
  - platform: safe_mode
    name: "(Safe Mode)"
    icon: mdi:restart-alert
    id: "${id}_safe_mode"
    entity_category: config
    disabled_by_default: True
  - platform: restart
    name: "Restart"
    icon: mdi:restart
    id: "${id}_restart"
    # entity_category: diagnostic
    disabled_by_default: True
  - platform: shutdown
    name: "Shutdown"
    id: "${id}_shutdown"
    # entity_category: diagnostic
    disabled_by_default: True

time:
  - platform: homeassistant
    id: homeassistant_time

sensor:
  - platform: uptime
    type: timestamp
    name: Uptime
    entity_category: diagnostic

  - platform: wifi_signal
    name: WiFi Signal
    id: wifi_signal_db
    icon: mdi:wifi-strength-outline
    entity_category: diagnostic
    update_interval: 30s
    disabled_by_default: True

  - platform: homeassistant
    id: bureau_temperature
    entity_id: sensor.aqara_t_h_bureau_temperature

  - platform: homeassistant
    id: bureau_conso
    entity_id: sensor.consommation_totale_bureau

  - platform: homeassistant
    id: ups_baie_puissance_reelle_actuelle
    entity_id: sensor.ups_baie_puissance_reelle_actuelle

  - platform: homeassistant
    id: ups_pc_puissance_reelle_actuelle
    entity_id: sensor.ups_pc_puissance_reelle_actuelle

output:
  - platform: ledc
    pin: GPIO22
    id: lcd_backlight
    frequency: 1000 Hz

number:
  - platform: template
    name: "Display Brightness"
    id: display_brightness
    optimistic: true
    min_value: 0
    max_value: 100
    step: 1
    initial_value: 100
    restore_value: true
    mode: slider
    on_value:
      then:
        - output.set_level:
            id: lcd_backlight
            level: !lambda "return x / 100.0;"

display:
  - platform: st7789v
    cs_pin: GPIO14
    dc_pin:
      number: GPIO15
      ignore_strapping_warning: true
    reset_pin: GPIO21
    model: Waveshare 1.47in 172X320
    id: tft_ha
    rotation: 0

    lambda: |-
      ESP_LOGD("display", "Display update running");
      auto color = Color(40, 140, 186);


      // Draw the background image
      it.image(0, 0, id(background));

      // Time
      auto cur_time = id(homeassistant_time).now();
      if (cur_time.is_valid()) {
        auto hour = cur_time.hour;
        // Print formatted time
        it.printf((it.get_width()/2), +14, id(font20), color, TextAlign::CENTER, "%2d:%02d", hour, cur_time.minute);
      }

      // Ups #1
      if (id(ups_baie_puissance_reelle_actuelle).has_state()) {
        if (!isnan(id(ups_baie_puissance_reelle_actuelle).state)) {
          it.printf((it.get_width()/2)-38, 57, id(font20), color, TextAlign::CENTER, "%.0fw", id(ups_baie_puissance_reelle_actuelle).state);
        }
      }
      // Ups #2
      if (id(ups_pc_puissance_reelle_actuelle).has_state()) {
        if (!isnan(id(ups_pc_puissance_reelle_actuelle).state)) {
          it.printf((it.get_width()/2)+38, 57, id(font20), color, TextAlign::CENTER, "%.0fw", id(ups_pc_puissance_reelle_actuelle).state);
        }
      }

      // Measurement
      if (id(bureau_temperature).has_state()) {
        if (!isnan(id(bureau_temperature).state)) {
          it.printf(it.get_width()/2, (it.get_height()/2)-8, id(font62), color, TextAlign::CENTER, "%.0f", id(bureau_conso).state);
        }
      }     

      // Measurement
      if (id(bureau_temperature).has_state()) {
        if (!isnan(id(bureau_temperature).state)) {
          it.printf(it.get_width()/2, (it.get_height()/2)+44, id(font22), color, TextAlign::CENTER, "WATTS");
        }
      }     

      // Bottom Temperature
      if (id(bureau_temperature).has_state()) {
        if (!isnan(id(bureau_temperature).state)) {
          it.printf(it.get_width()/2, it.get_height()-23, id(font20), color, TextAlign::CENTER, "%.1f °C", id(bureau_temperature).state);
        }
      }

font:
  - file: "gfonts://Orbitron"
    id: font20
    size: 20      
  - file: "gfonts://Orbitron"
    id: font22
    size: 22     
  - file: "gfonts://Orbitron"
    id: font62
    size: 62    

image:
  - file: "images/1.47/background.png"
    type: rgb565
    id: background

And here is the result :

Hope that helps !

2 Likes