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