HomeDicator - ESPHome Touchscreen Dashboard using the SenseCap Indicator

Hi there,
I started working on a ESPHome firmware for the SenseCap Indicator. This is still very much work in progress and still has a lot of moving parts but maybe someone finds this useful!

Link: HomeDicator · GitHub

Best,
Paul

8 Likes

Greetings,
This is awesome. I have forked and created a GUI (monitoring) for another project.

I have also created a tile: sensor/wide_half_height
Code here:
GitHub - PaulSchulz/HomeDicator at dynamic-operating-envelope

Cheers,
(another) Paul

Neat! Just a suggestion: Maybe instead of forking the whole thing it makes sense to only provide a custom main yaml file on your GitHub as in a HomeDicator configuration? So users of your fork benefit from other updates in my code as well?

Also you are welcome to send a pull request for your wide_half_height tile!

Best,
Paul

1 Like

I was waiting for someone smart enough to make this! Thanks!!

2 Likes

Glad you like it! :smiling_face:

It’d be nice if there was a little more documentation on how to actually get the complied code onto the device. I have not clue. Got it to compile but I have no clue how to get it on the device.

Since this is not specific to this firmware please try following the official guide for this! Some more info can also be found here although not ESPHome specific. Is there anything specific not working?

Thanks for your help. I finally figured out that I was compiling the wrong file. I now have it working and in Home Assistant!!

Thanks a ton for all your hard work!

Mike

Hello,
This is a very interesting project.
Before I install the firmware, I have two questions:
How is the data from the internal sensors transmitted to HA?
Can I address these sensors somehow or is the project only for use as a display device?
Best regards
Michael

Not yet but there are two open pull request for that which I will look into later today:

This is truly superb, thank you!

I noticed on the the SenseCAP GitHub page they also show tiles containing what look like switches. Is this something you have considered adding or you could give some guidance as to how to go about adding them? Thanks

Hi,
I do plan to add this but haven’t had the time yet.

Best,
Paul

Sadly can’t seem to get this to work, which is sad because the idea is awesome. After flashing it to the device the screen just goes black. :frowning:

Update: I finally got it working, but when I tried to change it to use my sensors, I suddenly got some weird errors in ESP Home about not supporting the display.

I really like this project! I’ve been frustrated with the verbosity of LVGL YAML descriptions and the amount of boilerplate declarations for touchscreen devices.

It would be easy to add various hardware device templates, giving the ability to easily port tiles and GUIs to different devices – rather than copy and pasting them from the ESPHome device database. Would also be easier to keep them in sync and updated along with ESPHome itself.

Is there a way to sync a git repo in the esphome config directory or some nicer way to keep these templates up-to-date other than uploading a zip file? Something like HACS??

@paviro I hope you don’t mind but I copied the content of your hardware.yaml file and created a page for the Seeed SenseCAP Indicator for the esphome device database and submitted a pull request.

For those of you who find installing this (great) package cumbersome, you can “simply” copy/paste the following in your ESPHome YAML file – but you’re on your own with defining the sensors and LVGL widgets…

esphome:
  name: seeed-sensecap
  friendly_name: Seeed SenseCAP

esp32:
  board: esp32-s3-devkitc-1
  variant: esp32s3
  flash_size: 8MB
  framework:
    type: esp-idf
    sdkconfig_options:
      CONFIG_ESPTOOLPY_FLASHSIZE_8MB: y
      CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240: y
      CONFIG_ESP32S3_DATA_CACHE_64KB: y
      CONFIG_SPIRAM_FETCH_INSTRUCTIONS: y
      CONFIG_SPIRAM_RODATA: y

psram:
  mode: octal
  speed: 80MHz

output:
  - platform: ledc
    pin:
      number: GPIO45
      ignore_strapping_warning: true
    id: ledc_gpio45
    frequency: 100Hz

i2c:
  - id: bus_a
    sda: GPIO39
    scl: GPIO40
    scan: false

spi:
  - id: lcd_spi
    clk_pin: GPIO41
    mosi_pin: GPIO48

pca9554:
  - id: pca9554a_device
    address: 0x20
    pin_count: 16

display:
  - platform: st7701s
    id: sensecap_display
    auto_clear_enabled: false
    data_rate: 4MHz
    update_interval: never
    spi_mode: MODE3
    color_order: RGB
    dimensions:
      width: 480
      height: 480
    invert_colors: true
    transform:
      mirror_x: true
      mirror_y: true
    cs_pin:
      pca9554: pca9554a_device
      number: 4
    reset_pin:
      pca9554: pca9554a_device
      number: 5
    de_pin: GPIO18
    hsync_pin: GPIO16
    vsync_pin: GPIO17
    pclk_pin: GPIO21
    init_sequence:
      - 1 # select canned init sequence number 1
      - delay 5ms
      - [ 0xE0, 0x1F ]  # Set sunlight readable enhancement
    data_pins:
      red:
        - GPIO4         #r1
        - GPIO3         #r2
        - GPIO2         #r3
        - GPIO1         #r4
        - GPIO0         #r5
      green:
        - GPIO10        #g0
        - GPIO9         #g1
        - GPIO8         #g2
        - GPIO7         #g3
        - GPIO6         #g4
        - GPIO5         #g5
      blue:
        - GPIO15        #b1
        - GPIO14        #b2
        - GPIO13        #b3
        - GPIO12        #b4
        - GPIO11        #b5

light:
  - platform: monochromatic
    name: "Backlight"
    id: backlight
    output: ledc_gpio45
    restore_mode: ALWAYS_ON

touchscreen:
  platform: ft5x06
  id: sensecap_touchscreen
  transform:
    mirror_x: true
    mirror_y: true
  on_release:
    - if:
        condition: lvgl.is_paused
        then:
          - lvgl.resume:
          - lvgl.widget.redraw:
          - light.turn_on: backlight

image:
  - file: https://esphome.io/_static/favicon-512x512.png
    id: boot_logo
    resize: 200x200
    type: RGB565
    transparency: alpha_channel

lvgl:
  on_idle:
    timeout: !lambda "return 10000;"
    then:
      - light.turn_off: backlight
      - lvgl.pause:

  top_layer: 
    widgets:   
      - obj:
          id: boot_screen
          x: 0
          y: 0
          width: 100%
          height: 100%
          bg_color: 0xffffff
          bg_opa: COVER
          radius: 0
          pad_all: 0
          border_width: 0
          widgets:
            - image:
                align: CENTER
                src: boot_logo
                y: -40
            - spinner:
                align: CENTER
                y: 95
                height: 50
                width: 50
                spin_time: 1s
                arc_length: 60deg
                arc_width: 8
                indicator:
                  arc_color: 0x18bcf2
                  arc_width: 8
2 Likes

This is fantastic. Thanks to you both. I have a couple of these running now, and they work great.

1 Like