looking back some simple text tests using Pro Mini (3.3V) and NRF24L10 modules
transmitter
// Pro Mini 3v3 > NRF24L01 transmitter test using a text string
// RP2040 connections
// RP2040 SPIO_SCK pin GP18 goes to NRF24L10_pin SCK
// RP2040 SPIO_RX pin GP16 goes to NRF24L10_pin MISO
// RP2040 SPIO_TX pin GP19 goes to NRF24L10_pin MOSI
// RP2040 pin SPIO_CSn GP17 to NRF24L10 CSN
// RP2040 pin GP20 to NRF24L10 CE
// RP2040 GND and 3.3V to NRF24L10 GND and VCC
// Leonardo connections ???
// Leonardo ICSP SCK pin 15 to NRF24L10_pin SCK
// Leonardo ICSP MISO pin 14 to NRF24L10_pin MISO
// Leonardo ICSP MOSI pin 16 to NRF24L10_pin MOSI
// Leonardo pin 10 to NRF24L10 CSN
// Leonardo pin 9 to NRF24L10 CE
// Leonardo GND and 3.3V to NRF24L10 GND and VCC
// ESP8266 connections
// ESP8266 SCK pin GPIO14 goes to NRF24L10_pin SCK
// ESP8266 MISO pin GPIO12 goes to NRF24L10_pin MI
// ESP8266 MOSI pin GPIO13 goes to NRF24L10_pin MO
// NRF24L10 CE to ESP8266 pin GPIO4
// NRF24L10 CSN to ESP8266 pin GPIO5
// UNO/Nano connections
// arduino MOSI pin 11 goes to NRF24L10_pin MOSI
// arduino MISO pin 12 goes to NRF24L10_pin MI
// arduino SCK pin 13 goes to NRF24L10_pin SCK
// NRF24L10 CE to arduino pin 9
// NRF24L10 CSN to arduino pin10
// NRF24L10 VCC to 3.3V and GND to GND
// for ESP32-CAM
//#define SCK 14
//#define MISO 12
//#define MOSI 13
//#define CS 15
// ESP32 connections
// ESP32 SCK pin GPIO18 goes to NRF24L10_pin SCK
// ESP32 MISO pin GPIO19 goes to NRF24L10_pin MI
// ESP32 MOSI pin GPIO23 goes to NRF24L10_pin MO
// NRF24L10 CE to ESP32 pin GPIO4
// NRF24L10 CSN to ESP32 pin GPIO 5
// NRF24L10 VCC to 3.3V
// Pro_Mini connections
// Pro_Mini SCK pin GPIO13 to RNRF24L10_pin SCK
// Pro_Mini MISO pin GPIO12 to NRF24L10_pin MISO
// Pro_Mini MOSI pin GPIO11 to NRF24L10_pin MOSI
// Pro_Mini SS pin GPIO 10 to NRF24L10 CE
// Pro_Mini pin GPIO9 to NRF24L10 CSN
// Pro_Mini VCC (3.3V NOT 5V) to NRF24L10 VCC
// NOTE: NRF24L10 may require external 3.3V supply when transmitting
#include <SPI.h>
#include <RF24.h>
#define CE_PIN 10
#define CSN_PIN 9
bool radioNumber = 0;
RF24 radio(CE_PIN, CSN_PIN);
byte addresses[][6] = { "1Node", "2Node" };
void setup() {
Serial.begin(115200);
delay(2000);
Serial.println("\n\nPro Mini > NRF24L01 transmit text");
if (radio.begin()) {
Serial.println("nRF24L01 begin() is started ");
} else {
Serial.println("nRF24L01 begin() is not started");
while (1);
}
if (radio.isChipConnected())
Serial.println("Transmitter NF24 connected to SPI");
else {
Serial.println("NF24 is NOT connected to SPI");
while (1)
;
}
radio.setChannel(125);
radio.setPALevel(RF24_PA_MIN);
radio.powerUp();
radio.setDataRate(RF24_1MBPS);
//radio.setDataRate(RF24_250KBPS);
if (radioNumber) {
radio.openWritingPipe(addresses[1]);
radio.openReadingPipe(1, addresses[0]);
} else {
radio.openWritingPipe(addresses[0]);
radio.openReadingPipe(1, addresses[1]);
}
radio.stopListening();
//radio.setPayloadSize(sizeof(Struct1));
}
// loop transmiting data packet
void loop() {
static char testString[10] = "text 0";
radio.write(testString, sizeof(testString));
Serial.print("transmit ");
Serial.println(testString);
delay(1000);
testString[5]++;
}
receiver
// Pro Mini 3V3 > NRF24L01 receiver test using a text string
// UNO/Nano connections
// arduino SCK pin 11 goes to NRF24L10_pin MOSI
// arduino MISO pin 12 goes to NRF24L10_pin MI
// arduino MOSI pin 13 goes to NRF24L10_pin SCK
// NRF24L10 CE to arduino pin 9
// NRF24L10 CSN to arduino pin10
// ESP32 connections
// ESP32 SCK pin GPIO18 goes to NRF24L10_pin SCK
// ESP32 MISO pin GPIO19 goes to NRF24L10_pin MI
// ESP32 MOSI pin GPIO23 goes to NRF24L10_pin MO
// NRF24L10 CE to ESP32 pin GPIO4
// NRF24L10 CSN to ESP32 pin GPIO 5
// NRF24L10 VCC to 3.3V
// Pro_Mini connections
// Pro_Mini SCK pin GPIO13 to RNRF24L10_pin SCK
// Pro_Mini MISO pin GPIO12 to NRF24L10_pin MISO
// Pro_Mini MOSI pin GPIO11 to NRF24L10_pin MOSI
// Pro_Mini SS pin GPIO 10 to NRF24L10 CE
// Pro_Mini pin GPIO9 to NRF24L10 CSN
// Pro_Mini VCC (3.3V NOT 5V) to NRF24L10 VCC
// NOTE: NRF24L10 may require external 3.3V supply when transmitting
#include <SPI.h>
#include <RF24.h>
#define CE_PIN 10
#define CSN_PIN 9
bool radioNumber = 1;
const uint8_t pipes[][6] = { "1Node", "2Node" };
RF24 radio(CE_PIN, CSN_PIN);
char dataReceived[10]; // this must match dataToSend in the TX
bool newData = false;
//===========
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("Pro Mini > NRF24L01 Receive text");
radio.begin();
if (radio.isChipConnected())
Serial.println("Receiver NF24 connected to SPI");
else {
Serial.println("NF24 is NOT connected to SPI");
while (1)
;
}
radio.setChannel(125);
radio.setDataRate(RF24_1MBPS);
//radio.setDataRate(RF24_250KBPS);
radio.printDetails();
if (!radioNumber) {
radio.openWritingPipe(pipes[0]);
radio.openReadingPipe(1, pipes[1]);
} else {
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1, pipes[0]);
}
radio.startListening();
// radio.setPayloadSize(sizeof(Struct1));
}
//=============
void loop() {
if (radio.available()) {
char testString[10] = "";
radio.read(testString, sizeof(testString));
Serial.print("Test string: ");
Serial.println(testString);
}
}
transmitter serial monitor output
Pro Mini > NRF24L01 transmit text
nRF24L01 begin() is started
Transmitter NF24 connected to SPI
transmit text 0
transmit text 1
transmit text 2
transmit text 3
transmit text 4
transmit text 5
transmit text 6
transmit text 7
receiver serial monitor output
Pro Mini > NRF24L01 Receive text
Receiver NF24 connected to SPI
SPI Speedz = 10 Mhz
STATUS = 0x0e RX_DR=0 TX_DS=0 TX_DF=0 RX_PIPE=7 TX_FULL=0
RX_ADDR_P0-1 = 0x65646f4e32 0x65646f4e31
RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6
TX_ADDR = 0x65646f4e32
RX_PW_P0-6 = 0x20 0x20 0x20 0x20 0x20 0x20
EN_AA = 0x3f
EN_RXADDR = 0x03
RF_CH = 0x7d
RF_SETUP = 0x01
CONFIG = 0x7e
DYNPD/FEATURE = 0x00 0x00
Data Rate = 1 MBPS
Model = nRF24L01+
CRC Length = 16 bits
PA Power = PA_MIN
ARC = 15
Test string: text 0
Test string: text 1
Test string: text 2
Test string: text 3
Test string: text 4
Test string: text 5
Test string: text 6
Test string: text 7
photo of test setup
for the tests I powered the NRF24L10 modules from the Pro Mini VCC 3V3 and the transmit/receive worked OK
However, it is recommended that an external 3V3 power supply is used - see Power Stability Issues with RF24 Radio Modules by @gilshultz
check your connections and keep them as short as possible
jumper wires are an endless source of poor connections and intermittent problems - when testing the NRF24L10 modules the communication stopped - I found a jumper wire had become disconnected on the transmitter
EDIT: maybe worth looking at the HC-12 module which is easier to use than the NRF24L10
