Items used in this project
- ESP32 based low power e-paper display
- WiFi and Bluetooth for connectivity
- Under 75uA consumption in sleep mode
- Onboard CP2104 USB-UART converter for programming
- Micro SD Card slot for storing images, files, etc
- Piezo buzzer for notifications and alerts
- RGB LED for notifications and alerts
- 2x Capacitive touch buttons for user input
- Battery charger with a large 2000mAh battery
- Extension header for interfacing and expanding capabilities
See it in action
Software for this project is never ending. I find new enhancements and features that can be added almost everyday and I am sure you guys will come up with even more. This release contains a subset of basic features to call it a ‘smart clock’?
Currently it shows the time, date, calendar, weather and to-do list. It fetches the time from a time server. The weather is fetched from weatherunderground and the to-do list from todoist. I have modified the wifimanager library for easy configuration of SSID, password, time zone, todoist and weatherunderground API keys. The configuration is saved to SPIFFS so it can persist across resets. The time is updated via partial refresh every minute and a full refresh every 5th minute to avoid ghosting.
The icons are from feathericons. The wifi symbol indicates if the device successfully connected to wifi when it had to update the weather and to-do list. This update interval is currently set to 6 hours.
It is pretty low power at the moment. Consumes under 75uA in deep-sleep mode and should run at least 30 days with update every minute. It will run much longer if updated once a day.
3D printing an enclosure
I finally got around to making the 3D printed enclosure. If I may say so myself, it looks quite slick. I was going for a minimalist look with the thinnest bezels possible. It is completely designed using freecad and the files are available on github.
Building The GUI
Building the GUI was not difficult at all. I first designed it in gimp and then converted it to code. The GxEPD library has an easy to use interface for displaying text, images, and geometrical shapes. The font I used is the GoBold , andweather icons are feather icons.
Adding the functionality was the difficult part. The plan is to use the weatherunderground API for weather, todoist for TO-DO list and a network time server for syncing time. All these details will be updated every six hours. The esp32 is in deep sleep for most of the time. It wakes up changes the time with a partial refresh and sleeps. Every 5 mins it does a full refresh to avoid ghosting.
I always wanted a display on my office desk which showed time, tasks, calendar, etc and all I could find were devices with LCD displays. Their design did not appeal to me so I decided to make one myself with an e-paper display. The e-paper displays from good-display are very aesthetically pleasing if designed well and don’t need any power to display an image, which means the controller can update and go to sleep.
The design of paperd.ink is very simple. It uses the esp32 as the main controller with wifi and bluetooth functionality, SD-card slot, GPIO expander (PCF8574), piezo buzzer, RGB LED and 2 capacitive touch buttons. And to program it I have added a CP2104 USB-UART chip which is powered through a solder bridge, so i can cut the trace for lower power consumption when required. The board does not have any sensors but can be added through the GPIO expander.
The front panel contains the RGB LED and the two touch buttons. They are connected using a flat flex cable to the top side of the PCB. It wraps around the e-paper.