📅 E-Ink Smart Calendar
An ultra-low-power dashboard that fetches Google Calendar events.
Overview
E-Ink (or e-paper) displays only consume power when changing the image. Once drawn, they retain the image indefinitely with zero power. This makes them perfect for battery-powered smart home dashboards.
What you'll learn: ESP32 Deep Sleep modes, E-paper display driving, and parsing complex REST APIs (Google Calendar / OpenWeatherMap).
Estimated time: 6-8 hours. Difficulty: ⭐⭐⭐⭐ Advanced.
Components Needed
| Component | Specification | Qty | Notes |
|---|---|---|---|
| ESP32 FireBeetle | Low Quiescent Current | 1 | Optimized for battery |
| 7.5" E-Ink Display | SPI | 1 | Waveshare or similar |
| LiPo Battery | 3.7V 3000mAh | 1 | Lasts for months |
| 3D Printed Frame | Picture frame style | 1 |
Step-by-Step Tutorial
1
Google API Setup
Create a project in Google Cloud Console, enable the Calendar API, and generate an API key or OAuth token.
2
Wiring SPI
Connect the E-Ink display to the ESP32 VSPI pins. E-Ink requires 3.3V logic.
3
Drawing Graphics
Use the GxEPD2 library to draw text, lines, and downloaded weather icons to a frame buffer.
4
Deep Sleep
Configure the ESP32 to wake up every 12 hours, connect to Wi-Fi, fetch data, update the screen, and go back to sleep (consuming mere microamps).
Avoid updating E-Ink screens more than once every few minutes. Rapid updates can cause ghosting or permanently damage the display layers.
Code / Configuration
eink_calendar.ino
INO
// E-Ink Deep Sleep (Snippet)
#include <WiFi.h>
#include <GxEPD2_BW.h>
#include <Fonts/FreeSans9pt7b.h>
// Assume display setup is done...
#define TIME_TO_SLEEP 43200 // 12 hours (in seconds)
#define uS_TO_S_FACTOR 1000000ULL // Conversion factor
void setup() {
Serial.begin(115200);
// 1. Wake up & Connect to Wi-Fi
connectWiFi();
// 2. Fetch Data (Pseudo-code)
String events = fetchGoogleCalendar();
String weather = fetchWeather();
// 3. Update Display
display.init();
display.setRotation(1);
display.setFont(&FreeSans9pt7b);
display.setTextColor(GxEPD_BLACK);
display.setFullWindow();Reviews & Ratings
—0 reviews
Sign in to leave a review
Loading reviews...