Documentation

ShillehTek NRF24L01+ 2.4GHz Wireless Transceiver Module SPI for Arduino | ShillehTek Product Manual
Documentation / ShillehTek NRF24L01+ 2.4GHz Wireless Transceiver Module SPI for Arduino | ShillehTek Product Manual

ShillehTek NRF24L01+ 2.4GHz Wireless Transceiver Module SPI for Arduino | ShillehTek Product Manual

Overview

The NRF24L01+ is a single-chip 2.4 GHz wireless transceiver from Nordic Semiconductor that gives you bidirectional data links between microcontrollers without WiFi, Bluetooth, or licensing complications. It runs on 3.3V, communicates with a host MCU over SPI, and supports up to 6 simultaneous receive pipes — meaning a single base node can listen to 6 sensor nodes simultaneously. Range is around 100 m line-of-sight with the standard PCB-trace antenna; the PA+LNA variant with external antenna pushes that to 1 km+.

Use it for wireless sensor networks, RC vehicles, drone telemetry, home automation hubs, two-way controllers, distributed data loggers, or anything that needs reliable, low-power, point-to-point or star-topology RF communication. The popular RF24 Arduino library makes setup essentially trivial — pick an address, set a channel, and you're transmitting.

The module operates in the worldwide-available 2.4 GHz ISM band on 125 selectable channels. It supports data rates from 250 kbps (longest range) up to 2 Mbps (shortest range), automatic ACK + retransmit, and dynamic payload lengths up to 32 bytes per packet. Power consumption in deep sleep is just 22 nA, making it ideal for battery-powered sensor nodes that wake up briefly to send a reading and then sleep for hours.

At a Glance

Frequency
2.4 GHz ISM (125 channels)
Data Rate
250 kbps / 1 Mbps / 2 Mbps
Operating Voltage
1.9V - 3.6V (3.3V typical)
Logic Level
5V tolerant inputs
Range
~100 m (PCB antenna, line of sight)
Interface
SPI (8 pins)

Specifications

Parameter Value
Chipset Nordic Semiconductor nRF24L01+
Frequency Band 2.400 - 2.525 GHz (ISM, license-free)
Channel Count 125 (1 MHz spacing)
Modulation GFSK
Data Rates 250 kbps, 1 Mbps, 2 Mbps
Output Power 0 / -6 / -12 / -18 dBm (selectable)
Receive Sensitivity -94 dBm @ 250 kbps, -82 dBm @ 2 Mbps
Operating Voltage 1.9V - 3.6V
TX Current ~11.3 mA @ 0 dBm
RX Current ~13.5 mA
Standby Current ~22 µA
Power Down Current ~900 nA
Logic Inputs 5V tolerant (CSN, SCK, MOSI, CE)
Max Payload 32 bytes per packet
Pin Header 2×4 (8 pins) 2.54 mm

Pinout Diagram

NRF24L01 wireless transceiver module 2x4 pinout showing GND, VCC, CE, CSN, SCK, MOSI, MISO, and IRQ pins

Wiring Guide

Power supply warning: The nRF24L01+ pulls brief current spikes during transmit that can dip the 3.3V rail and cause random reset / lockup. Add a 10 µF electrolytic + 0.1 µF ceramic capacitor across VCC and GND right at the module's pin header. This is the #1 fix for "nRF24 not working reliably" issues. Use a separate 3.3V regulator for the module if your MCU board's 3.3V rail can't supply the surge.

Arduino UNO / Nano

The nRF24L01 is 3.3V-powered but its inputs are 5V tolerant, so you can drive it from Arduino's 5V SPI pins directly. Power must come from a 3.3V source (Arduino's 3V3 pin can usually supply enough current with the recommended decoupling caps).

Module Arduino UNO
VCC 3.3V (NOT 5V)
GND GND
CE D9
CSN D10
SCK D13
MOSI D11
MISO D12
IRQ not connected (optional)

ESP32 / Raspberry Pi Pico

Module ESP32 Pi Pico
VCC 3V3 3V3
GND GND GND
CE GPIO4 GP6
CSN GPIO5 GP5
SCK GPIO18 GP2
MOSI GPIO23 GP3
MISO GPIO19 GP4

Code Examples

Arduino Transmitter (using RF24 library)

tx.ino
#include <SPI.h>
#include <RF24.h>

RF24 radio(9, 10);  // CE, CSN
const byte address[6] = "00001";

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();
}

void loop() {
  const char text[] = "Hello World";
  bool ok = radio.write(&text, sizeof(text));
  Serial.println(ok ? "TX ok" : "TX fail");
  delay(1000);
}

Arduino Receiver

rx.ino
#include <SPI.h>
#include <RF24.h>

RF24 radio(9, 10);  // CE, CSN
const byte address[6] = "00001";

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
}

void loop() {
  if (radio.available()) {
    char text[32] = {0};
    radio.read(&text, sizeof(text));
    Serial.print("RX: ");
    Serial.println(text);
  }
}

Frequently Asked Questions

My nRF24 transmits a few times then stops. Why?
99% of the time this is a power-supply issue. Add a 10 µF + 0.1 µF decoupling cap across VCC/GND right at the module pins. Arduino UNO's 3.3V rail in particular only sources 50 mA — barely enough. Use an external 3.3V regulator if needed.
Can I use it on 5V VCC?
No — that will destroy the nRF24L01+. The chip requires 1.9-3.6V on VCC. The data lines (MOSI, SCK, CSN, CE) ARE 5V-tolerant, so you can drive them from a 5V Arduino without a level shifter, but power must be 3.3V.
What's the actual range I can expect?
With the basic PCB-trace antenna version (this module), expect ~50-100 m outdoors line-of-sight, much less indoors through walls. Use 250 kbps data rate for maximum range. For longer range, look at the PA+LNA variant (with external SMA antenna) which can reach ~1 km outdoors.
Can multiple modules talk to each other?
Yes — one node can listen to up to 6 simultaneous transmitters using the 6 data pipes. For a true mesh network use a library like RF24Mesh or RF24Network on top of the base RF24 library.
Does it interfere with WiFi?
It can — both share the 2.4 GHz ISM band. WiFi typically uses channels 1, 6, 11 (which translate to nRF24 channels ~1-13, 51-65, 91-105). Pick an nRF24 channel away from your WiFi (e.g., channel 76 or 100) for cleaner performance.
How much battery life can I expect on a sensor node?
With the deep-sleep capability of the nRF24 (~22 nA) and an MCU like the ATmega328P in sleep mode, a coin cell can power a temperature sensor that wakes up every 60 seconds to transmit a 32-byte payload for over a year. The trick is putting both MCU and radio to sleep and only briefly waking them.