Sunday, November 10, 2019

MLA-30 active receive loop antenna

After reading a glowing review of the low cost MLA-30 active receive loop antenna, I ordered one from Aliexpress for just AU$55. Here are my initial impressions.

The components are of good quality and you get a generous run of coax.

The phantom power box is good (although the power LED is very bright). It's powered from a micro USB socket which might add to the noise floor.

I installed it on the balcony on a PVC pipe. I haven't done a good job of getting the steel wire to be circular but it's a good start. At least it has a low wind profile.

Comparison here is rather unfair on 40m as I have an excellent dipole. Here's reception on the dipole.

Here's reception on the loop. The noise floor is certainly higher.

Of course, the benefit of the loop is that it covers all of HF so beats the dipole on bands like 80m.

Here's a snippet of the ARNSW Sunday broadcast received on 80m using the loop.

Connectors are SMA which works well with SDR receivers. Here is a recording of 9MHz shortwave using the loop. It's not as good as my big dipole but I'm really impressed with what you can hear with a small loop on the balcony.

I'm impressed with this receive loop. If you have space for a full size dipole then that's the way to go but if you only have a balcony then this is a great way to listen.

G8jnj has reverse engineered the circuit of the MLA-30 here.

Check out this comparison from "Scanner and SDR Radio" between several receive loops, some much more expensive.

The author has replaced the co-ax with better stuff and used a larger loop.

Wednesday, November 06, 2019

13 Minutes to the Moon - interesting podcast

Thanks to talented friend Aidan Roberts, I've just listened to a fascinating podcast series from the BBC World Service called "13 Minutes to the Moon". You can get it by searching in your podcast player or downloading here.

The series tells the story of Apollo 11 but in particular examines the final descent to the moon and the things that went wrong, including communications failure and the 1202 (and 1201) overflow alarms from the flight computer.

As well as different versions of the audio from the mission, there are original interviews with some of those involved. I've read several books about the Apollo program and there was new material for me in this.

The music for the podcast is by Hans Zimmer and he's even interviewed about his memory of the landing. You've got to take podcasts seriously now that they have music composed by the guy who wrote themes for Interstellar and many others.

Friday, November 01, 2019

First experiment with LoRa transceivers

LoRa is a fascinating radio system for low power but long range digital data communications. Low cost transceivers claim a range of 15km. John, VK2ASU, has been working with these for a few months with an application involving reporting activity at a remote site.

I also came across LoRa when talking with the City of Ballarat for a GovHack story. They put a LoRa Gateway up on the town hall and are using it to collect data from all over town including things like rubbish bins reporting their fullness.

Here's my hardware setup. (Receive and transmit sides look the same).

I'm using cheap Arduino Nano Pros. They need to be 3.3V to talk to the LoRa Module.

The modules I purchased are RA-01 SX1278 on 433MHz. They were AU$8.67 each (but cheaper if you buy 2 or more). For starters I'm using ones with the little spring antennas and obviously better antennas help them go further.

With one at the extreme end of the house to the other here's the received packets.

So none are being lost. I'm not sure if the protocol re-sends if there's no ACK.

The Arduino library is one of the ones available right in the IDE. It is by Sandeep Mistry and the source code and documentation is here. To get started I wired up to Arduino Nano Pros using the wiring diagram from this excellent tutorial. The examples titled "LoRaSender" and "LoRaReceiver" work well and the only change is to set the frequency to 433E6 (meaning 433MHz) on each end.

There are many levers to adjust with LoRa and you can trade of data rate for range. John ASU advises that he uses these settings:

TxPower (20,20);
Spreadfactor (12);
Bandwidth (62.5E3);

I'm just using the defaults for now.

The tutorial mentioned that the 3.3V supply from the Arduino wasn't sufficient and that may be the case at higher transmit power levels, but for me it's working from the VCC line on the board which is powered by the USB Serial board I use.

The LoRa physical protocol

LoRa is a proprietary protocol but, naturally, this puzzle has led to some excellent work to figure out how it works.

