

The nRF24L01 is a low-power, high-performance transceiver module designed by Nordic Semiconductor for wireless communication in the 2.4 GHz ISM (Industrial, Scientific, and Medical) band. It is widely used in IoT (Internet of Things) applications, remote controls, wireless sensors, and other short-range data transmission systems. The module supports a data rate of up to 2 Mbps and features advanced power-saving modes, making it ideal for battery-powered devices.








The following table outlines the key technical details of the nRF24L01 module:
| Parameter | Value |
|---|---|
| Operating Frequency | 2.4 GHz ISM band |
| Data Rate | 250 kbps, 1 Mbps, 2 Mbps |
| Operating Voltage | 1.9V to 3.6V |
| Current Consumption | 11.3 mA (TX at 0 dBm), 13.5 mA (RX) |
| Power Down Mode Current | 900 nA |
| Communication Interface | SPI (Serial Peripheral Interface) |
| Maximum Output Power | 0 dBm |
| Sensitivity | -94 dBm at 250 kbps |
| Range | Up to 100 meters (line of sight) |
| Modulation Scheme | GFSK (Gaussian Frequency Shift Keying) |
| Number of Channels | 125 |
| Operating Temperature | -40°C to +85°C |
The nRF24L01 module typically has an 8-pin interface. Below is the pinout and description:
| Pin | Name | Description |
|---|---|---|
| 1 | GND | Ground connection |
| 2 | VCC | Power supply (1.9V to 3.6V) |
| 3 | CE | Chip Enable: Activates RX or TX mode |
| 4 | CSN | Chip Select Not: SPI enable (active low) |
| 5 | SCK | Serial Clock: SPI clock input |
| 6 | MOSI | Master Out Slave In: SPI data input |
| 7 | MISO | Master In Slave Out: SPI data output |
| 8 | IRQ | Interrupt Request: Indicates data received or transmission complete (active low) |
The nRF24L01 can be easily interfaced with an Arduino UNO. Below is an example wiring diagram:
| nRF24L01 Pin | Arduino UNO Pin |
|---|---|
| GND | GND |
| VCC | 3.3V |
| CE | Pin 9 |
| CSN | Pin 10 |
| SCK | Pin 13 |
| MOSI | Pin 11 |
| MISO | Pin 12 |
| IRQ | Not connected (optional) |
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
// Define the CE and CSN pins
#define CE_PIN 9
#define CSN_PIN 10
// Create an RF24 object
RF24 radio(CE_PIN, CSN_PIN);
// Define the address for communication
const byte address[6] = "00001";
void setup() {
// Initialize serial communication
Serial.begin(9600);
// Initialize the nRF24L01 module
radio.begin();
// Set the address for the module
radio.openWritingPipe(address);
// Set the module to send data
radio.setPALevel(RF24_PA_LOW);
// Start the radio in standby mode
radio.stopListening();
}
void loop() {
// Send a message
const char text[] = "Hello, world!";
bool success = radio.write(&text, sizeof(text));
// Print the result to the serial monitor
if (success) {
Serial.println("Message sent successfully!");
} else {
Serial.println("Message failed to send.");
}
// Wait for a second before sending the next message
delay(1000);
}
No Communication Between Modules
Short Range or Unstable Connection
Module Not Responding
Q: Can I use the nRF24L01 with a 5V microcontroller?
A: Yes, but you must use a level shifter for the SPI pins and power the module with 3.3V.
Q: What is the maximum range of the nRF24L01?
A: The range is up to 100 meters in line-of-sight conditions. For longer range, use the nRF24L01+PA+LNA variant.
Q: How many devices can communicate simultaneously?
A: The nRF24L01 supports up to 6 data pipes, allowing communication with up to 6 devices.
Q: Can I use multiple nRF24L01 modules in the same area?
A: Yes, the module supports 125 channels, allowing multiple modules to operate without interference.