More 868Mhz Antenna Tests

After initially finding that I couldn’t tune the 868Mhz ground plane antenna with the radials bent down at 45 degrees I decided to experiment to find out why.

Initially I had the radials connected to the 4 corners of the base of the chassis mount N Type socket. This works great if you have the radials completely horizontal and gives an SWR of 1.1:1 but, with the radials bent down at 45 degrees the best SWR is around 2:1.

M0AWS 868Mhz Ground Plane Antenna Close Up
M0AWS 868Mhz Ground Plane Antenna Close Up

Removing the radials from the base of the N Type chassis socket and soldering them to the outer of the N Type plug at the same level as the feed point for the radiating element I found that an almost perfect SWR can be achieved very easily.

M0AWS 686Mhz Antenna with radials soldered to the N Type Plug
M0AWS 868Mhz Antenna with radials soldered to the N Type Plug

It seemed weird to me that such a small change could have such a big effect on the obtainable SWR for the antenna but, as can be seen in the image below with the radials soldered to the N Type plug and bent downwards I immediately got an SWR of 1.07:1 and a much wider SWR curve.

M0AWS 868Mhz Antenna SWR curve with radials soldered to N Type plug.
M0AWS 868Mhz Antenna SWR curve with radials soldered to N Type plug.

By making my own antennas I’m learning a lot about antenna design for the 800-900Mhz frequency range. Minor changes seem to have a much bigger impact than they do at much lower frequencies.

More soon …

868Mhz Ground Plane Vertical Antenna

In my quest to improve my Meshtastic signal range using home-brew antennas I’ve finally put together a neat little ground plane vertical antenna for the 868Mhz ISM band.

The design follows the normal ground plane simplicity using 4 radials and a vertical radiating element albeit on a tiny scale. The radiating element is 82mm long and the radials are each 92mm long.

M0AWS 868Mhz Ground Plane Vertical Antenna
M0AWS 868Mhz Ground Plane Vertical Antenna

Initially I modelled the antenna at a height of 3m above the ground with the radials tilted downwards at 45 degrees. I took this approach as this is how I have built ground plane verticals for the 70cm band in the past and so I thought I’d try the same approach on the 868Mhz ISM band. (I later found this to be detrimental to tuning!)

The 3D far field plot for the antenna shows it has a very nice, relatively high gain lobe at just 2 degrees elevation with a number of lower gain lobes higher up.

M0AWS 868Mhz Ground Plane Vertical Antenna 3D Far Field Plot
M0AWS 868Mhz Ground Plane Vertical Antenna 3D Far Field Plot

Looking at the 2D far field plot you can get a better understanding of the radiation pattern and gain figures at various angles. At 2 degrees there is 6.7dBi gain with the next major lobe being at 8 degrees with 4.36dBi gain, far more than I imagined I’d see for such a simple antenna.

M0AWS 868Mhz Ground Plane Vertical Antenna 2D Far Field Plot
M0AWS 868Mhz Ground Plane Vertical Antenna 2D Far Field Plot

Putting the antenna together was easy enough with particular attention being paid to the measurements of both the radials and radiating element. I soldered some lugs to the ends of the 2.5mm diameter solid core wire radials to enable easy attachment to the N Type chassis socket that I decided to use as the base for the antenna. This worked out well and provided a good solid mechanical and electrical connection for the 4 radials.

For the radiating element I used an N Type plug with the vertical 2.5mm solid core wire element soldered to the inner centre pin of the male connector. I also slid a small piece of insulation down the wire to stop it from shorting against the metal outer of the plug and then pushed in a tight rubber plug to stop water ingress.

M0AWS 868Mhz Ground Plane Antenna Close Up
M0AWS 868Mhz Ground Plane Antenna Close Up

Connecting my VNA I found the antenna was mostly resonant at 790Mhz with an SWR of 2.5:1. I knew this would be the case and that the wires would need a little trimming.

Trimming the wires a couple of times in 1mm nibbles I got the point of resonance up to 868Mhz but, the antenna was still exhibiting a lot of reactance that was keeping the SWR above 2:1. Trimming the radials reduced this slightly but, I could not get an SWR much lower than 1.95:1.

Scratching my head I decided to try moving the radials back up so that they were horizontal rather than at 45 degrees downwards, this had the immediate effect of the SWR dropping to 1.1:1.

