Creating a Custom WSPR Spot Server

WSPRNet is a great free service and resource for aggregating WSPR spot data. It provides archives of the data which can be downloaded and analysed, and I have done this to some success previously (see here and here). However one thing this approach lacks, is the ability to view and analyse spot data in real-time. The existing method is inherently limited to the schedule at which I can download the data from WSPRNet.org, which in the interests of politeness is 1 month (when I remember).

Unfortunately, there is no publish api I could subscribe to get a feed of spots in real time. If you know of one, drop me an email. This left me with a couple options, download the data frequently from WSPRNet, which is not very polite and generally in poor form. Or try and stand up my own spot aggregation service.

Modifying WSJTX

To make this work I modified the original WSJTX and WSPR applications to upload to my spot service. Ideally this would be done in addition to uploading to WSPRNet, but in the interest to time, and to see something work. I made the existing code take an extra parameter of where to upload the spots too. This involved building WSJTX from source as outlined here, editing the code which does the uploading, as well as adding an extra field to the configuration menus to allow for setting where to send the spots to. Below is a screenshot of the additional field

Screenshot of the modified WSJTX with additional field for the Spot URL

Saving the spots

I made use of Googles Cloud functions and Data store to create the service to store the spots, now that I had the ability to upload them where ever I wanted. These tools were chosen, as I didn't have to worry about infrastructure or servers, and more importantly they had a generous free tier which should do nicely for this.

WSJTX makes a simple HTTP GET request to the service, with the data for each spot as query parameters. When I get some time, I might modify WSJTX to batch up spots as it makes a request for every station heard which is a little excessive in my opinion. But for now I just wanted something which worked. I also ensured that I made a request out to WSPRNet.org for each spot, to ensure that everything was counted correctly.

Putting it all together

To make use of this, you will need to build WSJTX from scratch, following the instructions here, with one small change. Once the code for WSJTX has been checked out apply this patch file, before continuing the build.

Once WSJTX is built and configured, simply set the spot upload URL to: http://us-central1-wsprstats-163301.cloudfunctions.net/wsprGET?

and that's it. You shouldn't notice any difference, and spots should still appear on WSPRNet as usual. Once I've created a way of viewing them I'll update these instructions.



Linux and Amateur Radio

