Azure IoT Hub nRF24L01 Windows 10 IoT Core Field Gateway

Windows 10 IoT Core on RPI based nRF24L01 field gateway which enables sensor nodes to securely & reliably upload telemetry to AzureIoT Hubs.


For school Internet of Things (IoT) projects I needed a robust field gateway for uploading telemetry data from a number “cheap n cheerful” sensor nodes to a Microsoft Azure IoT Hub or Microsoft IoT Central. (Microsoft's Platform As A Service (Paas) IoT solution)

The distances involved were modest 5M (indoors) to 600M (outdoors) so a mix of Low & high power nRF24L01 wireless modules looked like a suitable choice.

After looking at several Cloud IoT Services, Microsoft IoT Central looked like it had sufficient flexibility and scale. The security model (Feb 2018) will have some challenges in education deployments as you can't make a dataset publicly accessible. The Microsoft IoT Central also appears to be a work in progress with disabled buttons indicating future additional functionality.

Building it

Initially, I am using AMQP, but getting an HTTP endpoint (fine for telemetry) white-listed in a school environment is easier so the configuration also supports HTTP (Should do MQTT as well)

I also had some issues with the current (Feb 2018) version of the Microsoft.Azure.Devices.Client NuGet package so upgrade with caution.

The field gateway hardware is Raspberry PI 2/3 based with an “off the shelf” shield (with some simple modifications)

The Field Gateway configuration is stored in a JSON file (a sample file is provided in the Github repo).

"AzureIoTHubDeviceConnectionString": "Azure Iot Hub connection string goes here",  
"AzureIoTHubTransportType": "Amqp",  
"RF24Address": "Base1",  
"RF24Channel": 10,  
"RF24DataRate": "DR250Kbps",  
"RF24PowerLevel": "High",  
"RF24AutoAcknowledge": true,  
"RF24DynamicAcknowledge": false,  
"RF24DynamicPayload": true

The Azure IoT Hub connection string needs to be updated then the file uploaded to the LocalState directory in application folder.

User Folders\LocalAppData\Azure.IoTHub.IoTCore.FieldGateway.NRF24L01-uwp_1.0.0.0_arm__nmn3tag1rpsaw \LocalState\

I use the device portal “Apps\File Explorer”

[Edit:2018-03-09] The application now generates a sample configuration file if one is not found (so the GitHub sample is no longer necessary). Start the program, download the configuration file add your Azure IoT Hub connection string and change any other settings then upload,

The Windows 10 IoT Core device logs useful information via Realtime ETW Tracing which can be viewed in the Device Portal Debug\ETW after enabling the “Microsoft-Windows-Diagnostics-LoggingChannel” provider.

Once the application is configured and tested you can use the Device Portal\Apps Manager to set the program to run on device startup

I have created several sample sensor nodes which use the same SeeedStudio Grove temperature and humidity sensor

For an enclosure I use an off the shelf box from a local electrical supplies wholesaler.


The JSON configuration file has the following settings

AzureIoTHubDeviceConnectionString – copy this from

  • IoT Hub\IotDevices\DeviceDetails blade in the Azure Portal
  • “Connect this device” on the “Device Details” page in Microsoft IoT Central.



RF24Address – 3 to 5 characters long

RF24Channel – 0 – 127



RF24PowerLevel options








The Internet of Things Show has a video which shows how to setup devices in Microsoft IoT Central.

My code is just over 300 lines of C# (including comments, © Notice and white space). I have some additional features planned (local queuing, support for cloud to device messaging, “automagic” device provision etc.) but I was pleasantly surprised by how little code it took.


Source: Azure IoT Hub nRF24L01 Windows 10 IoT Core Field Gateway

About The Author

Muhammad Bilal

I am highly skilled and motivated individual with a Master's degree in Computer Science. I have extensive experience in technical writing and a deep understanding of SEO practices.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top