How to get LILYGO T-Block-Ep e-paper screen to work

Hi,
I’m trying to get my LilyGo T-Block-Ep-bk to work nicely with esphome and home-assistant.

The config i have right now looks like:

esphome:
  name: lilygo_tblock_ep
  platform: ESP32
  board: ttgo-t-watch

wifi:
  ssid: !secret wifi_ssid2
  password: !secret wifi_password2
  manual_ip:
    static_ip: 172.19.0.30
    gateway: 172.19.0.1
    subnet: 255.255.255.0
    dns1: 172.19.0.1

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: !secret api_password

ota:
  password: !secret ota_password

font:
  - file: 'fonts/Google_Sans_Bold.ttf'
    id: font_arth
    size: 16
  - file: 'fonts/Google_Sans_Bold.ttf'
    id: font_cs
    size: 20
  - file: 'fonts/materialdesignicons-webfont.ttf'
    id: icon_font
    size: 32
    glyphs: [
      # Wifi
      '冷', # mdi-wifi-strength-outline
      '爛', # mdi-wifi-strength-1
      '嵐', # mdi-wifi-strength-2
      '襤', # mdi-wifi-strength-3
      '蠟', # mdi-wifi-strength-4
      ]

spi:
  clk_pin: 18
  mosi_pin: 23

display:
  - platform: waveshare_epaper
    cs_pin: 5
    dc_pin: 19
    busy_pin: 34
    reset_pin: 27
    model: 1.54in
    lambda: |-
      int x, y;
      it.print(1, 1, id(font_cs), "Home-Assistant:");
      it.printf(1, 42, id(font_arth), "Temp:");
      it.printf(55, 42, id(font_cs), "%.1fc", id(offtmp).state);
      it.printf(1, 62, id(font_arth), "CO2:");
      it.printf(55, 62, id(font_cs), "%.1fppm", id(offco2).state);
      it.printf(1, 190, id(font_arth), "Fiona:");
      it.printf(55, 190, id(font_cs), "%s", id(pfiona).state.c_str());
      
      /* WiFi Signal Strenght */
      if(id(wifisignal).has_state()) {
        x = 200, y = 200;
        if (id(wifisignal).state >= -50) {
            //Excellent
            it.print(x, y, id(icon_font), TextAlign::BOTTOM_RIGHT, "蠟");
            ESP_LOGI("WiFi", "Exellent");
        } else if (id(wifisignal).state  >= -60) {
            //Good
            it.print(x, y, id(icon_font), TextAlign::BOTTOM_RIGHT, "襤");
            ESP_LOGI("WiFi", "Good");
        } else if (id(wifisignal).state  >= -67) {
            //Fair
            it.print(x, y, id(icon_font), TextAlign::BOTTOM_RIGHT, "嵐");
            ESP_LOGI("WiFi", "Fair");
        } else if (id(wifisignal).state  >= -70) {
            //Weak
            it.print(x, y, id(icon_font), TextAlign::BOTTOM_RIGHT, "爛");
            ESP_LOGI("WiFi", "Weak");
        } else {
            //Unlikely working signal
            it.print(x, y, id(icon_font), TextAlign::BOTTOM_RIGHT, "冷");
            ESP_LOGI("WiFi", "Unlikely");
        }
      }
    
sensor:
  - platform: homeassistant
    entity_id: sensor.kantoor_netatmo_temperature
    id: offtmp
    internal: true
    
  - platform: homeassistant
    entity_id: sensor.kantoor_netatmo_co2
    id: offco2
    internal: true
    
  - platform: wifi_signal
    name: "WiFi Signal Sensor"
    id: wifisignal
    update_interval: 60s

text_sensor:
  - platform: homeassistant
    entity_id: person.fiona
    id: pfiona
    internal: true

The problem i’m having is that the display does not do a full refresh for some reason. What causes it to look like:


I have tried to configure the full_update_every option but this does not help.
If someone knows how to solve this it would help me a great deal.

