Skip to content
Home > Components > Sensors > nRF24L01+ Transceiver

nRF24L01+ Transceiver

A low-cost, highly integrated 2.4GHz ISM band RF transceiver module for establishing wireless networks between Arduinos.

Component Preview

nRF24L01+nRF24L01+

The nRF24L01+ operates in the 2.4GHz worldwide ISM frequency band. It supports up to 6 channels of data reception ("pipes"), allowing for star networks. It communicates with the Arduino over SPI.

SensorsWirelessSPI

Overview

Because it uses the 2.4GHz band (like Wi-Fi and Bluetooth), the nRF24L01+ can transmit data at high speeds (up to 2 Mbps) over short distances, making it ideal for remote control cars, wireless sensor networks, and smart home devices.

CAUTION

Voltage Warning: The nRF24L01+ module requires 3.3V power. Connecting its VCC pin to 5V will permanently damage the chip! (The logic pins are 5V tolerant, but the power pin is strictly 3.3V).

Pin Reference

PinTypeDescription
GNDpowerGround. Connect to Arduino GND.
VCCpower3.3V Power Supply. (DO NOT CONNECT TO 5V).
CEdigitalChip Enable. Used to activate RX or TX mode. Connect to Arduino D7 (or any digital pin).
CSNdigitalSPI Chip Select. Connect to Arduino D8 (or any digital pin).
SCKdigitalSPI Clock. Connect to Arduino D13.
MOSIdigitalSPI Master Out Slave In. Connect to Arduino D11.
MISOdigitalSPI Master In Slave Out. Connect to Arduino D12.
IRQdigitalInterrupt Request. Can optionally trigger when data is sent/received.

Configurable Attributes

AttributeTypeDefaultDescription
magicInteropbooleanfalseWhen enabled in the simulator, allows automatic bridging of data streams without configuring exact pipe addresses.

Wiring Diagram (Raspberry Pi Pico)

Example of wiring the nRF24L01+ module to a microcontroller using hardware SPI.

Wiring Diagram

Example Arduino Code

Install the RF24 library by TMRh20 before running. This example sets up a simple transmitter.

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

// CE, CSN pins
RF24 radio(7, 8); 
const byte address[6] = "00001";

void setup() {
  Serial.begin(9600);
  
  if (!radio.begin()) {
    Serial.println("nRF24L01 not responding!");
    while (1);
  }
  
  // Set the address we are transmitting to
  radio.openWritingPipe(address);
  
  // Set the PA Level low for testing close together
  radio.setPALevel(RF24_PA_MIN);
  
  // Set the module as transmitter
  radio.stopListening();
  
  Serial.println("nRF24 Transmitter Ready.");
}

void loop() {
  const char text[] = "Hello World";
  
  // Send data
  if (radio.write(&text, sizeof(text))) {
    Serial.println("Message Sent successfully.");
  } else {
    Serial.println("Message Failed.");
  }
  
  delay(1000);
}

Simulation Notes

  • In the OpenHW Simulator, you need at least two Arduinos (each with an nRF24L01+) to demonstrate communication. One must be set as a transmitter (stopListening) and the other as a receiver (startListening).
  • Ensure both modules are configured to the same pipe address.

Released under the MIT License.