Overview
The NRF24L01+ PA LNA is the long-range version of the popular NRF24L01+ 2.4 GHz transceiver, with an external SMA antenna, a power amplifier (PA) on transmit, and a low-noise amplifier (LNA) on receive. Where the basic NRF24L01+ tops out around 100m, this module reliably reaches up to 1100m line-of-sight.
It speaks SPI to your microcontroller, supports up to 6 logical pipe addresses per receiver, automatic acknowledgment, and automatic retransmission — meaning you get reliable bidirectional communication out of the box. Perfect for RC robots, drone telemetry, sensor networks, garage door openers, and any project where you need cheap, long-range, two-way wireless.
At a Glance
Specifications
| Parameter | Value |
| IC | Nordic nRF24L01+ with PA + LNA front-end |
| Operating Frequency | 2.400 - 2.525 GHz (125 channels at 1 MHz spacing) |
| Operating Voltage | 3.0V - 3.6V (3.3V nominal) |
| Logic Level | 3.3V (5V tolerant on most boards via onboard LDO) |
| TX Current | ~115 mA (peak, +20 dBm) |
| RX Current | ~45 mA |
| TX Power | +20 dBm (100 mW) maximum |
| RX Sensitivity | -94 dBm @ 250 kbps |
| Data Rates | 250 kbps / 1 Mbps / 2 Mbps |
| Range (Max) | ~1100 m line-of-sight (with stock antenna) |
| Modulation | GFSK |
| Logical Pipes | Up to 6 per receiver (one primary + 5 secondary) |
| Antenna | External via SMA (2 dBi included) |
| Pins | GND, VCC, CE, CSN, SCK, MOSI, MISO, IRQ |
Pinout Diagram
Wiring Guide
Arduino Wiring (SPI)
Power MUST come from the Arduino's 3.3V pin (or better, a separate 3.3V supply). The Arduino UNO's onboard 3.3V regulator can only supply ~50 mA, but the PA LNA module pulls ~115 mA on transmit — so for stable operation, add a 10µF or larger capacitor right at the module's VCC/GND pads, or use an external 3.3V supply.
| NRF24L01+ Pin | Arduino UNO Pin |
|---|---|
| VCC | 3.3V (NEVER 5V) |
| GND | GND |
| CE | D9 |
| CSN | D10 |
| SCK | D13 |
| MOSI | D11 |
| MISO | D12 |
| IRQ | (unused, optional D2) |
ESP32 Wiring (SPI)
ESP32 native 3.3V matches the NRF24L01 perfectly. Use VSPI (default) for cleanest results.
| NRF24L01+ Pin | ESP32 Pin |
|---|---|
| VCC | 3V3 |
| GND | GND |
| CE | GPIO 4 |
| CSN | GPIO 5 |
| SCK | GPIO 18 |
| MOSI | GPIO 23 |
| MISO | GPIO 19 |
| IRQ | (unused) |
Raspberry Pi Wiring (SPI)
Enable SPI in raspi-config. Use the Pi's 3.3V rail and SPI0 hardware pins.
| NRF24L01+ Pin | Raspberry Pi Pin |
|---|---|
| VCC | Pin 1 (3.3V) |
| GND | Pin 6 (GND) |
| CE | Pin 22 (GPIO 25) |
| CSN | Pin 24 (GPIO 8 / CE0) |
| SCK | Pin 23 (GPIO 11) |
| MOSI | Pin 19 (GPIO 10) |
| MISO | Pin 21 (GPIO 9) |
| IRQ | (unused) |
Raspberry Pi Pico Wiring (SPI)
| NRF24L01+ Pin | Pico Pin |
|---|---|
| VCC | 3V3 (OUT) |
| GND | GND |
| CE | GP6 |
| CSN | GP5 (SPI0 CS) |
| SCK | GP2 (SPI0 SCK) |
| MOSI | GP3 (SPI0 TX) |
| MISO | GP4 (SPI0 RX) |
| IRQ | (unused) |
Code Examples
Arduino TX — RF24 Library
// NRF24L01+ PA LNA - Arduino TX
// Library: RF24 by TMRh20 (Arduino Library Manager)
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // CE, CSN
const byte address[6] = "NODE1";
void setup() {
Serial.begin(9600);
radio.begin();
radio.setPALevel(RF24_PA_HIGH); // for PA LNA, RF24_PA_HIGH is sweet spot
radio.setDataRate(RF24_250KBPS); // longest range
radio.openWritingPipe(address);
radio.stopListening();
}
void loop() {
const char text[] = "Hello from PA LNA!";
bool ok = radio.write(&text, sizeof(text));
Serial.println(ok ? "Sent OK" : "Send failed");
delay(1000);
}
Arduino RX — RF24 Library
// NRF24L01+ PA LNA - Arduino RX
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // CE, CSN
const byte address[6] = "NODE1";
void setup() {
Serial.begin(9600);
radio.begin();
radio.setPALevel(RF24_PA_HIGH);
radio.setDataRate(RF24_250KBPS);
radio.openReadingPipe(0, address);
radio.startListening();
}
void loop() {
if (radio.available()) {
char text[32] = "";
radio.read(&text, sizeof(text));
Serial.print("Got: "); Serial.println(text);
}
}
Raspberry Pi Pico (MicroPython)
# NRF24L01+ on Pico - MicroPython
# Use micropython-mrequests or peterhinch's nrf24l01 driver
from machine import Pin, SPI
import nrf24l01
import struct, time
spi = SPI(0, baudrate=4000000, polarity=0, phase=0,
sck=Pin(2), mosi=Pin(3), miso=Pin(4))
nrf = nrf24l01.NRF24L01(spi, cs=Pin(5), ce=Pin(6), payload_size=8)
nrf.set_channel(76)
nrf.set_power_speed(nrf24l01.POWER_3, nrf24l01.SPEED_250K)
# TX:
nrf.open_tx_pipe(b'NODE1')
nrf.send(struct.pack('i', 1234))
# RX:
nrf.open_rx_pipe(0, b'NODE1')
nrf.start_listening()
while True:
if nrf.any():
data = nrf.recv()
print('Got:', struct.unpack('i', data))
time.sleep_ms(20)
Frequently Asked Questions
radio.setChannel(108) sits above WiFi channels). Also lower the data rate to 250 kbps for better noise rejection.