Skip to content
AdvancedESP32esp32deep-sleepe-paper

Battery-Powered ESP32 Weather Display with Deep Sleep

Fetch current weather from OpenWeatherMap API and display it on a 2.9" e-paper screen. ESP32 WROOM enters deep sleep between updates for 30+ day battery life on a single 18650 cell.

SolderHub10/17/2026 40 min read 2 views

Power Budget: Why 30+ Days Is Achievable

In deep sleep the ESP32 draws around 10 µA. Waking up, connecting to WiFi, fetching the API response, updating the e-paper display, and going back to sleep takes about 8 seconds and draws roughly 80 mA average.

With a 30-minute update interval and a 3000 mAh 18650 cell:

  • Active: (8s / 1800s) × 80 mA = 0.36 mA average during active
  • Sleep: 1792s × 0.01 mA = 17.92 mA-s ÷ 1800s = 0.010 mA
  • Total ≈ 0.37 mA average → 3000 ÷ 0.37 ≈ 8100 hours ≈ 337 days

In practice WiFi reconnect variance, display refresh, and LiPo self-discharge reduce this to 30–60 days — still outstanding.

💡 Tip

E-paper displays retain the last image with zero power when not refreshing. Choose a 2.9" Waveshare module that supports **partial refresh** — partial refresh takes 0.3s vs 2s for full refresh and drastically reduces the active-time current draw.

Components

7 items
NameQtyLink
ESP32 WROOM-32 Dev Board×1Buy ↗
Waveshare 2.9" E-Paper Display (SPI)×1Buy ↗
18650 Li-ion Cell (3000mAh)×1—
TP4056 LiPo Charger Module (USB-C)×1—
MT3608 Boost Converter 5V output×1—
100 µF Capacitor (buffer for WiFi spike)×1—
Custom PCB or protoboard×1—

Need these parts? Get this build sheet by email

Parts list with buy links, plus new builds as they're published. By subscribing you agree to our Privacy Policy. Unsubscribe anytime.

C++

Steps

  1. 1Get a free OpenWeatherMap API key at openweathermap.org — standard tier is free
  2. 2Find your city ID on openweathermap.org/find and set CITY_ID
  3. 3Install GxEPD2 library and match the constructor to your exact e-paper model
  4. 4Upload via USB on first boot — subsequent updates can be done over OTA if desired
  5. 5After first successful update, the screen shows weather and the ESP32 goes to sleep
  6. 6Solder to a TP4056 charger + MT3608 boost converter for a self-contained unit
  7. 7Optional: add a physical button wired to GPIO0 to force an immediate refresh

Q&A is currently disabled site-wide.

Related projects