When I started using LoRa radios it amazed me that there was no discussion of real life range. This article will attempt to solve that by doing real walkabouts in towns and woodlands.

I plan to add more tests to this over time.


The problem with describing range of a LoRa system is that range depends on a number of factors and so any simple summary of range will be incomplete.

In this article I’ll discuss the various things that change range and more importantly I have a very cool test system that I’ll use to make real life range…

Part 2: Detailed antenna measurements

This is a continuation of the last article about measuring LoRa antennas. In this section I go through the impedance measurements (VSWR or Return Loss) for each antenna in gory detail.

The antennas being discussed

There is one more antenna (called Yagi):

Part 1: Overview and Summary Information

Selecting a LoRa antenna is tough. Measuring an antenna well is a hard task and almost no one does it. Many antennas available via the hobby channels report gain or vswr, maybe at a frequency, that they clearly often pretend to measure.

So, since I have some test equipment and I’ve spent quite a while picking LoRa antennas… I decided to review a bunch of them.

LoRa Antennas for Testing

I have a product that requires uniform high-quality LoRa communication and deciding on how to send that data has taken a very long time. Start by analyzing the various available antennas.

Earlier Article

I have an…

The first sensor I connected to my BlueLora was a UV Sensor. It’s nice to know where high levels of UV are for killing Coronavirus, or for bleaching paintings and furniture, or maybe getting skin cancer.

BlueLora with a Qwiic UV Sensor attached

We have a lot of windows and suspected that some had UV coating and some did not. Do we need UV coating? Who knows…. time to find out.


In the above picture, I’ve soldered a Grove connector right into the BlueLora board. The grove pins (at 2mm) are a bit closer together than the 0.1" pins on the board but a little bending works…

Imagine a wireless network that has a range of miles and which runs on a small battery for months. Now imagine what you could do if each node on the network supported any sensor you want. That’s my BlueLora board.

The BlueLora board and addons

In the picture above you can see — starting at the left-

  • BlueLora board with OLED and battery and a temperature sensor
  • Bare BlueLora board
  • Jtag/Swd debug adapter board
  • QWIIC addon boards (in and out)
  • Grove addon boards (in and out)

The BlueLora Hardware

The base BlueLora board has a bunch of best-of-breed hardware on it — all designed to provide

  • the long…

Part 2: Implementing the Services

In part 1, I showed how to start up Bluetooth with advertising. That included source code that set up advertising for a few different Bluetooth services.


A Bluetooth peripheral device is defined by the set of Bluetooth services that it supports. The peripheral advertises those services. A service is like a mini application. There are many standard services: see Bluetooth-Guids.

Each service contains a set of characteristics — which are like ports that are read from and/or written to.

Device Information Service

The Device Information Service is a read-only collection of string data defining the device.

Part 1: Getting Started

Creating a Bluetooth Service in Zephyr is a wonderfully easy task. I’ve had a high startup cost doing simple things like PWM drivers in Zephyr, but Bluetooth is just great.


The latest version of my application uses the nrf5x library and C++ code to create a standard procedural application. It has a main() and runs in a single thread. It’s about 25,000 lines of code.

Although it’s very efficient in space and resources the entire application had to be built from the ground up. …

The board I’m working on has 1MB of QSPI flash. That is serial flash that’s directly controlled by the Nordic nrf52840. See here ->

QspiFlash connections to chip

The chip can use any 6 high-speed pins it likes for the flash interface so I’ve chosen pins that make the layout simple. Nordic suggests certain pins for noise/speed reasons and these are mainly from that set.

I had a terrible time getting this working correctly. It’s not hard to get it working well, it’s hard to figure out exactly what to set. So,…

It’s simple in zephyr to read/write raw data to the chip, tougher…

This is about Xamarin/C# but let me begin by describing why.


I just spent about 3 months writing a native (Java) Android application and then started on the iPhone/iOS version. After spending about a month going through samples and learning Swift (the native language for iOS) all I could think was “who the #$@% wants to write anything in Swift”? Just what we need is an entire language that is only supported by Apple.

It wouldn’t be so bad but they consistently ignore industry or common standards to go their own way. A line from Wikipedia -> “Swift supports closures…

I’ve been using the Material Designs Icons webfont and can not find a summary of character code vs icon. So, I wrote a simple Net.js application that produces a web page or pdf showing them.

Here’s the code for the Node.js application. If you create a Node.js typescript application using Visual Studio then this code will slot right in. You must install the ttf webfont into Windows before running this.

Typescript code to display the Material Design Icons webfont

Here’s a view of what the output looks like:

Visual display of the output in Edge

Mark Zachmann

Entrepreneur, software architect, electrical engineer. Ex-academic.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store