On a waterfall, the spectrum shows what people call "chirps", that is the frequency sweeps rapidly up or down. Here's a picture from the GRCon16 video above by Matt Knight.

The receiver looks for the regular header at the top and uses that to sync up with the transmitter before the data packet begins. Note that the image above is vastly expanded. I've tried to view this with an RTL-SDR dongle in SDR# and all you see is very brief signals for each packet.

Thursday, October 24, 2019

Review of Australian Broadcasting Services in the Asia Pacific released

The long awaited review of Australian Broadcasting Services in the Asia Pacific has been released and is available here.

The 193 page report has been prepared for the Department of Communications and the Arts. The review was announced in September 2017.

I'm particularly interested in that it specifically includes the role of shortwave broadcasting. Australia has ceased shortwave broadcasts.

An interesting conclusion in the report on page 128 is that the authors estimate that shortwave broadcasts to the Asia and Pacific by Australia have a net economic benefit since 2007-08 of $40.3 million.

Supporters of Australian Broadcasting in Asia and the Pacific (SABAP) (I am a member). Has issued an initial response.

Wednesday, October 23, 2019

ESP32 OLED display of power generated via Fronius inverter

This is a followup to an earlier post where I used an ESP8266 to connect to Wifi and call a JSON web service on my Fronius inverter to show the current power being generated by the solar panels here on the house.

Since then, I've moved on to marvellous little boards that combine an ESP32 with an OLED display.

