For the Professional Maker: Simple device-to-device communication with the NRF24L01+ module

By Jeremy S. Cook

Freelance Tech Journalist / Technical Writer, Engineering Consultant

Jeremy Cook Consulting

December 29, 2017

While the NRF24L01+'s range is limited to 100 meters or less line-of-sight, it?s perfect for simple remote control and data transmission applications.

Wireless communication can take many forms, from WiFi to Bluetooth, to LoRaWAN and everything in between. For an extremely low-cost option for Arduino projects (under $2 for each transceiver), it’s tough to beat the NRF24L01+. While its range is limited to 100 meters or less line-of-sight, it’s perfect for simple remote control and data transmission applications.

Besides its low cost, one benefit is that once the RX and TX microcontroller are programmed, you simply turn both on and they communicate without the hassle of pairing or logging on as you would with a WiFi or Bluetooth device. It’s also extremely small, making it easy to stuff into your latest IoT contraption. To explore its capabilities, I turned to this instructable by Akshay Jha, which outlines how to setup this type of communication via a pair of Arduino boards. He used an Uno and a Nano, as did I, but other Arduino combinations should work for this experiment as well.

I first wired up the NRF24L01+ modules to the Arduino boards as outlined per Jha’s instructions, which was actually the toughest part of the build. I didn’t have the proper jumper wires available, and had to resort to more soldering and wire cutting/stripping than would have normally been necessary. As outlined in this post, stocking up on cheap parts ahead of time can really be worth it, and I ordered the proper wires soon after this was completed. Another tip that I saw too late is to snap headers into individual pieces before trying to take them out by melting the solder—this would also have saved me some frustration when I took a set out in order to solder directly to the NRF24L01+ board.

With wiring complete, I programmed each Arduino as specified, but changed the first two lines to the following:

#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>

I also modified the delay functions in the two pieces of code, including adding a delay at the end of the transmitter routine.

After this wiring and programming work, I had a set of components that, when the NRF24L01+ was plugged into the transmitting Nano, the receiving Uno would then blink an LED, and stop when power was disconnected, proving one was controlled by the other. You can also check this via serial output. One thing to note is that pin 13 is in use by the transceiver module, meaning that, as written, you will need to wire in an LED instead of use the one that is already onboard.

While I’m still in the early stages of using this device, I’m excited at the possibilities for such a tiny and inexpensive module for IoT applications. Looking through the Arduino IDE Library Manager, several interesting applications have been explored, including mesh networking, and even Bluetooth LE communication. At a price of around $2, this module is certainly worth consideration for your next wireless project.

Jeremy S. Cook is a freelance tech journalist and engineering consultant with over 10 years of factory automation experience. An avid maker and experimenter, you can see some of his exploits on the Jeremy Cook’s Projects YouTube Channel

Technical writer with 10 years experience in manufacturing automation. Areas of knowledge include electronics, robotics, microcontrollers, PLCs, and factory automation. Mechanical design skills using ProE, Solidworks, AutoCAD, and Onshape modeling packages. Experience with Pneumatics and electrical control systems including Allen Bradley and Automation Direct PLCs.

More from Jeremy