There are two types of people in this world: those who look out a window to check the weather, and those who spend three weekends fighting C++ compiler errors just so a tiny screen on their desk can tell them it’s raining. Guess which one we are?
If you’re tired of burning your retinas on overly bright OLEDs, or you’ve accidentally released the magic blue smoke from one too many standard LCDs, it’s time to step up to E-Paper. Sure, it refreshes with the speed of a sloth swimming through a pool of peanut butter, but it looks incredible, uses practically zero power, and won’t blind you at 3 AM. Today, we’re building an ESP32-powered desktop weather station that pulls live API data and reads the actual room climate using a BME280. Prepare your Breadboards and grab your Soldering Iron—we’re making something actually useful!

To make this happen, we are relying on a couple of specific modules that play nicely with our trusty Microcontrollers:

We aren’t going to reinvent the wheel—the incredibly smart folks over at MakerGuides have a fantastic deep-dive on the code for this. But here is the high-level architecture of what we are building:
This project is a great excuse to practice using multiple communication protocols at once. The Waveshare E-Paper display uses SPI, which requires a few more pins but handles the heavy image data transfer. Meanwhile, the BME280 sensor uses I2C (just SDA and SCL), making it super easy to daisy-chain if you ever want to add more sensors. (Need a refresher? Check out our I2C LCD Display Lesson).
Your ESP32 will connect to your local Wi-Fi and ping OpenWeatherMap (or your API of choice) to get the outdoor forecast. It then parses that messy JSON data into something human-readable.
While the API tells you what’s happening outside, the BME280 is wired up to tell you exactly how hot your office is currently getting while your PC renders 3D models. The ESP32 takes both sets of data and paints them onto the E-Paper display.
Because E-Paper displays retain their image even when the power is cut, we can put the ESP32 into a deep sleep for 30 minutes at a time. It wakes up, grabs the weather, updates the screen, and goes right back to sleep. This means you can run this entire setup off a single LiPo battery for months. (For more on saving power, review Lesson 156: Battery Super-Saver).
Ready to write some spaghetti code and pull your hair out over SPI pin mappings? Head over to the full MakerGuides tutorial to grab the necessary libraries and get flashing!