esp32.diy

ESP32 E-Paper Weather Display: Build Guide (esp32-weather-epd)

Oct 11, 2026 · 5 min read

Intermediate 6.3k stars 482 forks C GPL-3.0 Updated 2026-07-22

Wiring diagram showing connections between the FireBeetle 2 ESP32-E, DESPI-C02 adapter, BME280 sensor, and E-Paper panel.

TL;DR esp32-weather-epd turns a FireBeetle 2 ESP32-E and a 7.5-inch E-Paper panel into a wall-display weather station that fetches live forecasts from OpenWeatherMap and reads indoor temperature and humidity from a BME280 sensor. Deep-sleep design keeps power draw around 14 μA at rest, giving six to twelve months of runtime on a 5000 mAh LiPo.
What you need
  • FireBeetle 2 ESP32-E
  • Waveshare 7.5in e-paper display (v2)
  • Good Display 7.5in e-paper (GDEY075T7)
  • Waveshare 7.5in e-Paper (B)
  • Good Display 7.5in e-paper (GDEY075Z08)
  • Waveshare 7.3in ACeP e-Paper (F)
  • Good Display 7.3in e-paper (GDEY073D46)
  • Good Display 7.3in e-paper (GDEP073E01)
  • DESPI-C02 adapter board
  • BME280 temperature/humidity/pressure sensor
  • 3.7V LiPo battery with JST-PH2.0 connector
BoardFireBeetle 2 ESP32-E
Display7.5" E-Paper, 800×480 px (multiple panel options)
FrameworkPlatformIO (VSCode)
LanguageC
LicenseGPL-3.0
Battery Life6–12 months on 5000 mAh @ 30-min refresh

What You Will Build

This project produces a self-contained weather station that refreshes on a schedule you choose — every 30 minutes by default — and displays the current forecast pulled from the OpenWeatherMap API on a large 7.5-inch E-Paper screen. An onboard BME280 sensor adds real indoor temperature and humidity to the same screen.

Because E-Paper holds its image without any power and because the ESP32 spends almost all of its time in deep sleep (~14 μA), the whole unit can run for six to twelve months on a single 5000 mAh LiPo before you need to plug in a USB-C cable. The display is highly configurable: metric or imperial units, multiple languages, 12/24-hour time, AQI scale selection, and an hourly outlook graph showing temperature trend and precipitation probability. You can choose a black-and-white panel, a red/black/white panel, or a seven-color panel depending on your taste and acceptable refresh-time trade-off.

Finished weather display in a custom wooden stand showing current conditions and hourly outlook.\2
Finished weather display in a custom wooden stand showing current conditions and hourly outlook.
Side view of the assembled display revealing the slim profile of the E-Paper panel and wooden enclosure.\2
Side view of the assembled display revealing the slim profile of the E-Paper panel and wooden enclosure.
Back of the enclosure showing the FireBeetle ESP32-E, battery, and USB-C charging port.\2
Back of the enclosure showing the FireBeetle ESP32-E, battery, and USB-C charging port.
Bottom cover held on by magnets, giving clean access to the electronics bay.\2
Bottom cover held on by magnets, giving clean access to the electronics bay.

What You Need

Hardware

Component Notes
FireBeetle 2 ESP32-E Low-power design with USB-C and built-in battery management
7.5" E-Paper panel Waveshare v2 (800×480, B&W) is recommended; see Panel Support table for all options
DESPI-C02 adapter board Waveshare HATs rev 2.2/2.3 are not recommended
BME280 sensor 3.3 V/5 V compatible; provides indoor temperature, humidity, and pressure
3.7 V LiPo with JST-PH2.0 connector 5000 mAh gives 6+ months at 30-minute refresh
Jumper wires or hookup wire Jumper wires allow a solder-free build
Enclosure DIY wood, 3D-printed frame, or picture frame — see Enclosure Options in the repo

Soldering is optional. If you buy the FireBeetle 2 ESP32-E with headers pre-installed and a BME280 module with factory-soldered headers, the whole assembly can be done with jumper wires.

Software

Typical use cases

Live Weather at a Glance

