ESP32-S3 Arduino LVGL WIFI&Bluetooth Development Board 4.0 "480 * 480 Smart Display 4.0 inch LCD TFT Module Capacitive Touch

Here with the touchscreen working as well:



captive_portal:

time:
  - platform: homeassistant
    timezone: "Australia/Melbourne"
    id: esptime

# Need to turn on backlight as by default is not on
output:
  - platform: ledc
    pin: 38
    id: gpio_38_backlight_pwm
light:
  - platform: monochromatic
    output: gpio_38_backlight_pwm
    name: "Display Backlight"
    id: back_light
    restore_mode: ALWAYS_ON

sensor:
  - platform: uptime
    name: "$devicename Uptime"
  - platform: wifi_signal
    name: "$devicename WiFi Signal"
    update_interval: 60s 
  - platform: homeassistant
    id: devils_ivy_moisture
    entity_id: sensor.flower_care_moisture
  - platform: homeassistant
    id: outdoor_temperature
    entity_id: sensor.temperature_humidity_sensor_f402_temperature

# Example configuration entry
i2c:
  - id: bus_a
    sda: 19
    scl: 45
    scan: false
    frequency: 10kHz

psram:
  mode: octal
  speed: 80MHz

spi:
  clk_pin: 48
  mosi_pin: 47
  miso_pin: 41

font:
  - file: 'fonts/arial.ttf'
    id: font_16
    size: 16
  - file: 'fonts/arial.ttf'
    id: font_24
    size: 24
  - file: 'fonts/arial.ttf'
    id: font_32
    size: 32

color:
  - id: my_red
    red: 100%
    green: 1%
    blue: 1%
  - id: my_green
    red: 3%
    green: 100%
    blue: 5%
  - id: my_blue
    red: 3%
    green: 5%
    blue: 100%
  - id: my_white
    red: 100%
    green: 100%
    blue: 100%
  - id: my_black
    red: 1%
    green: 1%
    blue: 1%

touchscreen:
  platform: gt911
  id: touchscreen_4_inches
  i2c_id: bus_a
  on_touch:
    then:
      - display.page.show_next: display_4_inches
      - component.update: display_4_inches
      - logger.log: "Touch, go to next page"

display:
  - platform: st7701s
    id: display_4_inches
    spi_mode: MODE3
    color_order: bgr
    #invert_colors: true
    dimensions:
      width: 480
      height: 480
    cs_pin: 39
    de_pin: 18
    hsync_pin: 16
    hsync_pulse_width: 9
    hsync_front_porch: 10
    hsync_back_porch: 50
    vsync_pin: 17
    vsync_pulse_width: 9
    vsync_front_porch: 10
    vsync_back_porch: 20
    pclk_pin: 21
    #pclk_frequency: 8MHz
    #pclk_inverted: false
    update_interval: never
    auto_clear_enabled: false
    #data_rate: 75kHz
    #init_sequence:
    #  - 1 # select canned init sequence number 1
    #  - [ 0xE0, 0x1F ]  # Set sunlight readable enhancement
    data_pins:
      blue:
        - 11        #b1
        - 12        #b2
        - 13        #b3
        - 14        #b4
        - 0        #b5
      green:
        - 8        #g0
        - 20         #g1
        - 3         #g2
        - 46         #g3
        - 9         #g4
        - 10         #g5
      red:
        - 4         #r1
        - 5         #r2
        - 6         #r3
        - 7         #r4
        - 15         #r5
    pages:
      - id: page1
        lambda: |-
          it.filled_rectangle(0, 0, 241, 241, my_black);
          it.strftime(120,70, id(font_24), id(my_blue), TextAlign::CENTER, "%A %b %d", id(esptime).now());
          it.strftime(120,120, id(font_32), TextAlign::CENTER, "%I:%M %p", id(esptime).now());
          it.printf(120, 170, id(font_32), id(my_green), TextAlign::CENTER, "Now: %.1f°", id(outdoor_temperature).state);
          it.circle(120, 120, 117, id(my_white));
          it.circle(120, 120, 118, id(my_white));
      - id: page2
        lambda: |-
          it.filled_rectangle(0, 0, 241, 241, my_black);
          it.print(120, 100, id(font_32),  id(my_white), TextAlign::CENTER, "Zanzibar Gem");
          it.printf(120, 150, id(font_32), id(my_green), TextAlign::CENTER, "%.1f %%", id(devils_ivy_moisture).state);
          if (id(devils_ivy_moisture).state>15) {
            it.circle(120, 120, 115, id(my_green));
            it.circle(120, 120, 116, id(my_green));
            it.circle(120, 120, 117, id(my_green));
            it.circle(120, 120, 118, id(my_green));
            it.circle(120, 120, 119, id(my_green));
            it.circle(120, 120, 120, id(my_green));
          } else {
            it.circle(120, 120, 115, id(my_red));
            it.circle(120, 120, 116, id(my_red));
            it.circle(120, 120, 117, id(my_red));
            it.circle(120, 120, 118, id(my_red));
            it.circle(120, 120, 119, id(my_red));
            it.circle(120, 120, 120, id(my_red));
          }