HamClock needs no introduction here. Elwood Downey, WB0OEW, gave the hobby something genuinely useful, and his passing in January 2026 was felt well beyond the people who ran his software. It sat in a great many shacks, mine among them.
Having just finished the ESP32 weather station, I wanted to see whether a small touch panel could offer something in the same spirit: yours to read, build and change, and free for private use.

Why it is not for sale
The licence is the part I thought about longest, so it is worth explaining rather than leaving at the bottom of the page in small print.
Everything this device shows comes from somebody else’s generosity. NOAA SWPC, wspr.live, prop.kc2g.com, Open-Meteo, HamQTH, DXWatch, AD1C’s cty.csv — all free, all anonymous, most of them maintained by one or two people in their own time. A single station on a shelf costs them nothing worth counting. A commercial production run would, and it would be their bandwidth quietly underwriting somebody else’s profit margin.
So the source is open for anyone to read, build and modify, and it is free for personal, club, educational and research use — but selling it, in any form, is not permitted.
I should be accurate about the label: that makes it source available rather than open source in the formal sense, because the OSI and FSF definitions both require that a licence place no restriction on commercial use. I considered the GPL for exactly that reason and decided against it, because copyleft prevents a derivative being made proprietary but does nothing to stop one being sold — a manufacturer could build this by the thousand and comply simply by publishing the source. The restriction is not there to protect revenue. There is none, and none is intended.
It never learns your callsign
Every way of getting DX cluster data onto a screen wants your callsign first. Telnet to a DX Spider node: log in with your call. The Reverse Beacon Network: same. And once you have, anyone on that network can type sh/users and see you sitting there, along with everyone else who happens to be listening.
For a box on a shelf that only ever reads, that seemed like a strange price to pay. So I built one that does not pay it.
The callsign never leaves the device. That is not a feature bolted on afterwards, it is the constraint the whole thing is designed around, and it rules things out. DX cluster telnet is unavailable. The Reverse Beacon Network is unavailable. Both are the obvious sources, and both are closed to a device that refuses to identify itself.
What is left are HTTPS feeds that need no account at all — HamQTH and DXWatch — merged and de-duplicated into one list.
The only location data that ever goes out is your two-character Maidenhead field, the JO in JO30WP, which is about a thousand kilometres across. That is enough to ask “what has been heard from this part of the world” and not enough to say anything about you.
One honest exception, because a privacy claim with an asterisk hidden in it is worth nothing: the local weather forecast needs real coordinates. Asking Open-Meteo about a thousand-kilometre square would return something useless. So the position derived from your full locator does go to that one service, placing the station within roughly 2.5 km. No callsign, no account, no identifier accompanies it. The device says so on its own About screen rather than only in a README.
Measured, not modelled
Most propagation displays show you a prediction. This one shows you what actually happened.
Every dot on a band map is a grid square that genuinely received a WSPR signal from your region in the last three hours. If a sector is empty, that means nobody there heard anything — which sometimes means the band is shut and sometimes means nobody there is listening. Those are different things, and a model will confidently tell you neither.


Azimuthal equidistant, centred on the QTH. Straight up is true north, so the angle to any dot is the bearing you turn the rotator to.
There are two projections and they answer different questions. The azimuthal equidistant view is centred on your QTH with bearing spokes every 30°, so screen direction is beam heading and radius is proportional to true distance. The grey line view cannot show bearings, but it shows the terminator — which is exactly what you want when chasing low-band openings.
MUF comes from the nearest ionosonde, and the display names it and gives its distance. A MUF is a measurement taken at one place, not a property of the sky everywhere, and rounding that off would be dishonest.
What else is on it
- Space weather from NOAA SWPC — SFI, A, K, X-ray class, solar wind, Bt and Bz, the R/S/G scale levels, and a three-day planetary Kp forecast.
- An info panel at three severities — red for a thunderstorm overhead or a gale threatening the antennas, amber for degrading conditions, green when a most-wanted DXCC entity turns up on the cluster.
- Twelve band buttons with measured conditions on each; tap one for its map.
- DX cluster with band, mode, country and comment, up to eight pages, callsigns coloured by whether they are most wanted, another continent, or near. Filterable by band, mode, category and source.
- 340 DXCC entities and around 8,300 callsign prefixes compiled in, so a spot from a feed that sends no country name is still identified correctly.
- Six languages — English, German, Russian, French, Italian, Spanish — and EU / UK / USA unit systems affecting clock, temperature, distance and date.
- Local weather, sunrise, sunset, and time to the next grey line.

Why there is no server behind it
There is one more lesson from HamClock, and it is a hard one. In June 2026 it stopped working when its central backend went offline. Every installation in the world lost its data on the same day, while the software itself carried on running perfectly.
That is the reason this project has no backend of its own, treats every single-maintainer service as temporary, and makes each page degrade to a visible unavailable rather than quietly showing yesterday’s numbers as though they were today’s. When a source disappears — and one will — the device should say so plainly instead of pretending.
Two boards, one source tree
It runs on the Waveshare ESP32-S3-Touch-LCD-7 (7″) and the Sunton ESP32-8048S050C (5″). Both are 800×480 RGB565 with GT911 capacitive touch and 8 MB of octal PSRAM, and everything above the board support layer is identical. Below it, almost nothing is: the pin assignments share no numbers, the panel timings differ, and the two boards do not even agree on how the backlight and touch reset are reached.
The price? 40€ for a ESP32 display board + 3D Printed case.
Prebuilt images for both are in the repository. Building both from source is one command.
Prebuilt images, the full source, the pin maps and the licence are all here, under PolyForm Noncommercial 1.0.0 as set out at the top:
github.com/dm5al/esp32-ham-weather-station
Build one, and tell me what it gets wrong.