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.
Table of Contents
- Features
- Hardware Requirements
- Pinout Diagram
- Wiring Configuration
- Home Assistant Integration
- Installation
- Configuration
- Usage
- Customization
- Troubleshooting
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
- ESPHome installed (via Home Assistant Add-on or standalone)
- Home Assistant running with API enabled
- Secrets configured in ESPHome:
wifi_ssid: Your WiFi network namewifi_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
- Power on the device
- Wait for "Pridobivam podatke" (Getting data) screen
- Main grid displays when data is received (or after 60 seconds timeout)
- 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
- 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'
- Add sensor entity:
sensor:
- platform: homeassistant
id: newroom_temp
entity_id: sensor.your_new_temp
on_value: { then: [ lambda: 'id(newroom_temp_cache) = x;' ] }
- 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:
- Verify all entity IDs exist in Home Assistant
- Check network connectivity
- 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:
- Press the Touch Refresh button (GPIO12)
- Check if current time falls within quiet hours
- Verify ESPHome API connection in Home Assistant
WiFi connection failures
Cause: Incorrect credentials or weak signal.
Solution:
- Move device closer to router
- Check WiFi credentials in secrets
- Use the fallback AP to reconfigure
Compilation memory errors
Cause: Font files too large for ESP8266.
Solution:
- Ensure using local font files (not remote URLs)
- Optimize glyphs in font configuration
- 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:
- Erase flash:
esphome run --eraseor use esptool - Reflash the firmware
- 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:
- Check the ESPHome documentation
- Review Home Assistant community
- Check GitHub issues for this project
Documentation generated for ESPHome E-Paper Climate Display project.