Files
2026-08-16 13:41:52 +02:00

17 KiB

ESPHome E-Paper Climate Display

A wall-mounted climate monitoring station powered by ESPHome, displaying real-time temperature and humidity data from 6 rooms, along with atmospheric pressure, battery status, household energy consumption, and solar power generation data.

License ESPHome Home Assistant


Table of Contents


Features

Display Features

  • 400x300 pixel e-paper display (WeAct 4.2" E-Paper Module, GDEY042T81)
  • 6-room climate grid showing temperature and humidity:
    • Balkon (Balcony)
    • Dnevna soba (Living Room)
    • Kopalnica (Bathroom)
    • Spalnica (Bedroom)
    • Soba (Room)
    • Kuhinja (Kitchen)
  • Footer with system information:
    • Atmospheric pressure (mbar)
    • Device battery level (%)
    • Daily household energy consumption (kWh)
    • Daily solar power generation (Wh)
    • Remote solar panel forecast (kWh)
    • Last update timestamp
  • Low-power design - E-paper only updates when necessary
  • Slovenian language interface for labels and status messages

Smart Features

  • Boot screen with loading animation while gathering data
  • Quiet hours scheduling - Automatic refresh pause (default: 23:59 - 04:59)
  • Manual refresh button - Force screen update anytime via TTP223 touch sensor
  • Backlight control - Temporary LED backlight via TTP223 touch sensor
  • Data caching - Remembers last values for quick display after restart
  • Home Assistant integration via native API with encryption

WeAct E-Paper Module Features

  • Built-in backlight - Front-lit display for low-light conditions
  • SPI interface - Fast and efficient communication
  • Wide viewing angle - E-paper technology for excellent readability
  • Low power consumption - Only draws power during screen updates
  • Compact design - All-in-one module with convenient header pins

Power Management

  • Deep sleep ready architecture
  • WiFi power save mode disabled for reliable connectivity
  • Captive portal for initial WiFi configuration

Hardware Requirements

Main Components

Component Model/Specification Quantity
Microcontroller Wemos D1 Mini (ESP8266) 1
E-Paper Display WeAct 4.2" E-Paper Module (GDEY042T81, 400x300) 1

User Input Components

Component Model/Specification Quantity
Touch Button (Refresh) TTP223 Capacitive Touch Module 1
Touch Button (Light) TTP223 Capacitive Touch Module 1
LED Backlight Built-in on WeAct E-Paper Module 1

Power Requirements

  • Voltage: 3.3V - 5V DC (USB or external)
  • Typical Current: ~80mA during refresh, <20mA standby
  • Recommended: USB power adapter (5V/1A) or USB power bank

Pinout Diagram

┌─────────────────────────────────────────────────────────────┐
│                    WEMOS D1 MINI                            │
│                   (ESP8266 Top View)                         │
│                                                              │
│    ┌──────────────────────────────────────────┐              │
│    │  [ANT]                        [USB]      │              │
│    │                                    │      │              │
│    └────────────────────────────────────┼──────┘              │
│                                          │                    │
│    3V3  ────────●────  3.3V Power       │                    │
│    GND  ────────●────  Ground          │                    │
│    D0   ────────●────  (Wake/GPIO16)   │                    │
│    D1   ────────●────  GPIO5 (SCL)     │                    │
│    D2   ────────●────  GPIO4 (SDA/DC)  │                    │
│    D3   ────────●────  GPIO0           │                    │
│    D4   ────────●────  GPIO2           │                    │
│    D5   ────────●────  GPIO14 (SCK)    │                    │
│    D6   ●───────────── GPIO12 ──●── TTP223 Touch (Refresh)  │
│    D7   ────────●────  GPIO13 (MISO)   │                    │
│    D8   ────────●────  GPIO15 (CS)     │                    │
│    RX    ●───────────── GPIO3   ──●── TTP223 Touch (Light)   │
│    TX    ●───────────── GPIO1   ──●── Backlight LED (PWM)   │
│                                                              │
│    A0   ────────●────  ADC (Optional)   │                    │
│                                                              │
└─────────────────────────────────────────────────────────────┘

WeAct E-Paper Module Pinout

The WeAct 4.2" E-Paper Module has a convenient 8-pin header for easy connection:

┌────────────────────────────────────┐
│   WEACT 4.2" E-PAPER MODULE        │
│   (8-Pin Header on module)         │
├────────────────────────────────────┤
│                                    │
│   VCC  ────  3.3V     Power       │
│   GND  ────  GND      Ground      │
│   CS   ────  GPIO15   Chip Select  │
│   DC   ────  GPIO4    Data/Cmd    │
│   RST  ────  GPIO5    Reset        │
│   BUSY ────  GPIO16   Busy Status │
│   CLK  ────  GPIO14   Clock (SCK) │
│   DIN  ────  GPIO13   Data (MOSI) │
│                                    │
└────────────────────────────────────┘

Note: The WeAct module includes a built-in backlight circuit. The backlight control (GPIO1/TX) can be connected directly to the module's backlight header if supported.


Wiring Configuration

Primary Connections (Required)

Connect the WeAct 4.2" E-Paper Module to the Wemos D1 Mini using the 8-pin SPI interface:

Wemos D1 Mini WeAct E-Paper Module Wire Color (Suggested)
3.3V VCC Red
GND GND Black
GPIO15 (D8) CS Yellow
GPIO4 (D2) DC Orange
GPIO5 (D1) RST White
GPIO16 (D0) BUSY Purple
GPIO14 (D5) CLK Blue
GPIO13 (D7) DIN Green

TTP223 Touch Button Wiring

The TTP223 is a capacitive touch sensor module that outputs a HIGH signal when touched. Each module requires:

Wemos D1 Mini TTP223 Module Notes
3.3V VCC Power
GND GND Ground
GPIO12 (D6) OUT Touch Refresh button
GPIO3 (RX) OUT Touch Light button

TTP223 Module Pinout

┌─────────────────────┐
│   TTP223 MODULE     │
│  (Top View)         │
├─────────────────────┤
│                     │
│  VCC  ──── 3.3V    │
│  OUT  ──── GPIO    │
│  GND  ──── GND     │
│                     │
│  [Touch Pad Area]   │
│                     │
│  Jumper: A (LOW)   │
│          B (HIGH)   │
└─────────────────────┘

Note: Set the TTP223 mode jumper to position A (default) for self-latching output, or B for momentary output. The YAML configuration uses pullup: true expecting a HIGH output on touch.


Home Assistant Integration

Required Entities

The display fetches data from the following Home Assistant entities. Ensure these exist in your Home Assistant installation:

Room Temperature & Humidity Sensors

Room Temperature Entity Humidity Entity
Balkon sensor.indoor_outdoor_meter_f7c8_temperatura sensor.indoor_outdoor_meter_f7c8_vlaznost
Dnevna soba sensor.indoor_outdoor_meter_f965_temperatura sensor.indoor_outdoor_meter_f965_vlaznost
Kopalnica sensor.meter_plus_3550_temperatura sensor.meter_plus_3550_vlaznost
Spalnica sensor.meter_plus_080d_temperatura sensor.meter_plus_080d_vlaznost
Soba sensor.meter_plus_f010_temperatura sensor.meter_plus_f010_vlaznost
Kuhinja sensor.meter_plus_86aa_temperatura sensor.meter_plus_86aa_vlaznost

System Sensors

Data Entity ID
Atmospheric Pressure sensor.arso_weather_brezice_zracni_tlak
Device Battery sensor.delta_2_max_0110_battery_level
Daily Energy sensor.daily_household_power_usage
Daily Solar sensor.ecoflow_daily_solar_power
Remote Solar Forecast sensor.solcast_sc_daily_measurment_no_negative_eprices

API Configuration

The device uses ESPHome native API with encryption:

  • API Key: Configured via api.encryption.key
  • OTA Password: 88fcca1cd8e29c78697cfcee032c8e1e

Installation

Prerequisites

  1. ESPHome installed (via Home Assistant Add-on or standalone)
  2. Home Assistant running with API enabled
  3. Secrets configured in ESPHome:
    • wifi_ssid: Your WiFi network name
    • wifi_password: Your WiFi password

Step 1: Prepare Font Files

Copy the required font files to your ESPHome configuration directory:

/config/esphome/fonts/roboto/
├── Roboto_Condensed-Regular.ttf
└── Roboto_Condensed-Bold.ttf

/config/esphome/fonts/
└── materialdesignicons-webfont.ttf

Step 2: Update Entity IDs

Edit the YAML file and update all entity_id values to match your Home Assistant entities:

sensor:
  - platform: homeassistant
    entity_id: sensor.your_balcony_temp  # Replace with your entity

Step 3: Generate Encryption Key

Generate a new API encryption key:

openssl rand -hex 32

Update the api.encryption.key in your YAML file.

Step 4: Update OTA Password

Change the OTA password from the default:

ota:
  - platform: esphome
    password: "your_secure_password_here"

Step 5: Compile and Flash

Using ESPHome CLI:

# Compile the firmware
esphome compile epaper-climate-display.yaml

# Flash via USB
esphome upload epaper-climate-display.yaml --device /dev/ttyUSB0

# Or flash wirelessly (device must be on same network)
esphome upload epaper-climate-display.yaml --host 192.168.x.x

Step 6: Add to Home Assistant

Once flashed, the device should auto-discover in Home Assistant via the ESPHome integration.


Configuration

WiFi Configuration

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  min_auth_mode: WPA2
  fast_connect: true
  power_save_mode: none

Quiet Hours (Refresh Schedule)

Default quiet hours: 23:59 - 04:59 (11:59 PM - 4:59 AM)

To modify, edit the interval section:

const int start_h = 23;  // Start hour (24-hour format)
const int start_m = 59;  // Start minute
const int end_h   = 4;   // End hour
const int end_m   = 59;   // End minute

Automatic Refresh Interval

Screen refreshes every 10 minutes (outside quiet hours):

interval:
  - interval: 10min

Backlight Behavior

Trigger Duration Brightness
Initial data received 10 seconds 100%
Manual refresh 5 seconds 35%
Touch light button 10 seconds 100%

Usage

Normal Operation

  1. Power on the device
  2. Wait for "Pridobivam podatke" (Getting data) screen
  3. Main grid displays when data is received (or after 60 seconds timeout)
  4. Screen auto-refreshes every 10 minutes outside quiet hours

Manual Refresh

Press the Touch Refresh button (GPIO12/D6) to force an immediate screen update.

Temporary Backlight

Press the Touch Light button (GPIO3/RX) to activate the backlight for 10 seconds.

WiFi Fallback

If WiFi connection fails, the device creates an access point:

  • SSID: Epaper-Climate-Display
  • Password: QCaF9KQtPXUn

Connect to this network to reconfigure WiFi settings via the captive portal.


Customization

Changing Room Names

Edit the draw_cell calls in the display lambda:

draw_cell(0, 0, "Your Room", id(your_temp_cache), id(your_hum_cache));

Adding New Rooms

  1. Add new global cache variables:
globals:
  - id: newroom_temp_cache
    type: float
    restore_value: no
    initial_value: 'NAN'
  - id: newroom_hum_cache
    type: float
    restore_value: no
    initial_value: 'NAN'
  1. Add sensor entity:
sensor:
  - platform: homeassistant
    id: newroom_temp
    entity_id: sensor.your_new_temp
    on_value: { then: [ lambda: 'id(newroom_temp_cache) = x;' ] }
  1. Update grid layout in display lambda

Changing Language

All display text is in Slovenian. To change to English, update:

Slovenian English
Pridobivam podatke Getting data
To bo trajalo nekaj sekund This will take a few seconds
Osveženo Updated
Balkon Balcony
Dnevna soba Living Room
Kopalnica Bathroom
Spalnica Bedroom
Soba Room
Kuhinja Kitchen

Troubleshooting

Common Issues

Display shows "Pridobivam podatke" indefinitely

Cause: Home Assistant entities not available or network issues.

Solution:

  1. Verify all entity IDs exist in Home Assistant
  2. Check network connectivity
  3. Device will timeout after 60 seconds and display cached/placeholder data

E-Paper not updating

Cause: Quiet hours active or refresh interval not triggered.

Solution:

  1. Press the Touch Refresh button (GPIO12)
  2. Check if current time falls within quiet hours
  3. Verify ESPHome API connection in Home Assistant

WiFi connection failures

Cause: Incorrect credentials or weak signal.

Solution:

  1. Move device closer to router
  2. Check WiFi credentials in secrets
  3. Use the fallback AP to reconfigure

Compilation memory errors

Cause: Font files too large for ESP8266.

Solution:

  1. Ensure using local font files (not remote URLs)
  2. Optimize glyphs in font configuration
  3. Use Roboto Condensed as it has smaller file size

Debug Logging

Enable debug output in ESPHome logs:

esphome logs epaper-climate-display.yaml --level DEBUG

Factory Reset

To reset the device and re-enter WiFi setup:

  1. Erase flash: esphome run --erase or use esptool
  2. Reflash the firmware
  3. Device will create fallback AP on first boot

File Structure

/config/esphome/
├── epaper-climate-display.yaml    # Main configuration
├── fonts/
│   ├── roboto/
│   │   ├── Roboto_Condensed-Regular.ttf
│   │   └── Roboto_Condensed-Bold.ttf
│   └── materialdesignicons-webfont.ttf
└── secrets.yaml                   # WiFi credentials

License

This project is open source and available under the MIT License.


Credits

  • ESPHome - Firmware framework
  • Home Assistant - Home automation platform
  • WeActStudio - E-paper module manufacturer
  • TTP223 - Capacitive touch sensor IC

Changelog

v1.0.0

  • Initial release with 6-room climate monitoring
  • Support for WeAct 4.2" E-Paper Module (GDEY042T81, 400x300)
  • Capacitive touch control via TTP223 modules
  • Slovenian language interface
  • Quiet hours scheduling
  • Manual refresh and backlight controls
  • Home Assistant API integration

Support

For issues or questions:

  1. Check the ESPHome documentation
  2. Review Home Assistant community
  3. Check GitHub issues for this project

Documentation generated for ESPHome E-Paper Climate Display project.