M0AWS A rather fuzzy photo of the 868Mhz SWR curve for the GP Antenna
M0AWS A rather fuzzy photo of the 868Mhz SWR curve for the GP Antenna

The SWR stays below 1.2:1 from 868Mhz to 871Mhz which is plenty wide enough for the Meshtastic devices. Why there is so much reactance when the radials are bent down at 45 degrees I am not sure, but it was easy enough to resolve.

M0AWS 868Mhz Ground Plane Antenna
M0AWS 868Mhz Ground Plane Antenna

The finished antenna is tiny but, seems to work well. Signals from my other nodes are up by 6-9dB according to the SNR reports in the Meshtastic app. I now need to make a couple more of these for my other nodes and then hope to hear some other nodes locally once they appear on air.

Remodelling the antenna in EzNEC with the radials as shown above the gain at 2 degrees is now 5.5dBi, down 1.2dBi but, the overall radiation pattern is identical to the original.

Total cost of the build is about £1 and an hour of my time tinkering with it, bargain!

M0AWS-4 Meshtastic Node 868Mhz Antenna Deployment
M0AWS-4 Meshtastic Node 868Mhz Antenna Deployment

More soon …

Stray capacitance effects on SWR at 868Mhz

Following on from my last article on improving the Heltec ESP32 v3 antennas I found during the installation of the 90 degree SMA connector that the device was very sensitive to stray capacitance from things around it. After reconnecting my VNA I found the SWR curve would change substantially depending on what the device was near and so I set about rectifying this.

I decided to remove all the insulation from the single radial inside the unit and then added two more radials to increase the ground for the antenna to tune against. I then removed the N type plug with the antenna connected to it and made a new antenna from a piece of 1.5mm solid core insulated mains wire connected directly to the N type socket, without using an N type plug. Tuning to resonance was much easier than before and I soon had the SWR down to 1.2:1. Moving the device around and placing near to other objects the SWR curve was now much more stable than before with only very slight changes in curve shape.

M0AWS Updated 868Mhz Antenna
M0AWS Updated 868Mhz Antenna

Making this change to the 868Mhz antenna has shown an improvement in signal strength from my node-1 device of almost +0.5dB, every dB counts when you only have 100mW to play with!

The Bluetooth antenna update has made a massive improvement to the usability of the device via the iOS Meshtastic app. Being able to have a reliable, solid connection from anywhere in the house is great and I no longer lose messages because I’ve strayed outside the range of the Bluetooth connection.

I now have 2 new Heltec ESP32 v3 devices on the way to me and will be getting those configured and operational outside with external antennas in the hope of hearing some nodes locally to me.

More soon …

Improving the antennas on Heltec ESP32 v3 Devices

The Heltec ESP32 v3 LORA devices have a coil type Bluetooth/Wifi antenna on the PCB from the factory. This antenna doesn’t work particularly well and has very limited range so, I decided to do something about it.

Getting out the calculator a quarter wave at 2400Mhz is 29.7mm. Looking at the coil antenna on the PCB I decided the best way to connect the new antenna would be to solder it to the coil of the existing antenna. This would short out the coil completely whilst creating a solid mount point for the new antenna.

After a little measuring I decided to use a 31mm long piece of 1.5mm hard core mains cable for the new antenna. I stripped back the insulation from one end of the wire so that the exposed copper wire was exactly the length to short across all the windings of the coil antenna on the PCB.

Attaching replacement Bluetooth Antenna to the Heltec ESP32 v3 Device
Attaching replacement Bluetooth Antenna to the Heltec ESP32 v3 Device

Attaching the the wire to the coil was easy enough to do but, it’s worth pointing out that you need to be quick so that the heat doesn’t transfer down onto the PCB desoldering the coil antenna from the device.

Whilst tinkering with the Bluetooth antenna I decided I would also make a neat little quarter wave 868Mhz vertical antenna for this device whilst I had it all apart. This is my Meshtastic node-2 and it’s sole purpose is to allow me to use my iPad to send/receive messages via bluetooth which are then forwarded on to my base node-1 in the house. Node-1 is connected to the house wifi and the Meshtastic MQTT server. This combination allows me to message people on the mesh even though there are no local nodes within RF range.

