Original QST Article proof
- There is a typo in Table 1. The RA8875 costs $35, not $5.
- There is a typo in Fig 2. The 33K resistor should be 330K.
- You should always install this resistor, whether or not you use the photocell.
Download current stable release source code
- fixed: compile bug on RPi
- fixed: several EEPROM settings were still getting lost.
Hopefully this is the last EEPROM bug .. thanks for your patience.
- fixed: call sign was lost after Setup screen and some EEPROM values will need resetting
- fixed: DX Cluster could hang depending on connection state
- changed: leave DX Cluster host blank to disable entirely
- changed: allow call signs up to 11 characters long
- changed: DX Cluster now requires Setup server entry, there is no default
- fixed: improved plot data error messages
- new: tapping a DX Cluster spot will set it as new DX
- fixed: Wire.cpp compile error on some UNIX systems
- fixed: 24 hour clock-off bug
- fixed: added better desktop remote update error messages
- fixed: xray plot guards against bogus 0 values
- fixed: ESP sporatic rebooting
- change: ESP with photoresistor now also includes on/off timer control
- change: underline "DX:" to suggest it can be clicked for sat selection table
- fixed: tweaked several prefix locations
- new: show closest DX prefix when tap new location if one is near
- new: option to show DX prefix instead of sun rise/set times (tap to select)
- new: display on/off timer control if no photoresistor in ESP or RPi fb0
- change: sat selection shown only if requested (no longer shown on boot)
- change: significant core graphics redesign
- change: RPi FB0 cursor disappears after 2 seconds of no mouse motion
- fixed: turning on geoip in setup disables lat/long fields
- fixed: desktop network info now uses /sbin/ip if no /sbin/ifconfig
- fixed: add slash to desktop small font 0 to match ESP
- fixed: possible loss of desktop EEPROM emulation file
- new: show sat pass duration next to max elevation; remove zenith marker
- new: touching top and bottom edges of hours changes by 2, minutes by 10
- fixed: desktop map is brighter and has much simpler oceans
- fixed: NCXDF call sign could encroach on RSS area
- fixed: sat name over oceans better avoids DE and DX markers
- new: separate maps optimized for TFT and desktop displays
- new: third lat/long grid option showing tropics
- new: show NCDXF call sign beneath each station
- fixed: more natural character spacing in setup
- fixed: stop sun and moon from flashing when at right edge
- new: support for 2400x1440 and 3200x1920 desktop sizes; no feature changes.
- new: display serial number in network splash screen
- fix erasing ? when NTP resumes
- Argh, missed another spot for GFX library
- missed one spot for GFX library
- tighten up geometry for latest GFX library
- fix stopwatch rollover after 99 hours
- Change to accomodate Adafruit_RA8875.h version 1.3.3
- new: stopwatch
- new: tap Rise/Set to toggle between duration vs local time
- new: optional map lat/long grid
- coordination release, no functional changes
- new: VOACAP predicitions may be made for short or long path
- new: tap sat name on map to get pass details (in addition to sat location)
- new: color key added to sat selection pane title
- new: better RPi X11 desktop drawing performance
- fixed: bearing and map used lat/long 0/0 after boot until set
- new: tapping bearing to toggle between short and long path changes distance to match
- fixed: preserve DE grid square
- fixed: DX grid square would show through if click there while sat pass is shown
- fixed: fill screen off by 1 pixel in X11 version
- new: tap bearing to toggle between long and short path
- new: tap sat name to see pass details (in addition to current sat location)
- fixed: disable tty1 getty on fb0 version
- fixed: do not start collecting sensor data until NTP time has succeeded
- fixed: say "No Set", not "No Rise", when geostationary satellite is visible from DE
- fixed: left-right cursor wrap in RPi fb0 version
- reduce flicker when sun is near moon
- Updated remote command set, send /help for list
- Change Band Conditions title to hopefully clarify the meaning of the table
- New option to set DE Lat/Long automatically using IP geolocation service
- 2x Mercator and 1.3x Azimuthal map drawing speed up
- Added some NOAA weather satellites to list
- Setting a new DX location shows VOACAP band predictions from DE
- fix bug in RPi version that interfered with WiFi configuration
- all new brightness controls
- only ask for WiFI credentials in Setup on ESP version, require user to setup their internet first on other versions
- fix bug where DE DST flag was not being restored from NVRAM
- fix bug causing moon to leave sparkles on edge of azimuthal map
- use manufacturing wifi credentials as initial default
- change brightness bulbs from yellow to white
- draw small symbol if photoresistor is detected
- draw satellite name grayed out in list if never rises at DE
- add light bulb icons as display brightness controls (ESP models only)
- fix rare issue when a satellite pass lasted less than 90 seconds
- do not draw DX marker if should be hidden by RSS
- allow lower case nsew in login screen
- remove blinking cursor in RPi fb0 version
- improve methods for discovering gateway and wlan0 ip in RPi version
- shorter network count-down
- add grid square touch to show possible alternate if not exactly at integral coordinates
- fix RPi fb0 cursor overflow along bottom edge
- don't redraw map if tap on UTC when already On
- don't briefly show DE info after refresh when analog clock is enabled
- fix down counter color in remote update pane
- Tweak analog clock hands
- fix bug if satellite pass curve is very short
- fill black border on RPi fb0 version to erase any system messages
- squeeze more Satellites in table
- fix character spacing issue in Setup screen
- fix issues building on Ubuntu-MATE
- only draw transmitting NCDXF beacons
- preselect No button to emphasize firmware update will not occur by default
- show satellite list name red if up now, green if up soon
- faster satellite list drawing
- Show time to next rise for each satellite in selection screen
- Start NTP rotation with time.google.com
- Swap colors for satellite track and footprint
- Label 0 (now) on plots with future predictions
- Increase tap hold time to 1 full second
- Draw satellite footprint in darker red to better distinguish from track
- Fix sometimes erasing screen lock padlock
- Add new analog DE clock option
- holding the screen lock padlock will restart
- use same stored colors in splash call sign
- fix sat pass graphic if maximum elevation less than 1 degree
- allow using keyboard in Setup pane if built for x11
- support for longer WiFi SSID and password
- add dew point sensor plot
- prompt Tap or Click
- Show Satellite name immediately when set a DX
- fix bug in desktop EEPROM emulation that eventually starved all io
- Satellite name cooperates with RSS
- label satellite name on map when not in DX region
- smoother sensor plot update after changing satellite
- report wifi RSSI on linux
hamclock-fb0-small Makefile target for RPi's with 7" screens
- more reliable reporting of MAC address
- don't ask rotation on desktops
- restore uptime after changing satellite
- higher resolution moon symbol on big desktop versions
- better looking J on big desktop versions
- fix occasional missing or partially drawn lines in desktop versions
- big desktop versions display commensurately higher resolution SDO images
- support self updating in desktop versions too
- tap Version to check whether an update is available (all versions)
- allow resizing desktop versions
- allow listing more satellites
- fix stray satellite path pixels at edge of Azimuthal view
- add support for linux, RPi and macOS desktop
- fix problem where a new sat selection was not always used
- add satellite and settime REST commands
- improve checking whether TLE is suitable epoch
- improve Bosch BME280 temperature and humidity accuracy
- label satellite path zenith and maximum elevation
- add memory and reboot REST commands
- remove grayline option, replace GRA button with AZM
- improve memory management for long paths
- add count down to firmware update screen
- fix sat tracks leaving pixels on map edge
- better twilight for RPi version too
- much better grayline twilight graphics
- erase dx marker and path when changing to Satellite info mode
- better screen management going into and back from sat selection page
- refresh sat info if user changes time a lot
- increase current satellite location tap area
- fix tapping area for dx lat/long
- add display of Earth satellites
- linux version now just uses existing network
- progress dots replaced with count down
- improved environment sensor initialization and expand plot to 25 hours
- better http handling
- reduce linux map raster jaggies
- fix xray level designation below A and above X
- display xray level designation
- accommodate more RPi screen resolutions
- fix rainbow on RPi
- new Earth map
- add support in RPi version for Bosch BME280 environment sensor
- first release supporting Raspberry Pi
- refresh RSS immediately when toggle map projection
- display complete IP address
- fix box around wx report that did not quite match the alternate plot
- show device MAC address before connecting
- all new RSS system that retrieves from my server
- displays round robin from ARRL, Southgate, eHam and DXNews
- label weather units
- remove eHam RSS because they now redirect to https and there is no room in Huzzah
to support https.
- add Setup option to enter initial DE lat and long
- center date better under wider call sign area
- timezone table now uses 1 degree resolution
- add photocell wiring to README
- add Setup option to rotate screen
- squeeze out a little more room for wider call signs
- offer a little more time to choose Recalibrate and Setup screens
- remove option to downgrade
- fix plot bug if sensor drops out for extended period then recovers
- More automated remote update knows when a new version is available
- Touch now supports auto-repeat in most fields
- Add degree symbol to weather temperature value
- Add more specific weather error messages
- Show weather data for 30 seconds after changing DE or DX
- a little more map detail
- more robust RSS parser
- faster WiFi retries when signal is lost
- fix RSS flashing when no WiFi signal
- increase clock from 80 to 160 MHz
- eliminate need for Shift key in setup keyboard -- show both cases at once
- Raise upper case J in smaller font
- add remote WiFi firmware updating
- smoother brightness control
- fix speckles across the bottom of RSS banner
- allow 0-length setup fields
- more efficient Grayline toggle
- new REST commands:
- better J in regular font
- softer border lines
- use separate colors for short and long path
- add more instructions for touch screen calibration
- more grid square mods
- add Azimuthal projection option
- add WiFi connection progress dots
- add degree symbol after bearing angle
- accommodate changes in ESP library version 2.4.0 and still maintain compatability with older versions
- allow Huzzah to reuse stored SSID for faster booting and faster recovery if WiFi comes back
- fix for rare compile problem related to Time.h by changing to TimeLib.h
- split right plot touch so top half cycles SDO images and bottom half cycles sensor plots (if installed)
- tweak xray download code
- further improve rendering call signs containing descending characters
- improve WiFi state reporting and resilience to NTP errors
- plot both long and short XRay wavelengths
- add padlock icon that locks screen
- tweak time zone for Bouvet Island
- alternate WiFi dBm with IP
- redirect all web accesses to CSI server
- increase wifi login timeout
- Tweak RESTful commands
- 25 hour XRay plot
- More RESTful commands, returns new values in JSON format if applicable
- avoid pressure values overflowing plot size in metric mode
- reduce clock flicker -- contributed by W2ROW
- add Metric/Imperial setup option to choose sensor plot units
- make GRA button more consistent with RSS
- fix rounding error in maidenhead grid square calc
- reset sensor queue if fails to restart
- add grayline on/off button
- add grayline down to 12° twilight
- improve rendering of call signs with descending characters J and Q
- fix display bug if solar flux prediction download fails
- improve drawing lunar phases
- reset the Bosch sensor if any value seems bogus
• How do I build the software?
- Install the latest Arduino IDE with these
I am currently using version 1.8.10.
- Load up the ESP extension described
here then Exit the Arduino IDE.
- Download and install the following Arduino libraries:
(If you need help with libraries in general try
Connect your computer to the Huzzah with a USB port
Download current stable release
unzip it any place you wish.
Start the Arduino IDE. Open the ESPHamClock.ino file you just unzipped. This will
create a new project.
In the IDE Tools menu make the following selections:
If the options you see do not look exactly like mine do these steps:
- open Tools → Board → Boards Manager...
- In the search box type esp. Look for esp8266
- Click More Info
- Click Select version and select 2.4.0 (not newer versions)
- Click Update
- Click Close
Run Sketch → Compile then Sketch → Upload
Your HamClock should start running. Follow the touch screen and setup functions carefully.
• How does the DX Cluster feature work?
In the Setup page, set the internet host name and port for a DX Spider node. A
good list is here.
Be sure to choose a Spider node, AR clusters are not supported. If you leave the host
name blank, then the entire cluster option will be disabled.
Once the HamClock is up and running, tap the center plot pane until the DX Cluster appears.
The name of the host will be shown in yellow, and it will turn green when a connection is
established. If the connection fails, it will show an error in red.
Once connected, just leave it run, new spots will be listed, scrolling when full.
Tap on a spot to set DX to that location. Pretty neat!
the cluster node is logged into using the call sign you use for HamClock. If you
want to use the unassisted category in a contest, you should set the host to blank in
the Setup menu to insure you don't accidently log into a cluster -- some contest
judges will check!
Spider nodes support a lot of options. HamClock makes no attempt to
reproduce any of these. But you can set them by logging in with the same call sign from
a different application or telnet session. Most nodes will carry the filter settings over
to all login sessions, so this will effect the HamClock session as well. Here is just one
example of a set of filters that will show only CW spots from operators in US or southern Canada:
filter1 reject not by_zone 3,4,5
filter2 reject not on hf/cw
filter3 reject on hf/rtty
filter4 reject on hf/ssb
filter5 reject info ft8
To use a
9" ER-TFTM090-2 from buydisplay.com:
Select these options during purchase:
- Pin header 4 wire SPI
- VDD 5 V
- Touch panel 9" resistive
- Micro SD - none
- Font chip - none
This is the wiring list:
EP = ESP Huzzah
BM = BME280 sensor
PC = photo cell
DP = display
EP_ADC PC_1, 330k
EP_USB DP_3, 4, 37, 38
EP_GND DP_1, 2, 13, 31, 39, 40
- Larger, brighter, richer colors
- Simpler wiring because you do not need the RA8875 or flat cable
- Requires a very good USB supply, at least 2 A.
from Adafruit is known to work well.
The display stand from Adafruit can be made to work with a little ingenuity but is not perfect for the LCD.
Send suggestions for better ideas and I will post here.
One alternative I found is
that suggests normal picture framing components could be used.
The stand from Adafruit is actually made by
Pimoroni so I asked them
for better suggestions. They said they know of no stand suitable for the Adafruit
LCD but thought
might be pressed into service with less effort.
G3XOU used this
Pi screen support
with some assembly details
KF5LW suggests adopting this
Pi screen support.
He said he 3D-printed a piece to the Pi dimensions then it worked well.
W3TMC sent a
of the nice looking oak stand he built.
- N2YTF did a nice job with some simple wood and a breadboard. He sent photos
N6ROB attached the components and display to the stand with hot glue after sanding and
wiping down with alcohol. The result
looks clean and efficient.
N7EEK has taken a minimalist approach that works well using a $9 stand from
See his photos here.
ON4AEY made a nice clock and sent me
N7LVS made this
showing his construction technique.
HB9AJG shared his very nice arrangement from the
in his shack.
WA1TOV put his in a clear frame he found
here. He comments:
The back of the display is glued to the face of the frame. You might be able to see round glue dots in the rear view photos. I used E6000 glue. To do this I had to cut a 1.5" slot in the frame to feed the ribbon through. This was done with a Dremel and cut off wheel, just working very carefully and then cleaning it up with a jeweler's file.
If you find your display idea works better if the cable exits from the top, there is an
option in the Setup screen that allows you to flip the display upside down.
Shack photo showing 7" version.
Rear of 7" version
Both the 7" and 9" versions.
Rear of 9" version
This is a guide to the touch controls and map symbols of HamClock. Click for a printable view in a separate window.
HamClock may now be built for linux, Raspberry Pi, macOS, FreeBSD or any other
UNIX-like system with the X11 Windows development library.
Or, on the Raspberry Pi, HamClock may be configured to take over the entire
HDMI display as a dedicated application using /dev/fb0. Use this version when you want to
connect to your Pi using ssh and not use the linux desktop.
HamClock may be built in the following sizes:
- 800 x 480
- 1600 x 960
- 2400 x 1440
- 3200 x 1920
Operation of the HamClock on these platforms is exactly the same as the
ESP8266 version with the following exceptions:
- no support for the photocell auto dimming feature, and no brightness control
- support for the BME sensor is only available on Pi
- the keyboard may be used to operate the Setup menu when built for the
X11 Windows version
• To give it a try on your desktop, follow these steps:
- open a terminal on the target system desktop to get a command line prompt
- run these commands:
curl -o ESPHamClock.zip http://www.clearskyinstitute.com/ham/HamClock/ESPHamClock.zip
make -j 4 hamclock
This example command will build HamClock at 800x480 pixels for X11.
make help for a complete list of other sizes and desktop environments.
On macOS, you can turn the bare executable into a clickable App and test it as follows:
mkdir -p HamClock.app/Contents/MacOS
cp hamclock HamClock.app/Contents/MacOS
If you get errors:
• To try it on a Pi using a dedicated fb0 HDMI display, follow these steps:
log in via ssh (or putty, etc)
sudo raspi-config one time and set the following options:
- Boot Options -> Desktop/CLI -> Console
- Network options -> Network Interface names -> enable predictable names? No
- Advanced options -> Resolution -> choose any 1600x960 or larger
- connect to your Pi again with ssh and run HamClock on the HDMI fb0
display as follows:
curl -o ESPHamClock.zip http://www.clearskyinstitute.com/ham/HamClock/ESPHamClock.zip
make -j 3 hamclock-fb0
This example command will build HamClock at 1600x960 pixels for RPi fb0 HDMI.
If you want the smaller size 800x480, perfect for 7" touch panels,
make help for a complete list of other sizes and display environments.
If you see a little blinking line near the left edge, try running this command:
sudo bash -c "echo 0 > /sys/class/graphics/fbcon/cursor_blink"
Note that both versions emulate the ESP non-volatile EEPROM with the file ~/.rpihamclock_eeprom.
Removing this file will reset the HamClock back to all default values.
• If you want to use the Bosch BME280 environment sensor on RPi, follow these steps:
- connect the sensor to the Pi using the 40 pin connector as follows:
Pi 1 BME Vin
Pi 3 BME SDI
Pi 5 BME SCK
Pi 9 BME GND
- install i2c-tools:
sudo apt-get install i2c-tools
sudo raspi-config and set the following options:
Interface Options: I2C: enabled
- Check the Bosch is connected correctly with these tests:
sudo i2cdetect -y 1
you should see 77 in lower right corner of matrix; then
sudo i2cdump -y 1 0x77 b
you should see a matrix of numbers, NOT XX
Restart hamclock by tapping and holding the padlock for 3 seconds.
After HamClock is running again, click in the lower half of SDO image pane to see environmental plots.
• To start
hamclock-fb0 automatically when the system boots, use crontab. For example:
Start crontab with the edit option:
Add this one line:
@reboot cd ESPHamClock; sudo ./hamclock-fb0 > hamclock-fb0.log 2>&1
Save and exit the editor. Test by rebooting.
This example assumes ESPHamClock is in your home directory
and you want to run
Adjust if necessary to match your configuration.
To learn more about crontab type:
man 5 crontab