7 min read

Overkill AI E-Paper Weather Dashboard

Overkill AI E-Paper Weather Dashboard

It's been a colorful 2025 year, and a bit full of surprises. It's been a long time since I wrote another article about my hobby. Let's make another project, this is the first one in 2026! This time it will be an e-paper dashboard!

Why This Dashboard?

Living in New Zealand with weather that's always changing, I always need to check the weather forecast for my upcoming activities, even just for simple walking or cycling. So this small project came to mind.

I know that I can just use my phone to get this information, but where's the fun in that? Also, it's starting to feel like we're getting inseparable from our phones these days, which is quite sad to be honest.

So several ideas came to mind. Many small screen modules are cheap enough these days, but for this simple dashboard, using a full-featured color screen would waste too much energy. That's when I looked around and remembered that e-paper modules are quite affordable now and also quite power-friendly.

What is E-paper and How Does It Work?

E-paper (electronic paper), also known as e-ink displays, work fundamentally different from traditional LCD or OLED screens. Instead of using backlight or emitting light, e-paper uses tiny microcapsules filled with positively charged white particles and negatively charged black particles suspended in a clear fluid. When an electric field is applied, these particles move to the top or bottom of the capsule, creating either a black or white appearance.

WeAct Studio E-paper

The magic of e-paper is that it only requires power when changing the display. Once an image is shown, it remains visible indefinitely without any power consumption. This makes it perfect for applications like weather dashboards that don't need constant updates. The display also remains clearly visible in direct sunlight, unlike phone screens that can be hard to read outdoors.

And how does this work, you say? This dashboard will show weather information and maybe other information, and at a certain time of the day, it will speak to us to tell the information, maybe using a British accent!

The Hardware

These are my hardware components for this setup:

  1. WeAct Studio e-paper 4.2 inch display (black and white). I found this nice small display that was on sale during Black Friday. And this one doesn't need a separate driver board to render, which is nice and makes it simpler to work with! They've got nice code examples too on their GitHub repository.
  2. Xiao Seeed Studio ESP32 S3 for the microcontroller. I like this one because it's such a small but powerful board that could deceive you, judged by its size.
  3. MAX98357 module that will be connected with a small 3-watt speaker. This is used for text-to-speech capabilities that will say every information out loud.
  4. Small 3-watt speaker.
  5. One switch button for screen cycle changer.

The Software

To make this project, we're gonna need several things to do:

  1. Of course, the first one would be the script for the microcontroller. This will be handling all of the screen rendering and also the timer for when the data is going to be retrieved from any API that we need.
  2. Simple AI Agent that will process the weather forecast data and summarize what the weather will be for today and tomorrow. For now, I'm just gonna ask the agent for simple walking, jogging, cycling, and laundry activities.
  3. LLM inference, which we can do either locally using one of our PCs or using any free inference services that are available now.
  4. Text-to-speech server, for this purpose I'm just gonna use the widely used piper.

The Technical Setup

1. Brain of a Coin-Sized Board

Working with the Xiao ESP32 board is quite challenging because the pins available at the front are so few, and I needed to look around and ask AI if this project could utilize this board. For this project, we got lucky, the pins are enough for us to use!

Tiny SeeedStudio Board Compared with Raspberry Pi Zero 2W

Details of pin usage:

E-Paper Display (6 pins):

  • D0 → BUSY
  • D1 → CS (Chip Select)
  • D2 → RST (Reset)
  • D3 → DC (Data/Command)
  • D8 → SCK (SPI Clock) - shared
  • D10 → MOSI (SPI Data) - shared

Button (1 pin):

  • D4 → Button (screen cycling)

MAX98357 (3 pins):

  • D5 → BCLK (I2S bit clock)
  • D6 → LRC (I2S word select)
  • D7 → DIN (I2S data)
  • D9 → SD/Shutdown control

Total Pin Count:

  • Used now: 7 pins (D0, D1, D2, D3, D4, D8, D10)
  • Reserved for audio: 4 pins (D5, D6, D7, D9)
  • Total: 11 GPIO pins on XIAO ESP32 S3 → all 11 pins used! that was close one

2. OpenWeather API

What's the point of a personal dashboard if we can't get any free data for it? Luckily, OpenWeatherMap has a free tier of weather data API that is quite generous for us to utilize. For this project, we will use the free Current Weather Data and also the 5 Day/3 Hour Forecast.

