José Moreira

An e-ink dashboard on the kitchen wall

Weather, a couple of tickers and whether my sites are up, refreshed every 15 minutes on an ESP32.

E-ink is perfect for things you glance at: it costs nothing to display and looks like paper. This one shows the weather, a five-day forecast, two tickers and the uptime of my sites.

Deep sleep is the whole trick

#include <GxEPD2_BW.h>
#include <WiFi.h>

constexpr uint64_t SLEEP_MINUTES = 15;

void setup() {
  connectWifi();
  auto data = fetchDashboard();   // one JSON call to my own endpoint
  drawDashboard(data);
  display.hibernate();

  // Sleep until the next refresh; the panel keeps the image for free.
  esp_sleep_enable_timer_wakeup(SLEEP_MINUTES * 60ULL * 1000000ULL);
  esp_deep_sleep_start();
}

void loop() {}  // never reached

All the logic lives server-side: the ESP32 fetches a single pre-rendered JSON document and draws it. Changing the layout means editing PHP, not reflashing.

{
  "weather": { "now": 17, "icon": "cloudy" },
  "forecast": [18, 16, 15, 19, 21],
  "sites": { "up": 11, "down": 0 }
}