Overview
The Round Weather Clock is a 3.4-inch round touchscreen clock that shows the time, current weather, and a five-day forecast. It has both analog and digital clock faces, touchscreen navigation, a dim red night mode, and a local webpage that can be used to leave messages on the clock.
There are two versions of the project. The original runs on a Raspberry Pi with a round HDMI touchscreen and a web-based interface. The newer version runs directly on a Waveshare ESP32-P4-WIFI6-Touch-LCD-3.4C and recreates the interface in LVGL. The goal has been to keep the two versions as close as possible in features and behavior even though the software underneath them is very different.
Raspberry Pi version
The Raspberry Pi version was the original build. It works with a Pi Zero 2 W, Pi 4, or Pi 5 and a 3.4-inch round HDMI touchscreen. The interface is built with web technologies, which made it fairly easy to experiment with layouts, weather icons, gestures, and new screens.
The downside is that there are quite a few pieces involved. You need the Pi, display, SD card, HDMI connection, USB connection, and power. It works well, but it is more hardware than I really wanted inside a small clock.
ESP32-P4 version
The ESP32-P4 version uses the Waveshare 3.4-inch round board, which combines the processor, Wi-Fi, touchscreen, and 800×800 display in one unit. That makes the physical build much simpler, and it also ends up cheaper than building the Raspberry Pi version.
The tradeoff is the software. The Raspberry Pi interface runs in a browser, while the ESP32-P4 version is written with ESP-IDF and LVGL. I couldn’t just move the existing interface over. The clock faces, forecast screen, gestures, setup screens, and message UI all had to be rebuilt for LVGL.
The ESP32-P4 version can be installed directly from a browser, so someone building the clock doesn’t need to set up ESP-IDF just to get started. After flashing, Wi-Fi and the clock settings are configured on the touchscreen.
Interface and weather
Both versions use the same general layout and behavior. The main screen can show either an analog or digital clock along with the current conditions. Swiping brings up a five-day forecast or the message screen.
The round display caused some problems of its own. Even though the panel is 800×800, the useful space obviously isn’t an 800×800 square, and the visible edge of the real display didn’t line up perfectly with some of my early assumptions. I had already worked through that problem on the Raspberry Pi version, and then had to reproduce the same usable geometry in LVGL.
Weather data comes from Open-Meteo, so there’s no API key required. I also added some logic around the forecast icons because I didn’t like seeing an entire day represented as thunderstorms just because storms were possible for a small part of it. The clock looks at conditions across the daytime hours and picks something that better represents most of the day.
Messages
The clocks also have a local household message system. From another device on the same network, you can open a webpage and send a message to the clock.
If there are multiple clocks, they can share messages. Each clock gets a room name, and the Raspberry Pi and ESP32-P4 versions can both participate in the same system. That was one of the things I specifically wanted to preserve when I started the ESP32 rewrite.
Cases
I’ve made a couple of different enclosures for the project. The Pebble is a rounded 3D-printed case, while the Classic has more of a traditional alarm clock shape. I’ve also made the Classic from wood on my CNC.
The free Pebble model is available on MakerWorld.
Source and build links
GitHub: https://github.com/Canterrain/round-weather-display
ESP32-P4 browser installer: https://canterrain.github.io/round-weather-display/
Pebble case: https://makerworld.com/en/models/3274860-smart-round-weather-clock-pebble-style-case
Josh Hendrickson