(Yes, I'm rushing to finish this before the sun goes down).

The Fronius inverter joins the home wifi network and has a simple web service endpoint that returns JSON data.

To compile this you'll need:
Settings in the Arduino IDE are:

  • Board: WEMOS LOLIN32
  • Upload speed: 921600
  • CPU Frequency: 240MHz (WiFi/BT)
  • Flash Frequency: 80MHz
  • Partition Scheme: "Default"
  • Port: "/dev/cu.SLAB_USBtoUART" (Note that I'm on macOS)

Documentation is a bit of a puzzle and some of the examples are wrong for this board. The magic I needed to talk to the display on this board is:

SSD1306  display(0x3c, 5, 4);

To program the ESP32 board from the Arduino IDE, the trick is to click upload and wait until it starts showing "Connecting........_____.". Then hold the "Boot" button, and let go when it starts uploading code.

For my own future reference (and you never know, this might help someone else), here's my code. I was using Arduino 1.8.10 but have now switched to Visual Studio Code with PlatformIO. (Note that Angle Brackets don't work on Blogger so the include files have quotes in place of them). Don't forget to fill in your own WiFi SSID and Password.

#include "SSD1306.h" // alias for `#include "SSD1306Wire.h"`
#include "WiFi.h"
#include "ArduinoJson.h"
#include "HTTPClient.h"

// Fronius Inverter
const char *HOST = "";
const char *SSID = "XXXXXX";
const char *PASSWORD = "XXXXXX";
const long kMaxPower = 3300; // maximum watt for the bar graph
const int16_t displayWidth = 128;
const int16_t displayHeight = 64;
// Initialize the OLED display using Wire library
SSD1306  display(0x3c54);
void connectToWiFi(const char * ssidconst char * pwd);

void setup() {
  // put your setup code here, to run once:
  // display.flipScreenVertically();
  connectToWiFi(SSID, PASSWORD);

void connectToWiFi(const char * ssidconst char * pwd)
    WiFi.begin(ssid, pwd);
    while (WiFi.status() != WL_CONNECTED) 
    //Serial.print("Wifi connected");

void displayThis(String textlong power
  display.drawString(displayWidth / 216, text); // x,y
  const int16_t barHeight = 8;
  display.drawRect(0, displayHeight - barHeight, displayWidth, barHeight);
  long barWidth =  power * displayWidth / kMaxPower;
  display.fillRect(0, displayHeight - barHeight, barWidth, barHeight);

void loop() {  
  if((WiFi.status() == WL_CONNECTED)) {
        HTTPClient http;

        String url = "http://" + String(HOST) + "/solar_api/v1/GetInverterRealtimeData.cgi?Scope=System";

        // start connection and send HTTP header
        int httpCode = http.GET();

        // httpCode will be negative on error
        if(httpCode > 0) {
            // HTTP header has been send and Server response header has been handled

            // file found at server
            if(httpCode == HTTP_CODE_OK) {
                String payload = http.getString();
                // Allocate the JSON document
                // Use to compute the capacity.
                //const size_t capacity = JSON_OBJECT_SIZE(3) + JSON_ARRAY_SIZE(2) + 60;
                DynamicJsonDocument doc(900);

                // Parse JSON object
                 DeserializationError error = deserializeJson(doc, payload);
                 if (error) {
                      //Serial.print(F("deserializeJson() failed: "));

                  // Extract current power generated from the Fronius inverter
                  long generatedPower = doc["Body"]["Data"]["PAC"]["Values"]["1"];
                  String displayedPower = String(generatedPower) + " W";
                  displayThis(displayedPower, generatedPower);
        } else {
          displayThis("HTTP Error"0);
            //Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());

    } else {
          displayThis("Wifi Error"0);
          connectToWiFi(SSID, PASSWORD);

The sun has come out again!

I've added a bar that shows how much of the maximum output of the panels we're at. Not in the code above but it's pretty simple using the excellent display library.

Update: now building under PlatformIO

I prefer to develop using Visual Studio Code and PlatformIO but initially ran in to trouble getting it to work with the ESP32. This tutorial gave me the key, which is to use the "Espressif ESP32 Dev Module" as the board.

One reason why I prefer using VSC to edit is the excellent code completion:

The Arduino IDE has a lot of weirdness compared to what I'm used to.

Monday, October 21, 2019

Multiple Low Earth Orbit satellite service will soon offer global internet access

Low Earth Orbit (LEO) satellites are cheaper to launch than geostationary satellites and, with modern manufacturing, can be cheap enough to make in the thousands.

There are several companies currently launching experimental satellites and it seems that there will soon be ways to get internet access either directly or via a small ground station that relays via local WiFi.

If the satellites are in very low earth orbit, some as low as 200km, the latency can be comparable to ground based internet services.


SpaceX was granted permission to launch 7,000 satellites for Starlink internet provision back in 2018. The full plan involves 30,000 satellites. The plan is offer internet to every part of the earth by having at least one satellite visible at any time. Initial service might start as early as 2020.

There's a rather out of date FAQ here on Reddit.


Amazon's Project Kuiper involves 3,236 satellites at various low earth orbit heights. "784 satellites at 367 miles, 1,296 satellites at 379 miles, and 1,156 satellites at 391 miles". Rather than covering the entire globe, they're going for a band north and south of the equator that covers 95% of the population. 


OneWeb provides internet for business jets. Their system is made up of both a swarm of satellites and ground stations.

OneWeb recently completed tests from Seoul, South Korea using just six satellites and showed they could deliver "high-speed, low-latency services at speeds of more than 400 Mbps, enabling the fastest real-time video streaming in Full HD". Latency is reported to be 40 milliseconds but with an average of just 32ms.

Swarm Technologies

Swarm has been granted permission for a constellation of 150 LEO satellites for provision of non-voice Mobile-Satellite Services (MSS). While targeting IoT customers, which suggests low bandwidth. Reportedly 1kbps initially, rising to 2.7kbps. Not much good for internet but useful for tracking and messaging.

New internet competition?

The big question with all of these new options is the price. If players choose to go after the elite end of the market, such as business jets, then it won't affect many of us. If players, as Amazon is reported to be doing, target advanced markets like the US, then this could threaten terrestrial providers.

My hope is that we get services that target under served markets such as outback Australia and the Pacific Islands. Particularly in developing countries prices will need to be low to be affordable.

The equipment needed to talk to low earth orbit satellites must have rapidly steerable directional antennas but just as GPS receivers have become small and cheap, this will also become affordable at scale.

Can satellite internet be blocked?

Some countries filter the internet. Australia is on this list as a surveillance state. Unlike bans on receiving satellite TV (which used to require large dishes that could be seen), it's going to be hard to detect users of satellite internet. Like jamming of GPS, presumably these satellites or the receivers could be overwhelmed by strong RF until they comply with local requirements.

Please let me know in the comments if there are other players I've missed.

Great documentary about "Stuxnet" - "Zero Days"

There's a great documentary made in 2016 called "Zero Days" that I watched on the recommendation of a daughter. It investigates the detection, effect and alleged origin of the internet work publicly called StuxNet but known to the authors as "Olympic Games".

StuxNet was modified to aggressively spread itself but was originally highly targeted at industrial controllers connected to computers running Windows. The specific controllers ran nuclear fuel refining centrifuges.

When activated, the malware would spin the centrifuges until they were physically damaged.

What's interesting about cyber warfare is that it is a new kind of weapon which does physical harm to an enemy without it being obvious what happened and who the attacker was. It's clear that developed countries, with highly connected industrial control grids are highly vulnerable to this new kind of attack.

If our power grid was disabled by an external attacker, (for example), would that prompt a "kinetic" response?

I rented the movie on iTunes and highly recommend it.

Monday, October 14, 2019

Weekend away in the van near Goulburn playing ham radio

Kevin, VK2KB, kindly invited me to stay on a friend's property near Goulburn, south of Sydney. On a hill near the homestead, Kevin had installed a wire dipole for 40m. We added an extra dipole (fan style) for 80m and later Kevin put up another dipole for 160m.

The site seems too close for communication on 40m but 80m and in the evening, 160m was excellent.

Having no mains power and distant neighbours promises low noise and it certainly is up on the hill but closer to the house we found that the power inverter for the home solar system created quite an RF racket.

We put up a 40m dipole closer to the house (and power) which we transmitted on WSPR using an Ultimate beacon 3 and were received widely.

On Sunday we listened to the ARNSW Sunday broadcast from Sydney. You can see some of the antenna work here.

On Sunday evening, reception on 160m was excellent as you can hear here:

Out here, the blocks seem to all be 100 acres and up. I slept comfortably in the van even though the overnight low was 3C.

It was wonderful to meet a few neighbours who have built wonderful houses tuned to their own comfort. Here's Nick's place.

Nick also has built a pizza over out of dirt from an ant mound.

Pretty much everything is re-cycled.

Another neighbour, Michael, (shown at the top right of this post), showed us very interesting VR180 and VR360 movies playing on a Samsung Gear VR.

Monday, September 30, 2019

Tiny KT0803K transmitter won't do ham bands

John, VK2ASU, tipped me off about these boards. It's a little FM broadcast transmitter that can be controlled via two wire interface from an Arduino (for example). The chip is a Monolithic, digital stereo FM Transmitter KT0803K.

I got mine for AU$4.87 via eBay.

Sample software to drive it comes from the manufacturer Elechouse, here.

The board will transmit from 58MHz to 134MHz. It seems to get a little unreliable at the edges, I guess a PLL isn't locking or something.

I had to slightly modify the library for it to compile on the latest Arduino IDE. It seems they'd defined some integer sizes that are already defined these days.

In the file FMTX.h, up the top add this line:

#define __TYPE_REDEFINE 1

This will stop the type defines from being processed. Here's my test code based on their example.

#include "FMTX.h"

float fm_freq = 134;  // Here set the frequency
void setup(void)
  fmtx_init(fm_freq, AUSTRALIA); 

Anyway, a bit of fun for $5 and it certainly puts out a decent signal on the FM broadcast band. Disappointed I couldn't have a QSO on a ham band with it.

Sunday, September 29, 2019

Amateur radio NSW meeting at Dural

A lovely day for a ham radio meetup. Great to see everyone and Dural is looking great with the amazing new antenna tower now in use.

Today was a trash and treasure and home brew group meeting.

The feature presentation from Gary was about microwave operation but we also had Bob showing an amazing ATTiny85 board, John on LoRa, Graham on a bus extender he made and then found on eBay (still great he made his own), and Colin showed his Clansman PRC320.

A NanoVNA was passed around and seems amazing for the money (as so many things do these days). I've ordered one for AU$60.

Here's a few pictures from the day.

Colin with a 10Kg radio:

Bob with a 10g computer

Graham with his extender cable:

Gary microwaving the audience.

John examines a microwave transverter from the Ukraine.

Monday, September 16, 2019

Antuino - first look at a "compact radio lab"

Ashhar Farhan, VU2ESE, creator of the low cost, excellent performance for the money uBitx and Bitx40, has a new gadget. A flexible test instrument in a single box called the Antuino. For US$99 plus optional US$10 courier shipping it turned up here in Sydney just five days after ordering.

It arrived well packed. A solid metal case, fully constructed (for some reason I thought there might be some work to do by me but that was just installing the big knob).

It can be powered either via a DC jack or it has long life running on 6 AA cells. I found that the cells were rather tight and power didn't come on due to some of the cells not being pushed by the springs to the positive contact.

The display is large and clear. One moves around the on-screen items by turning and pushing the knob.

Here's a plot of my 40m dipole. I found the low SWR being at the top a little unfamiliar but it makes sense.

Here's Stephen, VK2BLQ's excellent 40m loop plotted:

Rather than duplicate the creator's feature rundown, I'll just summarise here and say it's:
  • Frequency signal source from 10Khz to 150MHz (and harmonics can be used beyond that).
  • SWR meter with plot
  • Field strength meter with logarithmic response
  • Cable loss measurement
  • RF Cable velocity factor
  • Modulation meter
  • Frequency response - able to plot filters
Best of all the software is open source and, as you can see in the photo above, it's powered by a standard Arduino Nano board. The schematic here. The circuit has:

  • Arduino Nano as the brains
  • JHD128x64 LCD 128x64 display
  • Si5351A clock generator
  • ADE-1 mixer
  • AD8307 logarithmic amplifier
  • 6 crystal 25Mhz IF filters
  • 3 x 2N3904 gain stages in the IF
The main modes are:
  • SWR - antenna analyser (use the RF In port)
  • PWR - power measurement (Use the RF in port)
  • SNA - network analyser (device between RF out and RF in ports)
The RF out is straight from an Si5351 clock generator and looks like this:

Playing around with the user interface, I find it takes more turns that I'd like to move between menu options. There are already a few forks of the software and, like the uBitX, I'm sure we'll see some great improvements built on top of the open software.

This is a great piece of test equipment for a home brewing radio enthusiast.

Friday, September 13, 2019

My next iPhone is an older iPhone SE, but I'm happy

Last time I upgraded iPhones I decided to lease the iPhone X rather than buying outright. This spreads the expense out over two years. After watching the latest iPhone launch, none of the new models attracted me and I already find the X too big in my pocket.

Looking around eBay I saw some second hand iPhone SEs at decent prices and I was lucky enough to get a 64GB model for AU$180. The colour is ugly (to me) rose gold but it was in excellent condition and the battery health is 99%. I was lucky, but even at $250, these are a good buy.

The iPhone SE is compact in the hand and pocket. The A9 processor is decent and it seems quite snappy running iOS 13 GM. (I'm in the developer program so have early access).

Although I'll miss the extra screen realestate of the iPhone X, I don't miss the size of the body and I prefer TouchID to FaceID. I love that I can wake the device with my finger when it's lying flat on a table.

Battery life isn't as good as the X although it's a fresh install and the Photos app is hammering the CPU doing all sorts of analysis so I expect this to continue for a day or two. Interestingly, Siri is using 20% of battery so far, so I've turned that off for now.

I returned the iPhone X to Telstra today. My goodness that SEBEL system is a dog! Poor Telstra shop staff. I'm saving $30 a month on a "bring your own device" plan but I know I can do better, perhaps on Aldi Mobile but I'll leave it a month or two before making more changes.

The sales woman was puzzled that I thought that $50 for 15GB was too much and explained that I was getting "unlimited" data. Oh, I said, 10 Terabytes? She had to explain that mobile phone operators mean something different by the word "unlimited".

I'm not alone in my enthusiasm for the iPhone SE, check out BuzzFeed's "Tim Cook Will Have To Pry My iPhone SE From My Cold, Tiny Hands".

There are a few apps, including ones from Apple, that don't handle the small screen too well. Happily, my WSPR Watch app has always been tested on the iPhone SE size screen so I'm not embarrassed there.

iOS 13 seems solid despite a rocky beta period. I think they've wisely taken out the things that were causing trouble and deferred them to 13.1.

Apple should make a phone the physical size of the SE, but with the edge to edge screen. I'm waiting for in-screen TouchID to appear, or perhaps FaceID could be made to work at very high angles?

Friday, August 30, 2019

The rise of shortwave broadcasting from China

On recent drive across Australia I was struck by the amount of shortwave broadcasting from China that could be heard.

There is some data available from the HFCC - International Broadcasting Delivery.

The files are fixed width fields which list broadcasts by frequency along with start time, end time, which days of the week, the country, the broadcaster and more.

Countries may have multiple broadcasts on different frequencies at the same time.

To measure output, I calculated the minutes on air of each listed broadcast and multiplied it by the number of days in each week that it's on and aggregated them by country.

Here are the top broadcasters as at August 2019. (Click for larger view).

Here's 2010. It's China, USA, Russia...

Here's 2000. Russia, USA, China. How times have changed.

Here's the changes amongst the top broadcasters now over this period. China is clearly on the rise.

There are many flaws in my simple analysis:

  • Shortwave is used within large countries such as India and China for internal consumption.
  • Different power levels and transmitter site and antenna direction should be taken in to account.
  • The data may not cover all broadcasts "At present about 85 percent of the overall amount of global shortwave frequency requirements used for broadcasting is kept in this database. The missing 15 percent comprises some smaller stations in Africa and Latin America, as well as stations in the so called tropical broadcasting zone that employ shortwave transmissions for local listeners and are not interested in international co-ordination."
  • Some transmitters use more than one antenna system at a time (beaming in different directions), currently I count those as two broadcasts.
  • Radio New Zealand International provides programs which are broadcast in the Solomon Islands and Vanuatu but I'm counting those as broadcasts from the administration countries rather than NZ.
  • Several people have commented that the UK seems under represented in this data.
  • There are, of course, other options including satellite, FM relay, and internet streaming but this post isn't about those.

I note with sadness that in 2010, Australia was placed 12th, in 2019 we are 57th.

Please let me know if someone else has done any analysis in this area. My thanks to HFCC - International Broadcasting Delivery for making this valuable data freely available.

Monday, August 26, 2019

WSPR Watch iOS app now reads from PSKReporter

After playing with PSKReporter recently, and being impressed with its speed and features, I've updated the WSPR Watch app so that you can switch between reading WSPRnet and PSKReporter.

There is so much FT8 traffic these days that just listening for CQ calls is a good way to get a reading on the propagation around the world. I note that, compared to WSPR spots, there are many different stations so the map looks busier.

If you have an iOS device, grab the app, (it's free). In settings you can switch to use PSKReporter.

Here's how the list looks now.

My thanks to John Landry, AA7US and Ross, VK1UN for encouragement, ideas, and testing.

Thursday, August 22, 2019

PSKReporter could replace WSPRnet

WSPRnet is a great service but frustratingly it's sometimes slow or down. Recently I've discovered that the PSKReporter site provides a similar service and seems to be very reliable. WSJT-X can be set to send reception reports to it very easily and you get a map view like this:

This shows FT8 reception by me here in Sydney on 40m. To enable reporting back to PSKReporter, go to settings and just turn it on.

The site's domain name is PSKReporter but it's much more flexible than that and currently lists a huge number of modes:


Data can be downloaded in ADIF files that look like this:

This data comes from 3.0.4$Id: cgi-bin/ $

This is Amateur Data Interchange Format. Submissions from software is fully documented and they provide a library for Windows developers.

I'm really impressed with the work done on this site. A very professional job.

I've started work on adding PSKReporter to the WSPR Watch iOS app. They don't have all of the information that's on WSPRnet but enough to be useful.

There is lots of FT8 activity so it's a good data set to view.

I'll have this up on TestFlight in a few days and hopefully in the App Store soon.