NRF24L01+

Overview

The NRF24L01+ Wireless Module [Product Link] is a great way to set up communication between robots at low cost.

Features

NRF24L01+ RF Module
NRF24L01+ RF Module
  • 3 Selectable Transmission Rates- 2Mbit/s, 1Mbit/s, 250Kbit/s
  • Built-in 2.4GHz antenna
  • Worldwide license-free 2.4GHz ISM band operation
  • 2 Mbit/s makes high-quality VoIP possible
  • +/- 60 ppm crystal
  • Only require an external inductor in the antenna matching
  • 5V tolerance level inputs
  • Serial interface allows easy connection to variety of low-cost MCU
  • Peak Current- 12.5mA (2Mbit/s), 400nA (Power-down mode), 32µA (Standby mode)
  • 130µs fast switching and wake time
  • Enhanced ShockBurst™ hardware protocol accelerator
  • Ultra low power consumption – months to years of battery lifetime

Description

This module based on Nordic nRF24L01, highly integrated, ultra low power (ULP) 2Mbps RF transceiver for the 2.4GHz ISM (Industrial, Scientific and Medical) band. Nordic nRF24L01+ integrates a complete 2.4GHz RF transceiver, RF synthesizer, and baseband logic including the Enhanced ShockBurst™ hardware protocol accelerator supporting a high-speed SPI interface for the application controller. You can easily add it with your own MCU/ARM/PIC/AVR/STM32 system.

Applications

  • PC peripherals
  • Gaming
  • Sports and fitness
  • Toys
  • Consumer electronics

Specifications

  • Power supply : 1.9~3.6V
  • IO port working voltage : 0~3.3v / 5v
  • Transmitting rate : +7dB
  • Receiving sensitivity : ≤ -90dB
  • Transmission range : 250m in open area
  • Dimension : 15x29mm

Range
Range is dependent on the situation and improves with clear line of sight outdoors as compared to indoors. The usual range for the module is about 100m for open space, where the modules are operating at 250KHz. Indoors the range might be a little less due to walls and other obstacles.

Power Issues
Many times it is difficult to get the nRF24L01 module to work. The problem is usually that the 3.3V Power to the module does not have enough current capability, or current surges cause problems. To tackle these issues:

  • Connect a 10 µF capacitor from Vcc to Gnd (connect +ve and -ve terminal correctly)
  • Use a separate 3.3V higher-current power supply

Pin Connections

Pin Layout (Top View)
Pin Layout (Top View)

For Transmitter/Receiver

NRF24L01 GND Vcc CE CSN SCK MOSI MISO 8
Arduino Uno GND 3.3V Pin9 Pin10 Pin13 Pin11 Pin12 Not Connected

A more elaborate pin connection table is-

Signal RF Module Arduino Pin for RF24 Library Arduino Pin for MIRF Library Arduino Mega Pin
GND 1 GND GND GND
VCC 2 3.3V 3.3V 3.3V
CE 3 9 8 According to Library
CSN 4 10 7 According to Library
SCK 5 13 13 52
MOSI 6 11 11 51
MISO 7 12 12 50
IRQ 8 2* Not Connected According to Library

*IRQ is unused by most software, but the RF24 library has an example that utilizes it.

RF24 Library

This library is designed to be-

  • Maximally compliant with the intended operation of the chip
  • Easy for beginners to use
  • Consumed with a public interface that’s similiar to other Arduino standard libraries
  • Built against the standard SPI library.

If you want to understand what you can do with this “little” radio, download the data sheet. In particular you may want to read pages 7-8-9 ( For Overview and Features), and page 39 (MultiCeiver, which allows 6 Arduinos to talk to a Primary Arduino in an organized manner).

After you download and copy the RF24 Library, start the IDE, click File>Examples>RF24 and you’ll see several example sketches to start with.

Transmitter Side

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

#define CE_PIN 9
#define CSN_PIN 10

// NOTE: the "LL" at the end of the constant is "LongLong" type
const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe

RF24 radio(CE_PIN, CSN_PIN); // Create a Radio

int trans[2]; // 2 element array holding transmitted readings
int a=0; // value used for transmitting

void setup()
{
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(pipe);
}

void loop()
{
trans[0] = a+1; // storing and transmitting incremented values of variable a
a=a+2;
trans[1] = a;
a=a+1;

radio.write( trans, sizeof(trans) );
}

Receiver Side

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

#define CE_PIN 9
#define CSN_PIN 10

// NOTE: the "LL" at the end of the constant is "LongLong" type
const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe

RF24 radio(CE_PIN, CSN_PIN); // Create a Radio

int rec[2]; // 2 element array holding received readings

void setup()
{
Serial.begin(9600);
delay(1000);
Serial.println("Nrf24L01 Receiver Starting");
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}

void loop()
{
if ( radio.available() )
{
// Read the data payload until we've received everything
bool done = false;
while (!done)
{
// Fetch the data payload
done = radio.read( rec, sizeof(rec) );
Serial.print("X = ");
Serial.print(rec[0]);
Serial.print(" Y = ");
Serial.println(rec[1]);
}
}
else
{
Serial.println("No radio available");
}

}

MIRF Library

The data is transmitted in the form of simple ASCII strings. Each character of the ASCII is transmitted individually. The receiver just pipes the received data via the serial port to the PC. The PC is running software (for example based on Processing) which reads, error-checks and displays the received data. Thus, it is a kind of a very simple “wireless serial link”.

Downloads

RF24 Library [Link1] [Link2]
MIRF Library [Link]
NRF24L01+ – Arduino Playground [Link]
NRF24L01+ Datasheet [Link]
Stanley Seow’s RF24 Library [Link]

Possible Application Areas

Having two or more Arduinos be able to communicate with each other wirelessly over a distance opens lots of possibilities:
1. Remote Controlled Robot Car [Link]
2. Poor Man’s 2.4GHz Scanner [Arduino Forum]
3. Swarm Bot – Instructable [Link]
4. Remote sensors for temperature, pressure, alarms, much more
5. Robot control and monitoring from 50 feet to 2000 feet distances
6. Remote control and monitoring of nearby or neighborhood buildings
7. Autonomous vehicles of all kinds

Comments

So empty here ... leave a comment!

Leave a Reply

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

Sidebar