WSPR transmitter

(Please note that this example program will not run without a GPS antenna)

The WSPR transmitter example program makes the RFzero capable of transmitting on any frequency from 2605 Hz to 200 MHz and beyond.

The transmission takes place in 15 time slots repeated twice per hour. There are two different transmission sequences that can be used in straight order, randomly or in a day/night sequence.

Up to 15 frequency, filter and power combinations can be used. The combinations can be made either manually for each of the 15 combinations or using a command to fill all in one go using an audio offset frequency from 1400 Hz to 1600 Hz. The filter bits can control external filters via the ULN2803A driver IC on D6 to D0.

The transmitted WSPR message can be either Type 1 (call sign , square and power, e.g. OZ0RF JO55 13) or Type 2 (compounded call sign and power, e.g. OY/OZ0RF IP62). Please see the WSPR documentation for more details.

A four lines and 20 characters LCD can be connected showing GPS, transmitted message and sequence data.

The configuration is done via the USB port. The square, used in message Type 2, can be be updated either manually or automatically. It is possible to wait for the RFzero to warm up for up to 255 s before starting to transmit.

When transmitting the TX LED will flash at half the symbol rate, i.e. about 0,7 Hz.

When GPS signals are received the PPS LED flashes ones per second and when the status of the GPS signal is valid the Valid LED is lit.

A PA can be controlled on/off on D7, i.e. off during no transmission to save power.


From time to time OZ0RF operates a WSPR transmitter from JO65FS in the Greater Copenhagen area into a 1:9 UNUN connected to a 16,2 m longwire antenna. Sometimes the RFzero output is boosted to 27 dBm/500 mW. The actual location is nothing to brag about and a better locations will be investigated when time permits.

The RFzero as OZ0RF during the development of the WSPR transmitter example program. The picture shows the RFzero, LCD and low pass filter bank.

You can see the latest spots of OZ0RF on


The display is a LCD (20×4) that shows the UTC, the transmit frequency/skip and sequence, the transmitted message, the GPS status, the number of satellites and the  HDOP.

The LCD showing the UTC, sent message, the frequency and sequence, N = night, S = straight sequence, the GPS status, number of satellites in use and the HDOP.

The LCD while waiting and not transmitting using sequence0 in straight sequence.

The LCD when skipping a time slot and randomly using the data from sequence1.

If you want to change what is shown on the display please edit the functions in the display.cpp file.


The configuration of the program is done via the USB port, 9600 Baud, 8 bits, no parity and one stop bit, using a terminal program (e.g. Arduino IDE Serial Monitor, Termite Terminal (Windows), CuteCom (Linux) or Terminal (Mac OS)). Please connect the RFzero via a USB B cable to your computer and connect the terminal program to the right COM port in the terminal program. The RFzero identifies itself as an Arduino Zero (Windows Device Manager).

If you don’t see the RFzero> or RFzero config> prompts please press the enter key. When you want to execute a command you don’t have to enter the prompt but only the command and parameters after the >.

All input to the RFzero must be in lowercase.

To enter the configuration mode please enter   config   at the RFzero> prompt, i.e.

RFzero> config

To see the available commands please enter   ?   at the RFzero config> prompt, i.e.

RFzero config> ?

To leave the configuration mode please enter   exit   at the RFzero config> prompt, i.e.

RFzero config> exit

When in configuration mode, i.e. when you see the RFzero config> prompt, the most frequent commands are

rd cfg

to see the configuration that will be used after exiting the configuration mode.

wr defaults

to set most of parameters to their default values. Please see the actual example program for the specific default values.

wr bcn CALL

where CALL is the WSPR TX call sign. The maximum length for WSPR Type 1 messages is six characters and it must include a number. The maximum length for WSPR Type 2 messages is ten characters and it must include a number. Please see the WSPR specification for more details about the message types.

wr loc LOCATOR

where LOCATOR is the locator up to eight characters, however, only four i.e. the square is transmitted and only for WSPR Type 1 messages.

wr locator

to automatically let the GPS data set the locator, however, only four i.e. the square is transmitted and only for WSPR Type 1 messages.

wr locauto ONOFF

to turn on or off the manual or automatic locator updating where ONOFF is either 0: for off/manual updating, or 1: for on/automatic updating.

wr tx MODE

where MODE is the transmission mode number

  • 0: transmit using the sequence0 in straight sequence
  • 1: transmit using the sequence1 in straight sequence
  • 2: transmit using the sequence0 in random sequence
  • 3: transmit using the sequence1 in random sequence
  • 4: transmit using sequence0 during the day and using sequence1 during the night

wr filter MODE

to set the number of filter MODE where:

  • 0: no filter control
  • 1-7: the number of filter bits to use
  • 8: analog voltage on A0 in seven bits resolution taken from the filter values per band index

wr seq SET BAND0 … BAND14

to configure the sequence time slots where SET is the sequence number zero (0) or one (1) and BAND# is the band without the prefix and unit, e.g. 2 for 2 m, 4 for 4 m to 2200 for 2200 m or s for skipping the time slot. E.g. to configure the sequence0 with bands form 10 m to 160 m and skipping every third time slot

wr seq 0 160 80 s 60 40 s 30 20 s 17 15 s 12 10 s

All 15 time slots have to be included in the above sequence structure.


to fill one record in the transmitter data array with frequency, filter and power, where

  • INDEX is the array index 0 to 14
  • FREQ is the frequency in Hz from 2605 Hz and up
  • FILTER is the bit pattern on D6:0 in hex, e.g. 2a -> 0101010
  • POWER is the power level in dBm and only these values
    • 0 dBm = 1 mW
    • 3 dBm = 2 mW
    • 7 dBm = 5 mW
    • 10 dBm = 10 mW
    • 13 dBm = 20 mW
    • 17 dBm = 50 mW
    • 20 dBm = 100 mW
    • 23 dBm = 200 mW
    • 27 dBm = 500 mW
    • 30 dBm =  1 W
    • 33 dBm =  2 W
    • 37 dBm =  5 W
    • 40 dBm =  10 W
    • 43 dBm =  20 W
    • 47 dBm =  50 W
    • 50 dBm =  100 W
    • 53 dBm =  200 W
    • 57 dBm =  500 W
    • 60 dBm =  1 kW

e.g. to fill index 0 with 11 MHz, 0101010 filter bits and 40 dBm as the power level

wr data 0 11000000 2a 40


to automatically fill the transmitter data array with the default WSPR frequencies and where OFFSET is the audio frequency (AF) offset form 1400 Hz to 1600 Hz and POWER is the power level in dBm like in the list above, e.g.

wr auto 1500 13

wr warmup SECONDS

where SECONDS is the number of seconds to wait for the RFzero to warm up.

More commands are available so please enter a question mark (?) at the RFzero config> prompt to see them.

Update the WSPRnet locator database

You can use this input form to manually update your locator in the database in case it is incomplete or wrong. Please don’t change another station’s locator.

Your own call sign :   3-10 characters and must be ITU compliant
Your own locator :   format JO65HQ
Call sign of WSPR inventor :   anti spam check and confirmation of intention