Upload files to "/"
This commit is contained in:
@@ -0,0 +1,553 @@
|
||||
# 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](#features)
|
||||
- [Hardware Requirements](#hardware-requirements)
|
||||
- [Pinout Diagram](#pinout-diagram)
|
||||
- [Wiring Configuration](#wiring-configuration)
|
||||
- [Home Assistant Integration](#home-assistant-integration)
|
||||
- [Installation](#installation)
|
||||
- [Configuration](#configuration)
|
||||
- [Usage](#usage)
|
||||
- [Customization](#customization)
|
||||
- [Troubleshooting](#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
|
||||
|
||||
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:
|
||||
|
||||
```yaml
|
||||
sensor:
|
||||
- platform: homeassistant
|
||||
entity_id: sensor.your_balcony_temp # Replace with your entity
|
||||
```
|
||||
|
||||
### Step 3: Generate Encryption Key
|
||||
|
||||
Generate a new API encryption key:
|
||||
|
||||
```bash
|
||||
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:
|
||||
|
||||
```yaml
|
||||
ota:
|
||||
- platform: esphome
|
||||
password: "your_secure_password_here"
|
||||
```
|
||||
|
||||
### Step 5: Compile and Flash
|
||||
|
||||
Using ESPHome CLI:
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```yaml
|
||||
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:
|
||||
|
||||
```yaml
|
||||
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):
|
||||
|
||||
```yaml
|
||||
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:
|
||||
|
||||
```cpp
|
||||
draw_cell(0, 0, "Your Room", id(your_temp_cache), id(your_hum_cache));
|
||||
```
|
||||
|
||||
### Adding New Rooms
|
||||
|
||||
1. Add new global cache variables:
|
||||
|
||||
```yaml
|
||||
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'
|
||||
```
|
||||
|
||||
2. Add sensor entity:
|
||||
|
||||
```yaml
|
||||
sensor:
|
||||
- platform: homeassistant
|
||||
id: newroom_temp
|
||||
entity_id: sensor.your_new_temp
|
||||
on_value: { then: [ lambda: 'id(newroom_temp_cache) = x;' ] }
|
||||
```
|
||||
|
||||
3. 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:
|
||||
|
||||
```bash
|
||||
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](https://esphome.io/)
|
||||
2. Review [Home Assistant community](https://community.home-assistant.io/)
|
||||
3. Check GitHub issues for this project
|
||||
|
||||
---
|
||||
|
||||
*Documentation generated for ESPHome E-Paper Climate Display project.*
|
||||
Reference in New Issue
Block a user