Mount the display in a hallway or kitchen and get current conditions, an hourly temperature graph, and precipitation probability without picking up a phone.

Battery-Powered Anywhere

With six to twelve months of runtime on a 5000 mAh cell, you can place this display anywhere in your home — no nearby outlet required.

Indoor Climate Monitoring

The BME280 sensor adds real-time indoor temperature, humidity, and pressure alongside the outdoor forecast on the same screen.

Customizable Dashboard

Switch languages, unit systems, time formats, and AQI scales in config files to tailor the display to your region and preferences before flashing.

How It Works

On each wake cycle the ESP32 connects to your Wi-Fi network, calls the OpenWeatherMap API to retrieve current conditions and hourly forecast data, reads temperature and humidity from the BME280 over I2C, renders the full display layout into a frame buffer, pushes it to the E-Paper panel via SPI through the DESPI-C02 adapter, then returns to deep sleep. The active window — connecting, fetching, drawing, and transmitting to the panel — takes roughly 15 seconds and draws about 83 mA. The rest of the time the chip draws only ~14 μA.

The hourly outlook graph in the bottom-right corner plots a temperature line and shaded bars for precipitation probability (or volume, depending on your configuration). Everything from date/time format to AQI scale is set in two source files before you flash: config.cpp for most runtime options and config.h for unit system selection.

Wiring and Hardware Setup

Follow the wiring diagram in the repository (showcase/wiring_diagram_despi-c02.png) to connect the E-Paper panel, DESPI-C02 adapter, and BME280 to the FireBeetle 2 ESP32-E.

Critical switch settings — the display will not work without these:

Battery polarity warning: JST-PH2.0 connector polarity is not standardized. Check your battery wires before plugging in and swap them in the connector if necessary.

Optional low-power pad cut: The FireBeetle 2 ESP32-E has a low-power pad that is connected by default. Cutting the thin wire in the middle of that pad with a craft knife reduces static current by 500 μA, bringing deep-sleep consumption down to ~13 μA. Note that cutting it disables the onboard RGB LED when on battery power. See the DFRobot wiki for the pad location.

The battery charges through the FireBeetle's USB-C port while the LiPo is plugged into the JST connector — no need to disconnect anything to recharge.

Configure, Build, and Flash

  1. Clone the repository or download and extract the ZIP from GitHub.

  2. Install VSCode and then install the PlatformIO extension (follow the instructions at https://platformio.org/install/ide?install=vscode).

  3. Open the project: in VSCode go to File → Open Folder and select the platformio subfolder inside the repository.

  4. Edit platformio/src/config.cpp and set at minimum:

    • Wi-Fi SSID and password
    • Your OpenWeatherMap API key
    • Latitude and longitude for your location
    • Preferred time/date formats and sleep duration
  5. Edit platformio/include/config.h to choose metric or imperial units.

  6. Connect the ESP32 to your computer via USB-C.

  7. Upload: click the upload arrow at the bottom of the VSCode window (labeled PlatformIO: Upload on hover). PlatformIO automatically downloads all required third-party libraries, compiles, and flashes the firmware.

    If you see Wrong boot mode detected (0x13)! on a FireBeetle 2 ESP32-E: unplug power, bridge GPIO0 (labeled 0/D5) to GND, then power it back up to enter download mode.

Getting your OpenWeatherMap API key: Create a free account at openweathermap.org. The README notes there are important details about the API key in the Setup Guide section of the repository — read those notes before flashing, as the wrong API plan or a key that has not yet activated will produce API errors on the display.

Extend It and Know the Limits

Ideas to extend the project

Limitations to keep in mind

Verdict

esp32-weather-epd is one of the most polished ESP32 display projects available, combining genuine deep-sleep engineering with a rich, configurable UI and strong community support including multiple 3D-printable enclosures. The PlatformIO workflow keeps the build approachable for intermediate makers, though you will need to read the wiring notes and switch settings carefully before powering on. If you want a practical, long-running display you can actually hang on the wall, this project delivers.

Sources

github.comlmarzen/esp32-weather-epd — repository & README

Facts in this article come from the project's public README and GitHub metadata at the time of writing. Images belong to their respective owners and link back to the original source.