Portal E-Ink Calendar

Building a Portal themed E-Ink calendar with an ESP32 and a Waveshare 7.5 Inch E-Paper Display.

Portal E-Ink Calendar - For Science, You Monster!

Portal Revolution was released a couple of weeks ago and as a big Portal fan, I immediately got it and finished it within two days. It's an amazing mod for Portal 2 and a true successor to the original. I highly recommend it to anyone who enjoyed the original Portal games. Well anyway, I was inspired by the game, looked up some Portal projects and came across this Portal Calendar. I thought it was a really cool idea and decided to make my own version of it.

What do I need?

Here's a list of all the parts I need for this project:

I also need some black PLA filament for the 3D printed case, some wires and a soldering iron. Since I already have all of these things, I won't include them in my shopping list.

Let's start printing!

First, I will print the case for the calendar. The STL files can be found in the GitHub repository as well as on Printables.

Cover and Backplate



I'm using PlatformIO to install the required libraries and to flash the firmware to the ESP32. The firmware can be found in the GitHub repository.

Assembling the electronics

Now that I have all the parts and the ESP32 has been flashed, I can start assembling the electronics. I'll first connect the ESP32 to the E-Ink display:

e-Paper HATESP32
VCC (Grey)-3.3v
GND (Brown)-GND
DIN (Blue)-D13
CLK (Yellow)-D14
CS (Orange)-D15
DC (Green)-D23
RST (White)-D33
BUSY (Purple)-D27
PWR (Red)-3.3v

One thing that's missing in the documentation, which is probably due to the fact that Waveshare updated their display, is that there is an additional pin for PWR which needs to be connected to 3.3v. This pin is the on/off switch for the display. If it's not connected, the display will not turn on.

The battery holder will be connected to VIN and GND on the ESP32. Let's give it a try:

A bit messy but, and that's the important part, it works!


Now it gets a bit tricky. As far as I understand, the ESP32 sets up a WiFi access point and a web server. The user can then connect to the access point and configure the calendar. This only happens if the ESP32 is connected via USB Power. In my case, it was connected via USB, however I always got an error saying I'm not connected via USB. Might be because I'm using some cheap AliExpress ESP32 with USB-C, don't know.

I solved it by editing the code in Configuration.h:

inline bool isOnUsbPower()
    return true; //digitalRead(PD_PIN) == PD_PIN_STATE;

It's not the best solution but it works. I can now connect to the access point and configure the calendar.

[792][I][Configuration.cpp:110] startConfigServer(): Starting DNS server
[800][I][Configuration.cpp:118] startConfigServer(): Starting mDNS server
[821][I][Configuration.cpp:480] startConfigServer(): Starting webserver
[821][I][Configuration.cpp:487] startConfigServer(): Webserver ready at PortalCalendar,

Follow the steps and don't forget to change the code in Configuration.h back to the original.

Assembling time!

Now that everything is working, I can start assembling the calendar. I'll first put the battery holder in the case and then the ESP32. I'll then connect the display to the ESP32 and put it in the case as well. After that, I'll put the back plate on and screw it together.

And that's it! I can now put it on the wall and enjoy some cake!