A few weeks ago I gave a talk at the Geelong Radio and Electronics society (http://qrz.com/VK3ANR) about the history of the Linux operating system and some the applications relate to amateur radio. In this short article, I aim to follow up on that talk and address some of the feedback I've received from the members by presenting some of the applications mentioned and how they can be installed.

Most of the instructions here should work for those using a Raspberry Pi, although some packages may require additional repositories in this instance. I'm personally am writing this using Linux Mint as my distribution and inspiration, although most things will transfer directly to Ubuntu and it's many derivatives.

The slides from that presentation are available here

Continue reading Linux and Amateur Radio

2.2" ILI9340C TFT and the Raspberry Pi

Introduction

This page describes how I went about connecting a small 2.2" TFT display to the Raspberry Pi. This page is mainly for reference about what chip is in the display and what modules are required to make it work.

X server running on the 2.2" TFT in portrait mode.
X server running on the 2.2" TFT in portrait mode.

The hardware

The display is I purchases is a 2.2" Colour TFT with a resolution of 320x240. It is controlled with the ILI9340C LCD driver chip via the SPI bus and runs on 3.3v.  They can be found on eBay for a ~$6 AUD.

Continue reading 2.2" ILI9340C TFT and the Raspberry Pi

Getting Started with the STM32F3 Discovery Board on Ubuntu 13.10

On a whim I went out and added a STM32F3-Discovery Development board to a rs-online order. The board contains an STM32F303 ARM-Coretex M4 processor capable of ~70MHz and has four  5 MSPS ADCs, 12 Fast DACs, hardware DSP and FPU; making it an ideal candidate for building a software defined radio. Although before I could get to that I had to setup the tools needed to actually program the thing. Having never programmed an ARM chip before (well not bare metal anyway). Here are the steps that I went through to get it working. Most of which are taken from articles published here: http://engineering-diy.blogspot.com.au/2012/11/stm32f3-discovery-eclipse-openocd.html . I'm just collating them all together for reference.

Continue reading Getting Started with the STM32F3 Discovery Board on Ubuntu 13.10

RTL-SDR on the Raspberry PI

Intro:

A while ago I decided to venture into the world of Ham Radio. Under the advice of   George I went out a purchased a cheap DVB USB dongle to use as a Software Defined Radio (SDR). I had thought about using it with the Raspberry Pi I bought a while ago.

How?

The software was pretty straight forward to setup, here are my instructions from a fresh install of the Raspbian distribution:

Continue reading RTL-SDR on the Raspberry PI

Raspberry PI - USB Hub error

When playing with the raspberry Pi I noticed a couple of oddities. If I have a mouse and keyboard plugged into a usb hub the ethernet goes very slowly and as soon as X is run pretty much becomes unusable, filling the kernel messages with:

[ 2354.487491] smsc95xx 1-1.1:1.0: eth0: Failed to read register index 0x00000114
[ 2354.487530] smsc95xx 1-1.1:1.0: eth0: MII is busy in smsc95xx_mdio_read
[ 2359.487451] smsc95xx 1-1.1:1.0: eth0: Failed to read register index 0x00000114
[ 2359.487499] smsc95xx 1-1.1:1.0: eth0: MII is busy in smsc95xx_mdio_read
[ 2365.587487] smsc95xx 1-1.1:1.0: eth0: Failed to read register index 0x00000114
[ 2370.587541] smsc95xx 1-1.1:1.0: eth0: Failed to write register index 0x00000114
[ 2378.717626] smsc95xx 1-1.1:1.0: eth0: Failed to read register index 0x00000118

and:

[ 601.380138] smsc95xx 1-1.1:1.0: eth0: kevent 4 may have been dropped
[ 601.388141] smsc95xx 1-1.1:1.0: eth0: kevent 4 may have been dropped
[ 601.396113] smsc95xx 1-1.1:1.0: eth0: kevent 4 may have been dropped
[ 601.404137] smsc95xx 1-1.1:1.0: eth0: kevent 4 may have been dropped
[ 601.412135] smsc95xx 1-1.1:1.0: eth0: kevent 4 may have been dropped
[ 601.420139] smsc95xx 1-1.1:1.0: eth0: kevent 4 may have been dropped
[ 601.428136] smsc95xx 1-1.1:1.0: eth0: kevent 4 may have been dropped
[ 601.436114] smsc95xx 1-1.1:1.0: eth0: kevent 4 may have been dropped
[ 601.444136] smsc95xx 1-1.1:1.0: eth0: kevent 4 may have been dropped
[ 601.452137] smsc95xx 1-1.1:1.0: eth0: kevent 4 may have been dropped
[ 601.460138] smsc95xx 1-1.1:1.0: eth0: kevent 4 may have been dropped
[ 601.468140] smsc95xx 1-1.1:1.0: eth0: kevent 4 may have been dropped
[ 601.476115] smsc95xx 1-1.1:1.0: eth0: kevent 4 may have been dropped
[ 601.484138] smsc95xx 1-1.1:1.0: eth0: kevent 4 may have been dropped

This can can also be noted in the ping times to the local router, which are of the order of 0.9ms normally and 500-2500ms when a mouse and keyboard are plugged into the hub.

This seems to have been attributed to noise from somewhere, either from the hub or from using the HDMI (As the errors only appear to happen when X is running).
This has been discussed at https://github.com/raspberrypi/linux/issues/60

Temporarily worked around this issue by plugging both mouse and keyboard into the PI itself, although long term this is less than ideal.

Raspberry Pi

I recently received my Raspberry PI from RS a few weeks ago. Here I plan to document the oddities and things I learn. If only such that I can look them up when I forget.

I can wholly recommend the case sold by these guys it  fits perfectly.

If you plan to have your root FS on a USB harddrive, you need to upgrade the firmware, either using the tool by hexxeh using his awesome util found (https://github.com/Hexxeh/rpi-update) or by manually pulling the latest from https://github.com/raspberrypi/firmware

 

If you want to play audio from mplayer, it's broken. Well very buggy there's currently an open issue https://github.com/raspberrypi/firmware/issues/2 addressing it in which anumber of things are suggested. Although it can be bodged round using "mplayer -ao sdl" to play viasdl which some reason gets round (from my understanding) the buffer underrun in the alsa module. - This was fixed! 😛

 

A good powersupply is vital, otherwise you can expect all of the issues mentioned over at: http://elinux.org/R-Pi_Troubleshooting#Troubleshooting_power_problems

Pointless Things Discovered:

LAMMPS (http://lammps.sandia.gov/) can be run on the PI, it is however very slow. Using stock debian-arm and lammps built with gcc -mfloat-abi=softfp. I managed to achieve 100ps NPT in 89 hours for alanine with 1728TIP3P water molecules. This could be improved if I moved to Raspbian (http://www.raspbian.org/) which is built to use the hardware floating point unit.