An E-Ink Status Display - First Steps

I’ve been looking at the excellent TRMNL TRMNL device and have been very impressed by the simple ecosystem they have created and the openness of the software. My particular itch was to create a display showing information about elements of our home. Things like energy usage/generation, car charge levels, weather forecasts etc. It looks like this would all be possible with TRMNL and I might need to write a simple plugin for the homeassistant data I wanted to consume. However, the waiting list for a device had grown significantly so I had to look at alternates.

TRMNL do allow you to use the software stack and servers they run for a small one-time fee, but I decided to roll my own. BTW - TRMNL are almost certainly right that buying hardware from them will be cheaper than rolling your own.

I ordered a Waveshare 7.5” e-ink display and found a firebeetle2 in my box of bits previously used for hydroponic monitoring.

Getting the waveshare display working with the firebeetle 2 has been a challenge.

The core issues I’ve had were actually in the GPIO pin mapping to the firebeetle itself.

The waveshare display comes with a HAT that makes it possible to wire up to an ESP32 style device (like the firebeetle) and a Raspberry PI block that you can push onto the pins of a PI directly. After several hours of messing with the firebeetle I’d become convinced that I had a bad display as I couldn’t get anything out of it. In desperation, I plugged it into an old PI W and installed a python test bench and found the display was fine.

After digging, I found the following page from the firebeetle manufacturer https://wiki.dfrobot.com/FireBeetle_Board_ESP32_E_SKU_DFR0654 and this shows that the pin->GPIO mappings had previously been using are plain wrong. For me, the following config is working for my V2 waveshare display

font:
  - file: "fonts/Acumin-Pro-Medium.ttf"
    id: tm20
    size: 20

spi:
  id: spiBus0
  clk_pin: GPIO13
  mosi_pin: GPIO14 # DIN

display:
  - platform: waveshare_epaper
    id: displayComponent
    model: 7.50inv2

    #pins
    busy_pin:
      number: GPIO25
      inverted: true
    reset_pin: GPIO26
    cs_pin: GPIO15
    dc_pin: GPIO4
    spi_id: spiBus0

    update_interval: 60s
    reset_duration: 2ms
    # rotation: 270
    lambda: |-
      it.print(100, 100, id(tm20),"Hello World");

Make sure you install a font in the esphome directory in your homeassistant server.

E-ink display showing hello world