An amateur radio information display built for the Guition JC2432W328 ESP32 development board with 2.4" touchscreen.
CheapClock turns a cheap (~£15) ESP32 touch display into a live ham radio dashboard — pulling real-time propagation data, DX spots, contest schedules, and more from the internet. It's designed as a starting point for radio amateurs to customise and extend into something that suits their shack.
Board: Guition JC2432W328 (or equivalent)
- ESP32 @ 240 MHz, 4 MB flash
- 2.4" 320x240 ST7789 TFT LCD (SPI)
- CST820 capacitive touchscreen (I2C)
- SD card slot
- LDR (light sensor) for auto-brightness
- RGB LED
No additional hardware required — everything runs on the stock board.
| Screen | What it shows |
|---|---|
| Solar Conditions | SFI, sunspot number, K/A indices, X-ray, solar wind, geomagnetic field status, band conditions (80m–10m day/night) from hamqsl.com |
| DX Cluster | 10 live DX spots with frequency and callsign. Tap a spot to see bearing and distance from your grid square |
| Greyline Map | Real-time world map with day/night terminator, twilight zones, and geographic grid lines |
| Contest Calendar | Active and upcoming contests parsed from contestcalendar.com RSS feed |
| Clock | UTC and local time, date, callsign, grid square, sunrise/sunset, moon phase, and weather (with OpenWeatherMap API key) |
| POTA Spots | 10 live Parks on the Air activations with park reference, callsign, frequency, and mode |
| SOTA Spots | 10 live Summits on the Air activations with summit reference, callsign, frequency, and mode |
| WSPR Activity | Live reception counts across 11 WSPR bands (160m–6m) from wspr.live |
| HF Propagation | VOACAP-style band-by-region propagation predictions (80m–10m to NA, SA, EU, AF, AS, OC) calculated locally using current SSN and your grid square |
| PSKReporter | World map showing who is receiving your signal in the last 15 minutes via PSKReporter, colour-coded by band. Requires callsign to be set |
- Auto-cycle through all screens at a configurable interval (5–120 seconds)
- Colour-coded status indicators throughout the interface
- Auto-brightness using the onboard LDR, or set brightness manually
- Screen timeout to save power (0–30 minutes, 0 = always on)
- Refresh indicator — coloured dot shows data fetch status (amber = fetching, green = fresh, red = stale)
- WiFi signal strength indicator
- Swipe or tap to change screens
- Full on-screen QWERTY keyboard for entering callsign, grid square, and WiFi credentials
- 7-page settings menu for all configuration
- WiFi — scan and connect to networks
- Callsign & Grid Square — displayed on clock screen and used for bearing/sunrise calculations
- Brightness — manual slider or auto-brightness toggle
- Auto-cycle — enable/disable and set cycle speed
- Screen timeout — set sleep timer
- UTC offset — local time display (-12 to +14)
- Screen toggles — enable or disable individual screens from the cycle
- Sunrise/sunset from your Maidenhead grid square
- Moon phase name and age
- DX bearing and distance (great circle) from your grid to spotted stations
- DXCC prefix lookup for ~46 entities
- Solar geometry for the greyline map (declination, subsolar point, terminator)
- HF propagation prediction — simplified ITU-R model using SSN, time of day, season, latitude, and path distance to estimate MUF and band reliability
- SD card config — settings persist across reboots via
/config.txt - OTA firmware updates — check for and install new versions over WiFi. The OTA URLs in the code currently point to the author's server. If you fork this project, update
OTA_VERSION_URLandOTA_FIRMWARE_URLinCheapClock.inoto point to your own server - OpenWeatherMap integration — optional, add your API key for weather on the clock screen
Settings can be changed via the touchscreen menu or by editing config.txt on the SD card:
callsign=M0ABC
grid=IO91wm
brightness=200
ssid=MyWiFi
password=MyPassword
autocycle=1
autobrightness=1
tzoffset=0
cyclespeed=15
screentimeout=10
screens=1111111111
owmkey=your_openweathermap_api_key
Download and install the Arduino IDE (v2.x recommended).
- Open Tools > Board > Boards Manager
- Search for esp32 and install esp32 by Espressif Systems
Open Tools > Manage Libraries and install:
| Library | Author | Purpose |
|---|---|---|
| LovyanGFX | lovyan03 | TFT display driver (ST7789) |
| bb_captouch | bitbank2 | Capacitive touch driver (CST820) |
All other libraries (WiFi, HTTPClient, SD, SPI, etc.) are included with the ESP32 board package.
- Open
CheapClock.ino - Connect the board via USB-C
- Under Tools, set:
- Board: ESP32 Dev Module
- CPU Frequency: 240 MHz
- Partition Scheme: Default 4MB with spiffs
- Flash Size: 4MB
- Upload Speed: 921600
- Port: (select the COM port that appears when you plug in the board)
- Click Upload
Format a micro SD card as FAT32 and create a config.txt file to store your settings (see Configuration above). Without an SD card, settings will revert to defaults on each reboot.
- bb_captouch by @bitbank2 — CST820 capacitive touch driver
- maxpill/JC2432W328 — board documentation, pinouts, and example code for the Guition JC2432W328
- ESP32-Cheap-Yellow-Display by @witnessmenow — community resource for CYD variants and projects
| Data | Source | Refresh |
|---|---|---|
| Solar/propagation | hamqsl.com/solarxml.php | 60s |
| DX spots | dxlite.g7vjr.org | 60s |
| Contests | contestcalendar.com RSS | 1 hour |
| POTA spots | api.pota.app | 60s |
| SOTA spots | api2.sota.org.uk | 60s |
| WSPR activity | wspr.live | 5 min |
| HF propagation | Calculated locally (ITU-R model + SSN) | 5 min |
| PSKReporter | pskreporter.info | 5 min |
| Weather | OpenWeatherMap | via clock refresh |
| Time | NTP (pool.ntp.org) | on boot |
This project is meant as a starting point. Fork it, hack on it, add the screens you want. Some ideas:
- Band activity heatmap
- QRZ lookup on DX spots
- Local repeater list
- Logbook integration
- CW/FT8 decode display
- APRS tracker
This project is licensed under the GNU General Public License v3.0.