Running the numbers for the 868Mhz antenna the vertical will need to be around 82.1mm long with a radial of similar length. I had to hand a very nice SMA to N Type chassis mount socket that would be ideal to mount the antenna to the case. I drilled out the holes in the case, measured out the wires and attached it all to the case. Connecting the antenna to the N Type socket I connected my VNA and set about tuning the antenna to resonance.

M0AWS Hidden Radial for the 868Mhz Heltec Antenna
M0AWS Hidden Radial for the 868Mhz Heltec Antenna

Squeezing the radial and SMA connector into the case I realised I really could do with a 90 degree SMA connector so, I quickly ordered one from Amazon which will be delivered tomorrow. Connecting up my VNA, I had to trim the antenna down to get it to resonance. The SWR ended up at 1.2:1 which is ideal. I ended up cutting off more wire than I thought I would to get the antenna to resonance but, this is due to the extra capacitance caused by the insulation on the wire. If I had used bare copper wire then I wouldn’t of had to cut so much off. I eventually ended up with around 72.9mm of wire for both the antenna and radial.

M0AWS Heltec ESP32 v3 Device with replacement Bluetooth and 868Mhz Antennas
M0AWS Heltec ESP32 v3 Device with replacement Bluetooth and 868Mhz Antennas

Putting the device back into the case and connecting the USB battery the device fired up and immediately connected to my node in the house. Checking the signal strength of node-1 in the house I could see a 7dB increase in signal strength compared to the little wire antenna that comes with the device. This is a significant improvement for such a simple antenna and well worth the effort.

Next I had to drill a hole in the front of the Heltec case so that the Bluetooth antenna could poke out the front and be bent up vertically. This worked out really well and improved the Bluetooth range massively.

M0AWS Completed alterations to the Heltec ESP32 v3 antennas
M0AWS Completed alterations to the Heltec ESP32 v3 antennas

Putting the node back in the house and taking my iPad down to the end of the garden some 30m away I could instantly connect to the device via Bluetooth from my iPad, something I’d not been able to do prior to adding the new antennas. I can now use the Heltec device via Bluetooth from anywhere in the house or garden making it much more accessible.

It’s amazing the difference an hour and two little pieces of wire can make to these devices and is well worth the effort.

More soon …

Getting back onto 160m “Top Band”

Since setting up the new HAM station here in the UK the one band I’ve not yet got back onto is 160m, one of my most favourite bands in the HF spectrum and one that I was addicted to when I live in France (F5VKM).

Having such a small garden here in the UK there is no way I can get any type of guyed vertical for 160m erected and so I needed to come up with some sort of compromise antenna for the band.

Only being interested in the FT4/8 and CW sections of the 160m band I calculated that I could get an inverted-L antenna up that would be reasonably close to resonant. It would require some additional inductance to get the electrical length required and some impedance matching to provide a 50 Ohm impedance to the transceiver.

Measuring the garden I found I could get a 28m horizontal section in place and a 10m vertical section using one of my 10m spiderpoles. This would give me a total of 38m of wire that would get me fairly close to the quarter wave length.

For impedance matching I decided to make a Pi-Network ATU. I’ve made these in the past and found them to be excellent at matching a very wide range of impedances to 50 Ohm.

M0AWS Homebrew Pi-Network ATU
M0AWS Homebrew Pi-Network ATU

Since I still had the components of the Pi-Network ATU that I built when I lived in France I decided to reuse them as it saved a lot of work. The inductor was made from some copper tubing I had left over after doing all the plumbing in the house in France and so it got repurposed and formed into a very large inductor. The 2 x capacitors I also built many years ago and fortunately I’d kept locked away as they are very expensive to purchase today and a lot of work to make.

Getting the Inverted-L antenna up was easy enough and I soon had it connected to the Pi-Network ATU. I ran a few radials out around the garden to give it something to tune against and wound a 1:1 choke balun at the end of the coax run to stop any common mode currents that may have appeared on the coax braid.

Connecting my JNCRadio VNA I found that the Inverted-L was naturally resonant at 2.53Mhz, not too far off the 1.84Mhz that I needed. Adding a little extra inductance and capacitance via the ATU I soon had the antenna resonant where I wanted it at the bottom of the 160m band.

M0AWS 160m Inverted L Antenna SWR Curve
M0AWS 160m Inverted L Antenna SWR Curve

With the SWR being <1.5:1 across the CW and FT8 section of the band I was ready to get on 160m for the first time in a long.