On further investigation it looks like it is a waveshare e-paper hink-e0154a07-a1.
It is on a Lilygo Trolley_e-paper_TP_v02 hat.
Latest version of my config:

esphome:
  name: lilygo_tblock_ep
  platform: ESP32
  board: ttgo-t-watch

wifi:
  ssid: !secret wifi_ssid2
  password: !secret wifi_password2
  manual_ip:
    static_ip: 172.19.0.30
    gateway: 172.19.0.1
    subnet: 255.255.255.0
    dns1: 172.19.0.1

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: !secret api_password

ota:
  password: !secret ota_password

# s= '@!"%()+,-_.:°0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz.'
# print([','.join(_) for _ in s])

font:
  - file: 'fonts/Google_Sans_Bold.ttf'
    id: font_arth
    size: 16
  - file: 'fonts/Google_Sans_Bold.ttf'
    id: font_cs
    size: 20
  - file: 'fonts/materialdesignicons-webfont.ttf'
    id: icon_font
    size: 32
    glyphs: [
      # Wifi
      '冷', # mdi-wifi-strength-outline
      '爛', # mdi-wifi-strength-1
      '嵐', # mdi-wifi-strength-2
      '襤', # mdi-wifi-strength-3
      '蠟', # mdi-wifi-strength-4
      ]

spi:
  clk_pin: 18
  mosi_pin: 23

display:
  - platform: waveshare_epaper
    cs_pin: 5
    dc_pin: 19
    busy_pin: 34
    reset_pin: 27
    model: 1.54in
    rotation: 90
    full_update_every: 180
    lambda: |
      int x, y;
      it.print(1, 1, id(font_cs), "Home-assistant");
      
      it.printf(1, 42, id(font_cs), "Temp:");
      it.printf(65, 42, id(font_cs), "%.1fc", id(offtmp).state);
      it.printf(1, 62, id(font_cs), "CO2:");
      it.printf(65, 62, id(font_cs), "%.1fppm", id(offco2).state);
      it.printf(1, 190, id(font_cs), "Fiona:");
      it.printf(65, 190, id(font_cs), "%s", id(pfiona).state.c_str());
      
      /* WiFi Signal Strenght */
      if(id(wifisignal).has_state()) {
        x = 200, y = 200;
        if (id(wifisignal).state >= -50) {
            //Excellent
            it.print(x, y, id(icon_font), TextAlign::BOTTOM_RIGHT, "蠟");
        } else if (id(wifisignal).state  >= -60) {
            //Good
            it.print(x, y, id(icon_font), TextAlign::BOTTOM_RIGHT, "襤");
        } else if (id(wifisignal).state  >= -67) {
            //Fair
            it.print(x, y, id(icon_font), TextAlign::BOTTOM_RIGHT, "嵐");
        } else if (id(wifisignal).state  >= -70) {
            //Weak
            it.print(x, y, id(icon_font), TextAlign::BOTTOM_RIGHT, "爛");
        } else {
            //Unlikely working signal
            it.print(x, y, id(icon_font), TextAlign::BOTTOM_RIGHT, "冷");
            ESP_LOGI("WiFi", "Unlikely");
        }
      }
      
sensor:
  - platform: homeassistant
    entity_id: sensor.kantoor_netatmo_temperature
    id: offtmp
    internal: true
    
  - platform: homeassistant
    entity_id: sensor.kantoor_netatmo_co2
    id: offco2
    internal: true
    
  - platform: wifi_signal
    name: "WiFi Signal Sensor"
    id: wifisignal
    update_interval: 60s

text_sensor:
  - platform: homeassistant
    entity_id: person.fiona_boter
    id: pfiona
    internal: true

Still i can’t get the e-paper to clean up.

I somewhat solved it by adding has_state:

      if (id(offtmp).has_state()) {
      it.printf(65, 42, id(font_cs), "%.1fc", id(offtmp).state);
      }