{"id":1338,"date":"2022-07-17T17:56:35","date_gmt":"2022-07-17T16:56:35","guid":{"rendered":"http:\/\/m0aws.co.uk\/?p=1338"},"modified":"2022-07-24T14:55:24","modified_gmt":"2022-07-24T13:55:24","slug":"whispering-around-the-world","status":"publish","type":"post","link":"https:\/\/m0aws.co.uk\/?p=1338","title":{"rendered":"Whispering around the world"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The Weak Signal Propagation Reporting Network (WSPR) known as &#8220;Whisper&#8221; in the HAM community is a QRP\/QRPp beacon mode that is used by many HAMs around the world to see pretty much realtime propagation on the HF bands.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1547\" height=\"274\" src=\"https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/WSPRnet.png\" alt=\"\" class=\"wp-image-1344\" srcset=\"https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/WSPRnet.png 1547w, https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/WSPRnet-300x53.png 300w, https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/WSPRnet-768x136.png 768w, https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/WSPRnet-1536x272.png 1536w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I first started using WSPR when I lived in France some years ago and it proved invaluable for assessing antenna performance and directivity. It&#8217;s not a new mode by any means and nowhere near as popular as it used to be as it&#8217;s really been superseded by FT4\/8 these days that provides the same functionality but, with QSO capability too.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Having an old RaspberryPi hanging around and reading about the WSPR software that&#8217;s available for it now I decided to put the Raspi to good use and build a WSPR beacon for the 20m band that I could leave on 24\/7.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Having the EFHW Vertical at the end of the garden means that I can connect it directly to the Raspi without the need for an ATU as it&#8217;s fully resonant. (It&#8217;s actually resonant on 20m and 10m)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I normally run both my RaspberryPi mini computers completely headless and then SSH in to them from my MacBook Pro and decided this was the best way to go with the WSPR beacon too since the WSPR software is command line based and doesn&#8217;t require a GUI.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First thing to do was to upgrade the OS from Debian Buster to Bullseye. It&#8217;s been a while since I used the Raspi but, it fired up perfectly and connected to the LAN without issue.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">After a little time I had the O\/S updated to Bullseye and the Raspi was ready for the software build.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The WSPR program comes in source code only so, this means you have to compile it yourself. This isn&#8217;t a big job as it comes complete with a makefile.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Using a terminal run the following commands to download and compile the WSPR source code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So first thing to do is install git.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt-get install git<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Once git is installed I downloaded the software from the git repository.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git clone https:\/\/github.com\/JamesP6000\/WsprryPi.git<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">It only takes a few seconds to download the software which is stored in a new directory called &#8220;WsprryPi&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before the code can be compiled there&#8217;s a small issue with the includes in one of the source code files that needs to be resolved so that the code compiles without error.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd WsprryPi\nvi mailbox.c<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Using your favourite command line editor, &#8216;<em>vi<\/em>&#8216; in my case I added the following line into the include statement at the top of the code.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;sys\/sysmacros.h&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Once added the full include statement looked like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n#include &lt;string.h&gt;\n#include &lt;stdlib.h&gt;\n#include &lt;fcntl.h&gt;\n#include &lt;unistd.h&gt;\n#include &lt;assert.h&gt;\n#include &lt;stdint.h&gt;\n#include &lt;sys\/mman.h&gt;\n#include &lt;sys\/ioctl.h&gt;\n#include &lt;sys\/stat.h&gt;\n#include &lt;sys\/sysmacros.h&gt;\n\n#include \"mailbox.h\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Once done, I saved the file ready for compilation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Compiling the code is easy, just run the make command and sit back and watch all the compiler messages scroll across the screen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>make<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2048\" height=\"1562\" src=\"https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/M0AWS-make-wspr-1-2048x1562.png\" alt=\"\" class=\"wp-image-1369\" srcset=\"https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/M0AWS-make-wspr-1-2048x1562.png 2048w, https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/M0AWS-make-wspr-1-300x229.png 300w, https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/M0AWS-make-wspr-1-768x586.png 768w, https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/M0AWS-make-wspr-1-1536x1172.png 1536w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>Compiling the WSPR source code<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Once compiled without errors, I just needed to install the binary.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>make install<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">At this point the software is ready to go.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I quickly soldered up a lead to go from the RaspberryPi GPIO pins to the Coax cable that is connected to the EFHW vertical antenna in the garden and connected it all up ready to test.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1864\" height=\"2700\" src=\"https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/Raspi-WSPR-Beacon-1864x2700.jpeg\" alt=\"\" class=\"wp-image-1348\" srcset=\"https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/Raspi-WSPR-Beacon-1864x2700.jpeg 1864w, https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/Raspi-WSPR-Beacon-207x300.jpeg 207w, https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/Raspi-WSPR-Beacon-768x1112.jpeg 768w, https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/Raspi-WSPR-Beacon-1061x1536.jpeg 1061w, https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/Raspi-WSPR-Beacon-1414x2048.jpeg 1414w, https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/Raspi-WSPR-Beacon-scaled.jpeg 1768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>RaspberryPi 2 WSPR Beacon connected to EFHW vertical for 20m\/10m bands<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Pins 7 and 9 on the Raspberry Pi&#8217;s GPIO pins are where the signal is output. Pin 9 is the Ground pin, and pin 7 is the Signal pin. Pin 7 goes to the inner of the coax and pin 9 to the ground side of the coax.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The purple cable is the ethernet cable connecting the Raspi to my local LAN so that I can access it remotely via SSH. I&#8217;ve powered the Raspi off of the USB port on the wifi access point in the radio shack which is always on.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once it&#8217;s all connected it&#8217;s just a case of starting the WSPR program from the command line as user <em>root<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wspr -s -r M0AWS JO02 10 20m &gt; .\/wspr.log &amp;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I run the WSPR program as root user so that it has the correct privileges to access the devices to communicate with the GPIO headers, if you want too start it as your normal user then you&#8217;d need to use sudo to gain the root privileges.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The command line options I&#8217;ve used are as follows:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-s\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Check NTP before every transmission to obtain the PPM error of the crystal<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Repeatedly, and in order, transmit on all the specified command line freqs.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>M0AWS<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">My Callsign<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>JO02<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">My Locator Square<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>10<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The power being used in dBm<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt; .\/wspr.log &amp;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Redirects all output to <em>wspr.log<\/em> in the current directory and then puts the program into the background so that it is left running when I log out.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once the program is started you can monitor progress by using tail on the log file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tail -f .\/wspr.log<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The output you will see will be something like this.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Desired center frequency for WSPR transmission: 14.097100 MHz\n  Waiting for next WSPR transmission window...\n  TX started at: UTC 2022-07-17 16:06:01.015\n  TX ended at:   UTC 2022-07-17 16:07:51.638 (110.623 s)\nDesired center frequency for WSPR transmission: 14.097100 MHz\n  Waiting for next WSPR transmission window...\n  TX started at: UTC 2022-07-17 16:08:01.015\n  TX ended at:   UTC 2022-07-17 16:09:51.639 (110.624 s)\nDesired center frequency for WSPR transmission: 14.097100 MHz\n  Waiting for next WSPR transmission window...\n  TX started at: UTC 2022-07-17 16:10:01.015\n  TX ended at:   UTC 2022-07-17 16:11:51.642 (110.627 s)\nDesired center frequency for WSPR transmission: 14.097100 MHz\n  Waiting for next WSPR transmission window...\n  TX started at: UTC 2022-07-17 16:12:01.015\n  TX ended at:   UTC 2022-07-17 16:13:51.639 (110.624 s)\nDesired center frequency for WSPR transmission: 14.097100 MHz\n  Waiting for next WSPR transmission window...\n  TX started at: UTC 2022-07-17 16:14:01.015\n  TX ended at:   UTC 2022-07-17 16:15:51.639 (110.624 s)\nDesired center frequency for WSPR transmission: 14.097100 MHz\n  Waiting for next WSPR transmission window...\n  TX started at: UTC 2022-07-17 16:16:01.014\n  TX ended at:   UTC 2022-07-17 16:17:51.639 (110.624 s)\nDesired center frequency for WSPR transmission: 14.097100 MHz\n  Waiting for next WSPR transmission window...\n  Obtained new ppm value: 4.09996\n  TX started at: UTC 2022-07-17 16:18:01.015\n  TX ended at:   UTC 2022-07-17 16:19:51.640 (110.624 s)\nDesired center frequency for WSPR transmission: 14.097100 MHz\n  Waiting for next WSPR transmission window...\n  TX started at: UTC 2022-07-17 16:20:01.014\n  TX ended at:   UTC 2022-07-17 16:21:51.638 (110.624 s)\nDesired center frequency for WSPR transmission: 14.097100 MHz\n  Waiting for next WSPR transmission window...\n  TX started at: UTC 2022-07-17 16:22:01.004\n  TX ended at:   UTC 2022-07-17 16:23:51.628 (110.624 s)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You can pass multiple bands on the command line if you want to hop around bands.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It&#8217;s also recommended that you add a low pass filter between the Raspi and coax connection to help suppress any harmonics that may be generated. You can make one easily enough using just a capacitor or there are a number of prebuilt low pass filters specifically made for the GPIO hat on the Raspi online.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With only 10dBm (10mW) output from the RaspberryPi it&#8217;s surprising the distances that the signal travels. In no time at all I had reports from all over Europe and as the day progressed reports started coming in from Iceland, the USA and Russia.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2041\" height=\"1316\" src=\"https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/M0AWS-WSPR-1.png\" alt=\"\" class=\"wp-image-1353\" srcset=\"https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/M0AWS-WSPR-1.png 2041w, https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/M0AWS-WSPR-1-300x193.png 300w, https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/M0AWS-WSPR-1-768x495.png 768w, https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/M0AWS-WSPR-1-1536x990.png 1536w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>Map showing stations that heard M0AWS on WSPR<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I used <a rel=\"noreferrer noopener\" href=\"http:\/\/wspr.aprsinfo.com\" target=\"_blank\">http:\/\/wspr.aprsinfo.com<\/a> WSPR monitoring website to watch progress as the day went on and after 24hrs had been heard by a number of stations over 3000 miles away.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can also get a more detailed view of reports from the <a href=\"https:\/\/www.wsprnet.org\/drupal\/wsprnet\/spots\" target=\"_blank\" rel=\"noreferrer noopener\">WSPRnet website<\/a> where you can query the database and create a detailed list of all decodes over a set period of time.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1410\" height=\"1732\" src=\"https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/M0AWS-WSPR-Report.png\" alt=\"\" class=\"wp-image-1354\" srcset=\"https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/M0AWS-WSPR-Report.png 1410w, https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/M0AWS-WSPR-Report-244x300.png 244w, https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/M0AWS-WSPR-Report-768x943.png 768w, https:\/\/m0aws.co.uk\/wp-content\/uploads\/2022\/07\/M0AWS-WSPR-Report-1250x1536.png 1250w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>Detailed list of WSPR decodes<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Since my EFHW Vertical is resonant on both 20m and 10m I&#8217;ll now run it for the next 24hrs on both bands to see what results I get.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">More soon &#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Weak Signal Propagation Reporting Network (WSPR) known as &#8220;Whisper&#8221; in the HAM community is a QRP\/QRPp beacon mode that is used by many HAMs around the world to see pretty much realtime propagation on the HF bands. I first started using WSPR when I lived in France some years ago and it proved invaluable &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/m0aws.co.uk\/?p=1338\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Whispering around the world&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32,30,132,93,4,38,37,9,130,122,133,17,129,131],"tags":[],"class_list":["post-1338","post","type-post","status-publish","format-standard","hentry","category-10m-band","category-20m-band","category-debian","category-filter","category-ham-radio","category-linux","category-programming","category-qrp","category-qrpp","category-raspberrypi","category-ssh","category-weak-signals","category-wspr","category-wsprnet"],"_links":{"self":[{"href":"https:\/\/m0aws.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/1338","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/m0aws.co.uk\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/m0aws.co.uk\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/m0aws.co.uk\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/m0aws.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1338"}],"version-history":[{"count":17,"href":"https:\/\/m0aws.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/1338\/revisions"}],"predecessor-version":[{"id":1376,"href":"https:\/\/m0aws.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/1338\/revisions\/1376"}],"wp:attachment":[{"href":"https:\/\/m0aws.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1338"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/m0aws.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1338"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/m0aws.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1338"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}