Since it’s still summer in the UK I wasn’t expecting to find the band in very good shape but, was pleasantly surprised. Switching the radio on before full sunset I was hearing stations all around Europe with ease. In no time at all I was working stations and getting good reports using just 22w of FT8. FT8 is such a good mode for testing new antennas.

As the sky got darker the distance achieved got greater and over time I was able to work into Russia with the longest distance recorded being 2445 Miles, R9LE in Tyumen Asiatic Russia.

In no time at all I’d worked 32 stations taking my total 160m QSOs from 16 to 48. I can’t wait for the long, dark winter nights to see how well this antenna really performs.

M0AWS Map showing stations worked on 160m using Inverted L Antenna
M0AWS Map showing stations worked on 160m using Inverted L Antenna

The map above shows the locations of the stations worked on the first evening using the 160m Inverted-L antenna. As the year moves on and we slowly progress into winter it will be fun to start chasing the DX again on the 160m band..

UPDATE 6th October 2023.
Been using the antenna for some time now with over 100 contacts on 160m. Best 160m DX so far is RV0AR in Sosnovoborsk Asiatic Russia, 3453 Miles using just 22w. Pretty impressive for such a low antenna on Top Band.

More soon …

My First QO-100 Satellite QSO

I’ve been waiting for over a week so far for a male to male SMA connector to arrive from Amazon so that I can connect the 2.4Ghz up-converter to the 2.4Ghz amplifier. Since it still hasn’t arrived I decided to connect the up-converter directly to the IceCone Helix antenna to see if I could get a signal into the QO-100 satellite.

To my surprise I could easily hear my CW signal on QO-100 even though the total output from the up-converter is only 200mW.

I didn’t expect to be able to hear my signal since it’s a tiny amount of power that has to travel some 22500 miles to the satellite but, I could hear it and was amazed that it was peaking S8 on my SDR receiver.

2.4Ghz Up-COnverter connected directly to the antenna bypassing the 2.4Ghz Amplifier
2.4Ghz Up-Converter connected directly to the antenna bypassing the 2.4Ghz Amplifier

Being excited I put out a CQ call that was soon answered by OH5LK, Jussi in Finland. Jussi gave me a 579 report which I was extremely pleased with. He was of course much stronger at a 599+ at my end. We had a quick QSO and exchanged details without any problems at all. Its really nice to get a QRPp contact without any QSB or QRM.

M0AWS QO-100 1.1m off-set Dish and IceCone Helix antenna ground station
M0AWS QO-100 1.1m off-set Dish and IceCone Helix antenna ground station

Neil, G7UFO who I chat with regularly in the Matrix Amateur Radio Satellites room has posted a connector out to me so I’m hoping it will arrive on Monday and then I’ll be able to connect the amplifier and hopefully get a few SSB contacts.

UPDATE: I’ve since had 2 SSB contacts via QO-100 using just the 200mW O/P from the up-converter. Both times I got a 3/3 report not brilliant but, perfectly acceptable for the amount of power I’m putting out.

More soon …

Replacement for the Funcube Dongle Pro+

For some time now I’ve been using my Funcube Dongle Pro+ (FCD) as my QO-100 downlink receiver. It’s worked fairly well and has given me the ability to listen to stations on the satellite over the last few months.

During this time I have noticed a couple of things about the FCD that has lead me to the final decision to change to a new SDR device.

The first of these ‘things’ is the fact that the FCD gets seriously overloaded when there are multiple large SSB signals within the receive pass band. The only way to manage this is to constantly keep changing the software based AGC, mix and LNA settings to reduce the levels of the incoming signals so that the overloading stops. This is great except when you tune to a quiet part of the satellite transponder you have to turn all the settings back up again to be able to hear the weaker signals. After a while this becomes tiresome.

The fact that there isn’t a hardware AGC in the FCD is a major drawback when being used for satellite reception especially when it’s on the end of a very high gain LNB and dish antenna.

The second of these ‘things’ is the fact that I can’t see the whole transponder bandwidth at one time with the FCD as it has a very small receive bandwidth capability. This means that I am constantly tuning up and down the transponder to see if there are any stations further up or down in frequency.

Funcube Dongle Pro+
Funcube Dongle Pro+

Talking to more experienced satellite operators in the Matrix Amateur Radio Satellites room they recommended replacing the FCD with a NooElec NESDR SMArt v5 that has hardware AGC and is capable of receiving and displaying a much wider bandwidth.