Even with the free forecast data that has 3-hour steps, we can still utilize LLM to analyze the trend and incorporate it with our favorite activities.

3. AI Side

For this purpose, we need two main things that we need to develop, which are:

3.1 Local API for LLM Bridging

This is just a simple local API that could be accessed by our microcontroller, where it will wait until it has an answer from our AI Agent.

3.2 AI Agent

The AI agent here will be equipped with two tools for now, which are the weather_forecast_parser and weather_analyzer.

The weather forecast parser tool: This tool will just wait for a JSON result of the 5 Day/3 Hour Forecast, and then the tool will return:

  • All of today's weather forecast data
  • All of tomorrow's weather forecast data

The weather analyzer tool: This tool will get the result from the weather_forecast_parser tool and analyze the trend of the weather to see if it's going to be nice for the activities that we'd like. And to make sure the result is rendered nicely on the e-paper display, we will limit the maximum wording of the analysis for both today's and tomorrow's forecasts. The agent will return the analysis in JSON formatted results so it can be easily utilized by the microcontroller.

4. The Speaking Side

For this purpose, there are several solutions that would be nice and compatible. One of the free services is Google AI Studio Speech Generator. However, this time, I'm going to be using Piper.

Piper is a fast and local neural text-to-speech engine, and it can be hosted locally. We can host it using Docker, for example.

How Piper Works in This Project

Piper uses neural networks trained on real human speech to generate natural-sounding voice output. Unlike cloud-based TTS services, Piper runs entirely on your local machine, which means no internet dependency for voice generation and complete privacy.

In this project, the workflow is straightforward:

  1. The ESP32 sends the analyzed weather text to our local API
  2. The ESP32 received the analysis, and we will forwards the text to the Piper API that is hosted as Docker container
  3. Piper generates audio (WAV format) using one of its pre-trained voice models (we'll use a British English voice for that proper weather forecast feel!).
  4. The audio file is streamed back to the ESP32
  5. The ESP32 plays the audio through the MAX98357 amplifier and speaker

The beauty of this setup is that once Piper is running in Docker, it's always ready to generate speech without any API keys, rate limits, or privacy concerns. The generated audio quality is surprisingly good for a local solution, and you can choose from various voice models and languages.

How It All Glues Together

How This Works

The complete system works in a beautifully orchestrated cycle. Every morning (and at scheduled intervals throughout the day), the ESP32 wakes up and connects to WiFi. It first fetches the current weather and 5-day forecast data from OpenWeatherMap's API.

This raw JSON data is then sent to our local Python API server, which acts as the central nervous system of the project. The API forwards the weather data to the AI Agent, which uses its two specialized tools: the weather forecast parser extracts today's and tomorrow's 3 hourly data, and the weather analyzer examines the trends to provide activity-specific recommendations.

The AI Agent returns a concise, human-readable weather summary optimized for the e-paper display. The ESP32 receives this text and renders it beautifully on the 4.2-inch e-paper screen, where it remains visible without consuming any power.

At the designated time (perhaps during your morning coffee), the ESP32 sends the same weather summary to the Piper TTS service running in Docker. Within seconds, Piper generates natural-sounding British-accented speech, which streams back to the ESP32 and plays through the speaker via the MAX98357 amplifier.

Throughout the day, you can press the button to cycle through different information screens: current weather with next 3 hours forecast, today and tomorrow's weather outlook, and also for me personally a prayer times screen. All of this happens autonomously, requiring no phone, no cloud services beyond the initial weather API call, and consuming minimal power thanks to the e-paper display.

0:00
/0:25

Sorry for The Crackling Sound

This project represents a perfect blend of practical utility and overengineered fun. While checking weather on a phone takes seconds, there's something deeply satisfying about having a dedicated, always-visible dashboard that speaks to you like a proper British weather forecaster.

The beauty of this system lies in its modularity. Each component: the e-paper display, the AI analysis, the local TTS engine, all can be upgraded or modified independently. The ESP32's minimal power consumption means this could potentially run on battery power with solar charging, making it truly standalone.

What's Next?

The possibilities are endless, but for now, this dashboard serves its purpose beautifully by providing useful information at a glance, without the distraction and battery drain of constantly checking your phone. Sometimes, the best technology is the one that stays out of your way while quietly doing its job.

Happy building, and may your weather always be in your favor!