If you are interested in building this, please consider using the ZivyObraz service instead. It's very reasonably priced (and first year free, IIRC), comes with a precompiled firmware for LaskaKit board and it is incredibly easy to use and set up.
Getting a copy of my project to work requires some non-trivial knowledge and I would only recommend it to people who like experimenting and who are willing to take this project as an inspiration for their own work. I can't guarantee that any of READMEs is up to date and that there are not hidden obstacles in getting the client or server part running. This repository contains almost all the source files for my calendars, but there are configuration files specific for my environment (e.g. WiFi password, server IP addresses etc.) and while I tried to put an equivalent of these filed to the "examples" folder, I can't guarantee it's directly usable without any modifications.
Inspired by https://github.com/wuspy/portal_calendar. Hardware is mostly the same but the software is different.
The software is divided into two parts:
- Simple ESP32 web client which only handles the e-Paper display
- PC/Raspberry webserver + backend process which produces the images and takes care of everything else, e.g.:
- integration with web calendars
- integration with weather provider
- integration with HomeAssistant (battery & status monitor),
- configuration UI
I've chosen this approach because it's easier and more fun for me to implement the server part in my favourite environments (Perl, NodeJS, HTML+CSS) than to try to do this directly on ESP32.
Everything is designed for a specific e-Paper size of 480x800 pixels, but I'm trying to use relative units in CSS so it should be possible to use different size just by changing the screen and font size.
Images are served as raw bitmaps and the task for ESP is only to fetch this image and display it.
All the rendering is performed on the server, using standard HTML + CSS. This allows me to use provide content without constantly re-flashing the ESP32. It's also much easier for me to debug CSS and try to pixel-perfect position everything or to integrace for example ICS calendar etc.
I also added a voltage monitorig because with ePaper it's not easily detactable when the battery goes low -- the old image just keeps being on the display. Also the server tries to keep track of when each of the ePaper display should contact it and if it doesn't happen for a while, it will display a warning in the configuration UI (TODO: send this warning via email or Telegram message).
- Display:
- ESP32 board: LaskaKit low power ePaper ESP32 board with USB-C and LiPol charging circuit
- Power source: LiPol battery
- ePaper frame: 3D printed frame by @MultiTricker
- And optionally: FFC cable + FFC FPC connector for easier connection between the display and the ESP32 board
Edit the server/portal_calendar.conf
and update settings there. See the server/examples/portal_calendar.conf
for an example.
Install necessary modules and start the server:
$ sudo apt install perl libimlib2-dev libimlib2
$ make modules
$ server/scripts/run_minion &
$ server/scripts/run_webserver &
Once the server is running you can test it by pointing your browser at it's address (http://...:), it should produce HTML page with source calendar on the left side and (empty yet) image on the right side.
Now you can test if the image rendering works:
$ server/scripts/generate_img_from_web
it should respond with something like:
1
Job enqueued
After a short while there should be a file named current_calendar.png
in the server/generated_images/
folder. If there isn't any, check the minion output (either in console, or via http://...:/admin URL).
If you refresh the page now, a grayscale PNG version of the calendar screen should be visible on the right side.
Done ✅
- The
custom-portal-sign-icons.png
andcustom-portal-sign-full.png
were downloaded from https://decalrobot.com/.- Icons in the
server/public/images/portal_icons
were extracted manually from the image above
- Icons in the
- Fonts in
server/public/fonts
were downloaded from:- D-DIN-BOLD.otf, D-DIN.otf, D-DINCondensed.otf https://www.fontsquirrel.com/fonts/d-din (ASCII and basic accents only)
- 651-font.otf https://cs.fontsisland.com/font/din-pro (full Czech set of characters)
- Files in
client/wuspy_portal_calendar
are git-cloned from https://github.com/wuspy/portal_calendar.git (see.gitmodules
file in the root folder) - "Broken display" overlay was downloaded from https://www.wallpaperflare.com/technology-cracked-screen-broken-screen-no-people-animal-wildlife-wallpaper-jpnv
- Multi-display support (and other functionalities too) inspired by https://zivyobraz.eu/
I don't expect anyone to use this project directly, mainly because it's written in Perl. But on the other hand the HTML, CSS or ESP32 code might serve as an inspiration for someone. See the server/templates/calendar_themes
and server/public/css/calendar_themes/
folders.
Support for Czech localization and charactersGrayed out iconsAdd support for iCal.Fix the icons at the bottom, make more of them available, make them more random.Indicate possible WiFi outage or server unavailability on the display.Refresh the display only if image has changed (=check image checksum against the previous value). This should allow the portal calendar to ask server periodically more often but still sleep a lot and preserve energy.Replace the ESP8266 ePaper module with what original project uses, i.e. specific low power ESP32 board + separate e-Paper hat 1.Configurable through the UI.Offload calendar parsing to minion worker.Maybe add support for a weather forecast (but I'll probably create a different project just for this purpose).Add a config page to the server, to allow changing calendar properties (e.g. weather on/off, icon sets, etc.) easily without having to redeploy updated server.Add battery voltage measurementAdd MQTT support (to see status in HomeAssistant)Add battery level indicatorAdd integration with Google Fit and display a weight data+chartAdd support for multiple calendars (inspired by https://zivyobraz.eu/)Better battery voltage monitoring + move more things from client to the serverMultiple displays support- Alerts on client unavailability.
- On the fly image generation (instead of pre-generating all the images)
Footnotes
-
I didn't consider the need for ESP board with very low power consumption. I therefore bought one that was available immediately (ESP8266 with integrated e-Paper driver). But while it's perfectly usable when powered through USB, it wouldn't keep working sufficiently long with AAA batteries. I therefore switched to low power ESP32 board. ↩