Looking on Amazon the NooElec NESDR SMArt v5 is only £33 so I decided to place an order for one and give it try.

In typical Amazon style the SDR receiver arrived the next day and I wasted no time getting it plugged in and connected to the QO-100 ground station.

The NESDR SMArt v5 is based on the well known RTL-SDR that came onto the market some time back but, has a number of improvements in it that take it to the next level.

The first thing that I was happy with was the fact that the GQRX SDR software I use recognised it immediately on startup, no configuration or drivers were required it just worked, straight out of the box. Since I use Kubuntu Linux on my radio room PC I did wonder if I would need to get into installing extra libraries etc but, thankfully none of that was required.

Looking at the signals from the QO-100 satellite initially they appeared to be nowhere near as strong as they were on with the FCD. Looking at the settings in GQRX I noticed that the hardware AGC was off and the LNA setting was back to it’s default very low level.

I switched on the AGC and then increased the LNA setting to 38.4dB and found that the signals were now plenty strong enough on the display but, not overloading the receiver.

I then went on to adjust the display so that I could see the whole satellite transponder bandwidth on the screen. This is great as it enables me to see the low, middle and high beacons that mark out the narrow band section of the transponder and at a glance see all the stations using the satellite. This was a massive improvement in itself and one that I am very pleased with.

Using the NooElec NESDR SMArt v5 SDR it very soon became clear that it copes with multiple large signals in the pass band so much better than the FCD did. There’s no more overloading of the receiver, no more ghost signals appearing on the waterfall due to the front end not being able to cope and no more having to constantly keep playing with the settings to get things under control. The hardware AGC built into the SDR device does a great job at keeping it all under control whilst receiving a much wider bandwidth than the FCD ever could.

The satellite beacons are now received at S9+15dB without the receiver being overloaded, the first time I have seen this since starting out on my QO-100 venture.

The other thing that became obvious very quickly is that frequency stability is much better than it was with the FCD, it doesn’t drift up and down the transponder now and stays tuned exactly where I put it. It’s also on frequency whereas, the FCD was always 1.7Khz off frequency.

GQRX showing QO-100 Transponder signals
GQRX showing QO-100 Transponder signals

The NooElec NESDR SMArt v5 is very well put together, it has an aluminium case that acts as a heatsink (it does get warm!) and overall the build quality is much better than the plastic cased FCD. When I think that I paid close to £100 for the FCD and the NooElec NESDR SMArt v5 only cost £33, I am amazed at the build quality.

Overall I’m extremely pleased with the purchase of the new SDR, it slotted in perfectly as a replacement for the FCD, works great with GQRX, my QO-100 Node Red Dashboard and performs considerably better than the FCD. Overall money well spent!

You can find the NooElec NESDR SMArt v5 spec sheet here.

More soon …

Realtime WSJT-X Decode Map v2

Following on from my initial article on plotting realtime WSJT-X decodes on a Node Red map I’ve made a few enhancements to the flow so that it includes even more data then before.

The additions to the flow now enables collection of status information from WSJT-X so that the flow is able to capture the frequency that the radio is tuned to and also the mode that WSJT-X set to. Neither of these two bits of data are in the decode message payload and so a separate mini-flow has to be created to collect the data from the status payload along side the other main flow.

Node Red flow showing additional sub flow in the top left corner of the flow editor screen

Since the status information needs to be available to all other flows I used flow variables to store the status information in so that it can be addressed directly from any of the other flows in the Node Red app.

If you’d like to use the flow in your radio room then I have put a download link below for a file that you can import into Node Red and build the flow in an instant.

More soon …

Realtime WSJT-X decode data map

Following on from my previous article on Enhancing Digital modes with Node Red I’ve now got to a point where I have realtime decode information from the WSJT-X digital application being plotted on a Node Red world map not just for CQ calls but, for stations in conversation too.

The flow has become somewhat more complex than it was originally as more and more functionality has been added. I have deliberately split out the flow process into more nodes than are really necessary so that the flow is easier to understand. Anyone from a programming background like myself will soon realise that a lot of the nodes could actually be combined into one big node however, the overall flow process wouldn’t be so easy to understand for the Node Red newcomer and would possibly put people off from trying it out.

Current WSJT-X Node Red flow

