Weather display, take two: enclosure and firmware notes

Follow-up to the weekend weather display project — it no longer looks like a breadboard experiment on my desk, and the firmware has settled down enough to write up properly.

Parts list

  • ESP32-C3 dev board (Wi-Fi, deep sleep support)
  • 4.2" e-ink panel, SPI
  • 1000mAh LiPo + basic charge/boost module
  • 3D-printed two-piece enclosure (PETG, printed in a matte black)

Total cost was well under what a commercial e-ink display would run, and most of that was the panel itself.

Firmware

The loop is intentionally boring: wake up, connect to Wi-Fi, hit a weather API, render to the e-ink buffer, go back to deep sleep. No web server, no persistent connection, nothing to keep alive.

void loop() {
  connectWifi();
  WeatherData data = fetchForecast();
  renderToDisplay(data);
  esp_sleep_enable_timer_wakeup(HOUR_IN_US);
  esp_deep_sleep_start();
}

Deep sleep between refreshes is what makes the battery estimate realistic — active Wi-Fi and the e-ink refresh together only draw meaningful current for a few seconds each hour.

What’s left

Battery life is still an estimate rather than a measurement — I’ll know more once it’s been running unattended for a couple of weeks. If it holds up, next on the list is a second unit for the kitchen with a shorter refresh interval.