No description
  • C++ 51.1%
  • Python 33%
  • C 15.9%
Find a file
2026-04-19 20:56:44 +02:00
fonts Updated README.md, added python_scripts/esp_calendar_data_conversion.py, calendar entries now working and everything formatted nice 2025-05-11 17:05:53 -05:00
HomeAssistant_sensor Many little changes 2026-04-19 20:56:44 +02:00
images Added picture of the back of the frame for reference. Fixed a couple small grammar/content items in the README.md. 2025-07-25 15:16:17 -05:00
includes Many little changes 2026-04-19 20:56:44 +02:00
python_scripts Many little changes 2026-04-19 20:56:44 +02:00
.gitignore Initial working upload. Screen works and turns on, sensors active in HA. 2025-05-04 16:26:55 -05:00
epaper.yaml Many little changes 2026-04-19 20:56:44 +02:00
general_settings.yaml Initial working upload. Screen works and turns on, sensors active in HA. 2025-05-04 16:26:55 -05:00
LICENSE Create LICENSE 2025-05-11 17:10:36 -05:00
README.md Added better comments to indicate how to switch the calendar to start from Monday vs. Sunday. Updated README.md with instructions for changing the weekday start day. 2025-08-07 09:58:15 -05:00

E-ink Weather and Calendar Display

This is a simple ESPHome based e-ink weather and calendar display project. I used a 7.5" waveshare e-paper display and the waveshare ESP32 universal driver module. I mounted the whole thing in a picture frame and run it off USB power (no battery).

Complete Frame

Front Of Frame

Complete Frame

Back Of Frame

Project References

The following existing projects/reddit posts were used as reference, source code starting point, and inspiration for this work and are given credit here:

Documentation References

Hardware

The following hardware was used:

Hardware Setup

There isn't really any hardware setup. Just connect the screen to the universal display module and plug in USB power (USB-C). To test the display before moving onto ESPHome I downloaded the Arduino example code from Waveshare and ran it just to make sure the display worked: E-Paper ESP32 Driver Board

  • For the 7.5" display I used I had the A/B resistor switch on the driver board set to "B" per the documentation.

Home Assistant Setup

Integrations

This project uses the following integrations:

Integration Notes

  • NWS Alerts: Currently the display will only show the first alert for a given region configuration even if there are multiple alerts active. It displays the "Event" field of the alert so that it fits in the limited space on one line. This could be modified to show multiple alerts and/or more detail by modifying the HA_epaper.yaml weather_alert_now and weather_alert_number code.

Python Script

A python script is used to format the calendar event data. Copy the python_scripts folder and contents provided to your Home Assistant root directory (creating the python_scripts folder at the root level if needed).

Template Sensors and Configuration

The display makes use of multiple templated sensors and configuration in HA_epaper.yaml. These must be integrated into the Home Assistant configuration.yaml (or custom yaml file).

  1. First edit the HA_epaper.yaml file provided under HomeAssistant_sensor folder to customize for your setup

    • The weather service provider should be set to your desired provider. Change all occurrences of "weather.weather_ch" to your weather provider. The project assumes the weather provider provides daily weather forecast data via the weather-get_forecasts call.
  2. Edit the calendar entity IDs to your own (usually in a "calendar.XXXX" format). These are stored in the secrets.yaml file.

    entity_id:
                # Add your calendar entity id's here
                - !secret calendar1
                - !secret calendar2
                - !secret calendar3
    
  3. Integrate/copy the HA_epaper.yaml file into your configuration.yaml file. If a template: section already exists in your file just append the template section from the HA_epaper.yaml.

  4. After integrating restart HA

  5. You can verify proper operation by checking the "ESP Calendar Data" and "e-paper display data" sensor entities and see that they are populated with data.

Customizing Display Items

Calendar Week Start

By default the calendar display starts the week on Sunday (US style). This can be changed to start on Monday by editing the calendar_utilities.h file and commenting/uncommenting the preferred line:

// Adjust day of week to start from Sunday or Monday
// Uncomment one of the following lines based on your preference:
//day_of_week = (day_of_week + 5) % 7;  // Adjust to start from Monday
day_of_week = (day_of_week + 6) % 7; // Adjust to start from Sunday

Localization

All names are currently in US English. This can be changed by searching through the code and changing all statically defined string names to a desired language.

ESPHome Setup

Following the ESPHome guides I installed ESPHome on the driver board using the Windows command line/python version of ESPHome. I did not use the Home Assistant ESPHome device builder but you could.

The project uses a secrets.yaml file which needs to be populated with the following secure credentials provided by your setup and the ESPHome initial base installation on the device. Create a secrets.yaml file in the root folder of the project and populate it with the following (filling in the values for your setup):

wifi_ssid: 
wifi_password:
ota_password: 
encryption_key: 
fallback_password: 

Once installed compile and flash the provided epaper.yaml file to the board.