Above is a screenshot of the flow as it currently stands. It’s pretty easy to understand what is happening in the flow due to the fact that the processes are broken out into small, easy to digest blocks.

From the top down we connect to WSJT-X via UDP port 2237 and listen for the data stream. As the data is received it’s passed directly into the WSJT-X-Decode node that converts the information into a Node Red compatible format. The data is then filtered with only the information required being passed onto the next node. There are two outputs from the filter node as we require two different streams of information, namely “CQ” and “TX1” data. All the rest of the data from WSJT-X is ignored as it’s not required at this time.

The “Get freq & SNR + Others” node builds a decode message payload with all the correct data, in the right format ready to be passed on along the flow. This node also sets a number of parameters required by the map node to be able to control the display of the data.

The next node along is “Set msg.payload”, this brings together all the necessary data into a single message payload that is then worked on by all the nodes further along the flow.

The next 3 nodes perform the simple task of moving some of the data into the objects defined by the world map node, if the data isn’t moved into these specific objects the map will not plot anything.

Now we get onto the slightly more difficult bit that might put off those who aren’t from a programming background. The next 7 nodes are all javascript functions which I have created to perform tasks that cannot be done via the standard Node Red pallet.

At this point it’s worth noting that I’m not a javascript programmer, I’ve used Python, Rust, Go, C and many other languages during my 40 plus year career but, javascript has never been one of them. I’m sure any seasoned javascript programmer will most likely raise an eyebrow at my attempt at javascript programming but, you need to remember that I’m doing this in my retirement and my enthusiasm for learning yet another programming language has wained somewhat!

So, getting back to the flow, each javascript function does just one task each of which is as follows:

  • Set rx_time – Sets the time the data was received/processed
  • Remove RR73 in tx1 – Remove decodes where RR73 is in TX1 instead of a valid callsign
  • Set Dynamic Icon Colour – Sets the icon colour depending on what type of call is decoded
  • Maidenhead to LON/LAT – Converts Maidenhead locator codes into LAT/LON Coordinates
  • Calc Distance – Calculates the distance between “My QTH” and the DX station
  • Calc Bearing – Calculates the bearing/beam heading to the DX Station from “My QTH”
  • Generate Search URLs – Generates the URLs for QRZ and my own online log lookups
Editing the Calc Distance function with debug info in the far right panel

Once all the functions have run the resultant data set is forwarded on to the WSJT-X Stations Map node where it is plotted real time on a world map.

To view the map point your web browser at your PC running Node Red as follows:

http://radiopc.your.domain:1880/worldmap/

Or if you haven’t got a DNS setup at home then just use the IP Address of the PC instead:

http://192.168.100.10:1880/worldmap/

Don’t forget that for all of this to work you must configure WSJT-X to send data via UDP on port 2237 otherwise the flow won’t be able to connect and listen for the decode data.

You may have noticed that there are 3 other nodes that I haven’t mentioned yet. The two green greyed out nodes are Debug nodes that can be enabled when required to help see what is going on in the flow. These debug nodes will display data in the debug panel on the right of the flow editor screen when they are enabled, they are extremely useful for debugging!

The third is the blue My QTH node, this contains data pertaining to my QTH that is plotted on the map using an orange icon. You can easily edit this node to point to your QTH instead.

WSJT-X Node Red map showing orange icon denoting my QTH

Once the flow is deployed you’ll be surprised how quickly the data starts to be plotted on the map. Stations calling “CQ” are shown by Green icons and stations that are in a QSO with another station are denoted by the Red icons.

Each icon is clickable and will present all the information collected by WSJT-X for each station viewed.

WSJT-X Node Red World Map showing FT8 stations realtime on the 12m Band

The popup also has two clickable entries, one will take you to the qrz.com page for the station being viewed and the other will search my logs to see if I have worked that station already and if so it will open a new tab showing the information.

Node Red Function Editor showing the Generate Search URLs function

You can edit the “Generate Search URLs” node so that it points to your online logs search engine so that you can view your own log data instead of mine.

Below is a close up of the popups that are displayed when each icon on the map is clicked. The popups show the information collected from WSJT-X for each station plotted on the map.

Left – Green “CQ” Popup and Right – Red “TX1” in QSO popup

If you fancy trying this out for yourself but, don’t fancy creating all the nodes in the flow manually then I have made an export of the flow available for download. All you have to do is download the file, unzip it and then import it to Node Red and you’ll have everything built ready to play with.


