Introduction: Weather Clock Arduino ESP32
An ESP32 based weather clock, which connects via wi-fi, to regularly update the time and local weather.
====================
Edit1 -Update & a plea - Hi, many people have made this project and left comments, Thank You.
For those who have made the weather clock but not left comments or clicked 'I made it' please, please do so.
It really makes the time & effort required to make & publish these projects worthwhile, if we receive feedback.
Edit2 Wow, thanks for all the positive feedback an photos of the completed clocks. Please keep posting :o)
A new 3d printed case for the clock is now available.
===================
The original project has open-source firmware.
I found a few issues that would stop many people being able to build this weather clock.
These have been overcome, allowing anybody to make the weather station.
First issue was hardware. The firmware (open-source) is designed to run on bespoke hardware, which is both expensive to purchase and expensive to ship. This issue has been overcome by re-writing the code to work on cheap Aliexpress parts.
The second, is the firmware itself. It is very complex and unless the user is familiar with python, Visual Studio and Platform IO, they would not be able to load the firmware.
Solution here is to re-write and compile the code, so the user can easily flash it directly to the ESP32.
In order for the user to set their WIFI, time-zone, daylight saving, location, language etc, a new menu has been written, allowing the user to easily add or change these details. Once added, they are saved internally and will remain after a power-cut.
This project is based on the original open-source code and project details found here.
ESP32 WiFi Color Display Kit Grande • ThingPulse
Note The firmware code used for my version has been heavily modified to make it much simpler to build and use.
The original open-source code will work, if you want to try it, but will require editing as all of the user credentials are hard coded.
You will also need to change the TFT pin configuration, either in the code or on the hardware.
Supplies
The parts required can be bought as a three-part-set, as in the photo above.
Comprising of ESP32 microcontroller, 3.5" TFT screen and a pcb which connects the two together. This is by far the best option. The boards just fit together without any additional steps. No additional parts are required. Price of November 2025 was £14
Link to three-part-set here.
3.5 Inch TFT SPI LCD Display Module 320RGBx480 ILI9488 With/Without Touch ESP32 Screen
If you prefer to purchase separate parts, you will need :-
ESP32 board & screw-terminal expansion board
Dupont wires, or if using the screw terminal board, then an 8-way JST XH cable.
3.5" TFT screen with ILI9448 driver 480 X 320 pixels
I cannot find the exact TFT that comes in the three-part-set, being sold separately, so do not want to post a link to a product that I have not personally purchased, however, there are plenty of TFT screens on Aliexpress which should work perfectly.
Step 1: Hardware Build
This is simple, just plug the ESP32 board into the pcb and then do the same with the TFT screen BUT ensure you put them in the right way round, else damage could easily occur.
Referring to the photo above, plug the TFT into the green PCB. Ensure the green pcb is the correct way around. It has two holes drilled in it, which should align with the holes on the TFT pcb.
The legends printed on the pcb should match those on the TFT.
The ESP32 can now be placed onto the centre two connector rows.
Again, the legends on the pcb and ESP32 should line up.
Take care when inserting the boards, to ensure no pins are bent.
The three-part-set (well the ones I bought anyway) already had test firmware on them. Connecting to USB power, you should see a keypad. When you get to step 5 Arduino IDE Software load and open the Serial Monitor, when pressing the keys & Send on the tft screen, the numbers will appear on the computer screen.
If you are not using the 3-part set, but separate parts without the pcb, move onto the next step - Wiring.
Step 2: Wiring Guide
If using the three-part set, no wiring is required. You can skip this step.
If you are not using the 3-part set, the ESP32 and TFT board can be connected using suitable wires.
If using a bare ESP board, you will need to use Dupont wires. However these do not fit tightly, so I would suggest hot gluing them in position once the project is finished.
If using the screw-terminal e
The JST XH connector has a tighter grip, so should not come loose.
The attached wiring diagram shows the wiring connections.
Attachments
Step 3: Adding the ESP32 Driver to Your Computer
The ESP board has a built in USB port, making it easy to connect to the computer.
The driver may require installing to your computer. Follow the PDF guide to see if your computer already has the driver & if not, how to load it.
Step 4: Arduinio IDE Software Load.
A computer program called Arduino IDE has to be installed on the computer. For our project, it is only used as a terminal, to input your setup detail.
Follow the guide for how to do this.
Step 5: Firmware Load
Firmware is downloaded directly to the ESP32 board. This saves all of the problems with loading Python, Visual Studio, Platform IO onto your computer, followed by all the source code and then learning how to use it all!
To download the firmware, a small stand-alone program is required.
Follow the guide to install it and upload the firmware to your Weather Clock.
The firmware can be found at the link below
Important update:- If you are in the Southern Hemisphere, use the file littlefs_southern.bin in place of littlefs.bin
Attachments
Step 6: Collect User Settings to Set Weather Clock
The Weather Clock requires user data to be entered
Some data you should know, your WIFI SSID and password, for example.
The other data you will need to find out from the great Interweb.
The document below describes how to find this information.
Put all of the gathered information into a text file, using notepad or similar.
The result should look something like:-
------------------------------------------------------------------------
SSID = your-WIFI-SSID
WIFI_PWD = your-password
TIMEZONE = GMT0BST,M3.5.0/1,M10.5.0
METRIC or Imperial = Metric
OPEN_WEATHER_MAP_API_KEY = 4b1234567890bf49d54c40a5b12345678
OPEN_WEATHER_MAP_LOCATION_ID = 2644559
DISPLAYED_LOCATION_NAME = London
Language = en
-----------------------------------------------------------------------
Note: - That although the language is selected, this only applies to data downloaded from openweather.org.
The source code was hard coded to English. I have added multi-language support, which currently is en, fr, cz and pt
(English, French, Czech & Portuguese)
Selecting either of these should give the whole screen in that language.
It is laborious to add each language, so I will only add additional languages when requested to do do by users.
Drop me a message if you would like additional language support.
Step 7: User Instructions
Hopefully you have been able to follow the preceding documents and now have an ESP32 board which as the Weather Clock firmware installed on it.
All that is left is to add your user credentials, how to do this is described in the document below.
Attachments
Step 8: 3d Printed Case
A case for the clock is up to your imagination. A 3d printed case is available to download and print.
Included is a a little U block that can be used upside down to secure the USB cable permanently,
or the other way around, so the channel is on the top and fitting the little sliding catch with a screw.
This way the cable can be put into the channel and by sliding the catch, hold it in place.
The photo shows the U block used in the upright position, secured with two screws from below, with the catch, to hold the USB cable in place.
As well as the 3d print, the following hardware will be required
two of 25mm x 3mm bolts, nuts & washers
two of 12mm x 3mm bolts, nuts & washers
to secure the electronics into the case.
2 of 2mm X 6mm self-tapping screws to secure the U block (or glue it)
and
1 of 2mm X 6mm self tapping screw to secure the catch, if used.







