The code is available here
The Readme file at Github says the following:
Makes a very simple WSPR beacon from your RasberryPi by connecting GPIO
port to Antanna (and LPF), operates on LF, MF, HF and VHF bands from
0 to 250 MHz.
Credits:
Credits goes to Oliver Mattos and Oskar Weigl who implemented PiFM [1]
based on the idea of exploiting RPi DPLL as FM transmitter. Dan MD1CLV
combined this effort with WSPR encoding algorithm from F8CHK, resulting
in WsprryPi a WSPR beacon for LF and MF bands. Guido PE1NNZ extended
this effort with DMA based PWM modulation of fractional divider that was
part of PiFM, allowing to operate the WSPR beacon also on HF and VHF bands.
[1] PiFM code from http://www.icrobotics.co.uk/wiki/index.php/Turning_the_Raspberry_Pi_Into_an_FM_Transmitter
To use:
In order to transmit legally, a HAM Radio License is required for running
this experiment. The output is a square wave so a low pass filter is REQUIRED.
Connect a low-pass filter to GPIO4 (GPCLK0) and Ground pins on your
Raspberry Pi, connect an antenna to the LPF. The GPIO4 and GND pins can be
found on header P1 pin 7 and 9 respectively, the pin closest to P1 label is
pin 1 and its 3rd and 4th neighbour is pin 7 and 9 respectively, see this
link for pin layout: http://elinux.org/RPi_Low-level_peripherals
The expected power output is 10mW (+10dBm) in a 50 Ohm load. This looks
neglible, but when connected to a simple dipole antenna this may result in
reception reports ranging up to several thousands of kilometers.
This software is using system time to determine the start of a WSPR
transmissions, so keep the system time synchronised within 1sec precision,
i.e. use NTP network time synchronisation or set time manually with date
command. Reception reports are logged on Weak Signal Propagation Reporter
Network: http://wsprnet.org/drupal/wsprnet/spots
As the WSPR band is only 200 Hz wide, some frequency calibration may be needed
to ensure that the transmission is done within the WSPR band. You can correct
the frequency error manually in the command line or adjust CAL_PLL_CLK in the
code.
Usage:
sudo ./wspr <callsign> <locator> <power in dBm> <frequency in Hz>
e.g.: sudo ./wspr K1JT FN20 10 7040074
WSPR is used on the following frequencies (local restriction may apply):
LF 137400 - 137600
MF 475600 - 475800
160m 1838000 - 1838200
80m 3594000 - 3594200
60m 5288600 - 5288800
40m 7040000 - 7040200
30m 10140100 - 10140300
20m 14097000 - 14097200
17m 18106000 - 18106200
15m 21096000 - 21096200
12m 24926000 - 24926200
10m 28126000 - 28126200
6m 50294400 - 50294600
4m 70092400 - 70092600
2m 144490400 -144490600
Compile:
gcc -lm -std=c99 wspr.c -owspr
This looks amazing! Congratulations to Guido and also to Dan Ankers, MD1CLV whose work led to Guido's enhancements.
4 comments:
Oh no....I'm going to have to buy another RPi now
Chatting to Dave G4FRE this afternoon we're not sure if it will really be stable enough for WSPR - worth a play though!
Failing that - there's a nice program to make the Pi transmit FM!
Tim
Mine seems stable enough (28MHz tried)!
However, I needed to clean up the signal a LOT, as there were 100Hz/50Hz sidebands a go-go!
The software is also VERY sensitive to the parameters put in, else it generates false WSPR codes (only 4-character locator codes etc..)
Thanks for the efforts!! Hugh F/G6AIG
Hi Hugh,
That's encouraging! I was musing that maybe it would be stable enough on HF/LF at least, even if it wasn't so good at VHF.
I can imagine cleaning up the signal was quite an issue!
Vy 73, Tim
Post a Comment