I’ll probably be adding more functionality to this flow as time goes on and will post further articles about it in the future.

More soon …

Enhancing Digital modes with Node Red

For a couple of weeks now I’ve been playing with Node Red to add functionality to my digital mode applications.

To get to know how it all works I initially used Node Red to create a series of dash boards for my servers and virtual machines to show realtime information on CPU temperature, CPU load, memory usage and storage etc.

Node Red Flow to collect information from a virtual machine (VM)

This worked very well and I was soon able to generate the information I needed in a palatable format. This was a great way to get to know Node Red flow building and introduced me to using gauge and graph nodes in flows.

The resultant Node Red Dashboard for one of my Virtual Machines

Once I had mastered creating dashboards for servers/virtual machines (VMs) I then started to investigate using Node Red to plot data from WSJT-X on a map.

I currently use the PSKReporter website to see stations that I hear on a map as WSJT-X sends the data to the site automatically however, this information is always 5mins or more old. For some time I’ve been wanting to see the information realtime as it is received and so I was hoping to be able to achieve this via Node Red.

Node Red has nodes available for a multitude of applications all easily installed via the Manage Palette menu in the flow editor.

I installed the WSJT-X Decode and World-Map nodes and set about building a flow to capture the data and plot it on a world map.

Building a Node Red Flow to decode WSJT-X data and plot it on a World Map

Putting the building blocks of the flow together is fairly straight forward and easily achieved using the excellent flow editor built into Node Red.

I configured WSJT-X to make the decode data available via UDP on port 2237 and then started the flow by creating a UDP node that connects to WSJT-X using the same port. The data immediately started flowing and I could see the information via a debug node.

I can’t stress enough how useful debug nodes are in Node Red. You can add debug nodes onto any output on any other node to capture the data as it flows. This gives you the ability to check what you’re getting is what you expected and also to see the format the data is in. The debug data is displayed in the debug panel on the right of the flow editor in realtime and gives you a great view of what is going on in your flow.

I decided to start with capturing the data for stations calling CQ as this was easily identifiable in the JSON object coming out from WSJT-X.

Passing the output from the WSJT-X-Decode node into a switch node I added a rule that filtered out data containing “type: “cq” and passed it onto the next switch node that created a payload consisting of the station callsign, maidenhead grid square and type so that it could be passed onto the next node for processing.

The next node in the flow is a function, this is where it gets a bit tricky. To be able to plot data on the map we need the Lat/Lon coordinates of the station making the CQ call. Since WSJT-X uses maidenhead locator data I needed to convert this to Lat/Lon coordinates before passing the data to the map node to be plotted.

Since Node Red is written in Java all the functions have to be written in javascript. The problem here is that I am not a javascript programmer and so this meant I’d need to learn yet another programming language. Unfortunately Node Red doesn’t allow functions to be written in C, Rust, Go or Python, all languages that I know well and after retiring from over 40 years in the UNIX/Linux/IT world my enthusiasm for learning yet another programming language has wained somewhat.

Being so close to having a working solution I pressed on and after much head scratching I finally put together some javascript that converts the maidenhead locator information in to good old fashioned Lat/Lon coordinates. I’m sure a seasoned Javascript developer wouldn’t be impressed with my code but, it works and does what I need and so I’m happy with it for the time being.

WSJT-X FT8 stations calling CQ on the 60m Band plotted on a Node Red World Map

Once I had the location information converted it was just a matter of passing the data to the world map node in the correct format for it to be plotted realtime.

As you can see on the screenshot of the map above, it worked extremely well with stations popping up as they were decoded by WSJT-X.

I now need to refine the data sent to the map so that it shows the frequency the station is calling on, the time they made the CQ call and the mode (FT8/FT4 etc) being used.. I would also like to add the distance from my QTH to the station calling CQ to round the information off however, this will mean writing another javascript function which, I’m not sure I want to dive into just yet.

I also need to add into the mix stations that aren’t calling CQ but, who’s callsign and grid square are passed on from WSJT-X. This will mean I will then be able to add to the map those stations that are actively working other stations and maybe I might even be able to show a line between the two stations that are in QSO.

This has been a fun but, steep learning curve however, it will certainly add some great functionality into my radio room and enhance my radio HAM addiction even further.

More soon …