Skip to content
Optimized fork of nRF24L01 for Arduino and Raspberry Pi
Branch: master
Clone or download
Pull request Compare This branch is 43 commits ahead, 323 commits behind nRF24:master.
Latest commit 5557f8c Jan 17, 2015
Type Name Latest commit message Commit time
Failed to load latest commit information.
RF24Frontend RPi bugfix for serial Jan 17, 2015
RF24Serial beutifying, debug messages, cleanup Jan 17, 2015
RF24VUsb beutifying, debug messages, cleanup Jan 17, 2015
RPi Attempt 2 to fix python readme formatting Dec 30, 2014
examples Fixes and Improvements from large round of testing Jan 2, 2015
examples_RPi Update python readme and example Dec 28, 2014
tests Update examples, minimize code size Apr 15, 2014
.gitignore Update docs for 1.0 Oct 19, 2011
Doxyfile Add changes from doc update Dec 24, 2014
FAQ FAQ- How much RAM?? Jan 16, 2012
Makefile RPi bugfix for serial Jan 17, 2015 Update readme for installer Dec 17, 2014
RF24.cpp RPi bugfix for serial Jan 17, 2015
RF24.h USB communication - improving stability Jan 5, 2015
doxygen-custom.css Update doxyfile & css to match Oct 14, 2014
nRF24L01.h enableDynamicAck(), Single NOACK, default RT, Apr 10, 2014
printf.h Intel Gallileo support added Nov 18, 2014
wikidoc.xslt Tuned the text a bit Apr 1, 2011

Optimized High Speed Arduino driver for nRF24L01 2.4GHz Wireless Transceiver

Design Goals: This library is designed to be...

  • More compliant with the manufacturer specified operation of the chip, while allowing advanced users
  • to work outside the reccommended operation.
  • Utilize the capabilities of the radio to their full potential via Arduino
  • More reliable and feature rich
  • Easy for beginners to use, with well documented examples and features
  • Consumed with a public interface that's similiar to other Arduino standard libraries
  • Built against the standard SPI library.

April 2014: Official Release: Still some work to do, but most benefits have been realized

  • The library has been tweaked to allow full use of the FIFO buffers for maximum transfer speeds
  • Changes to read() and available () functionality have increased reliability and response
  • Extended timeout periods have been added to aid in noisy or otherwise unreliable environments
  • Delays have been removed where possible to ensure maximum efficiency
  • Full Due support with extended SPI functions
  • ATTiny 24/44/84 25/45/85 now supported.
  • More! See the links below and class documentation for more info.

Please refer to:

This chip uses the SPI bus, plus two chip control pins. Remember that pin 10 must still remain an output, or
the SPI hardware will go into 'slave' mode.

Supported Boards:

  • Uno, Nano, etc (328 based boards)
  • Mega Types (2560, 1280, etc)
  • ARM (Arduino Due) via extended SPI methods
  • ATTiny 24/44/84 25/45/85
  • Raspberry Pi
  • See the documentation for more info

Pin layout

The table below shows how to connect the the pins of the NRF24L01(+) to different boards. CE and CSN are configurable.

PIN NRF24L01 Arduino UNO ATtiny25/45/85 [0] ATtiny44/84 [1]
1 GND GND pin 4 pin 14
2 VCC 3.3V pin 8 pin 1
3 CE digIO 7 pin 2 pin 12
4 CSN digIO 8 pin 3 pin 11
5 SCK digIO 13 pin 7 pin 9
6 MOSI digIO 11 pin 6 pin 7
7 MISO digIO 12 pin 5 pin 8
8 IRQ - - -

[0] [1]

Raspberry Pi Configuration:

Library functions are mostly the same.
See the included examples for RPi specific usage

Raspberry Pi - PreConfig

Possible pre-configuration:

If SPI is not already enabled, load it on boot:

sudo raspi-config  

A. Update the tool via the menu as required
B. Select Advanced and enable the SPI kernel module
C. Update other software and libraries:

 sudo apt-get update  
 sudo apt-get upgrade  

#New: RPi RF24 Library Installer for all RF24 libraries

A. Download the file from


B. Make it executable:

chmod +x  

C. Run it and choose your options:


D. Run an example file from one of the libraries:

cd rf24libs/RF24/examples_RPi  
sudo ./gettingstarted  

RPi - RF24 Quick-Start

A. Make a directory to contain the RF24 and possibly RF24Network lib and enter it:

mkdir ~/rf24libs  
cd ~/rf24libs  

B. Clone the RF24 Repo

git clone RF24  

C. Change to the new RF24 directory

cd RF24  

D. Build the library, and run an example file:

sudo make install
cd examples_RPi  
sudo ./gettingstarted  

RPi - RF24Network Quick-Start

A. Enter the same directory that contains the RF24 library folder

cd ~/rf24libs  

B. Clone the RF24Network Repo

git clone RF24Network  

C. Copy the RF24Network folder to the current directory, and delete the rest

cd RF24Network  

D. Build the library

sudo make install
cd examples_RPi  
sudo ./helloworld_rx   OR   sudo ./helloworld_tx  

Connection Info

Using pin 15/GPIO 22 for CE, pin 24/GPIO8 (CE0) for CSN

Can use either RPi CE0 or CE1 pins for radio CSN. Choose any RPi output pin for radio CE pin.


RF24 radio(RPI_V2_GPIO_P1_15,BCM2835_SPI_CS0, BCM2835_SPI_SPEED_8MHZ);
RF24 radio(RPI_V2_GPIO_P1_15,BCM2835_SPI_CS1, BCM2835_SPI_SPEED_8MHZ);

RPi B+:


PIN NRF24L01 RPI RPi -P1 Connector
1 GND rpi-gnd (25)
2 VCC rpi-3v3 (17)
3 CE rpi-gpio22 (15)
4 CSN rpi-gpio8 (24)
5 SCK rpi-sckl (23)
6 MOSI rpi-mosi (19)
7 MISO rpi-miso (21)
8 IRQ - -

See for BCM2835 class documentation.
Note: The BCM library has been customized slightly to allow use of hardware CE pins not in use for SPI, and to include a millis() function.

Based on the arduino lib from J. Coliz
the library was berryfied by Purinda Gunasekara
then forked from github stanleyseow/RF24 to
Network lib also based on

Currently optimized and aligned with Arduino fork of libraries by TMRh20: and

You can’t perform that action at this time.