NRF24 is not conneting

Hi everyone,

I opened this topic because I am stuck with a very specific nRF24L01 communication issue. My SPI connection seems perfect, but the radios refuse to talk to each other.

Here is my setup:

  • Both modules are using the Base Adapter Shields (regulated to 3.3V).

  • The adapters are powered from the Arduino's 5V pin.

  • radio.isChipConnected() returns 1 (true).

  • radio.available() always returns false on the receiver side.

I have tested the modules with the following codes (based on Dejan Nedelkovski's tutorial but modified to fix payload sizes and autoAck settings):

/*
* Arduino Wireless Communication Tutorial
*     Example 1 - Transmitter Code
*                
* by Dejan Nedelkovski, www.HowToMechatronics.com
* 
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/

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

RF24 radio(7, 8); // CE, CSN

const byte address[] = "00001";

void setup() {
  
  Serial.begin(9600);
  printf_begin();
  radio.begin();

if (!radio.begin()) {
  Serial.println(F("radio hardware not responding!"));
  while (1) {} // hold program in infinite loop to prevent subsequent errors
}

  
  radio.setAutoAck(false);
  radio.setChannel(115);
  radio.setPALevel(RF24_PA_LOW);
  
  radio.openWritingPipe(address);
  
  radio.stopListening();
  radio.printPrettyDetails();
}

void loop() {
  Serial.println("Entered TX loop");
  delay(150);
  const char text[] = "Hello World";
  radio.write(&text, sizeof(text));
  delay(1000);
}

/*
* Arduino Wireless Communication Tutorial
*       Example 1 - Receiver Code
*                
* by Dejan Nedelkovski, www.HowToMechatronics.com
* 
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/

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

RF24 radio(7, 8); // CE, CSN

const byte address[] = "00001";

void setup() {
  Serial.begin(9600);
  printf_begin();
  radio.begin();

if (!radio.begin()) {
  Serial.println(F("radio hardware not responding!"));
  while (1) {} // hold program in infinite loop to prevent subsequent errors
}

  
  radio.setAutoAck(false);
  radio.setChannel(115);
  radio.setPALevel(RF24_PA_LOW);
  
  radio.openReadingPipe(1, address);
  
  radio.startListening();
  radio.printPrettyDetails(); 
  bool result = radio.isChipConnected();
  Serial.println(result);

}

void loop() {
//Serial.println("in loop");
delay(1);
  if (radio.available()) {
    Serial.println("the radio is available");
    char value[32] = "";
    radio.read(&value, sizeof(value));
    Serial.println(value);
    delay(1);
    }
  }

SPI Frequency = 10 Mhz
Channel = 115 (~ 2515 MHz)
Model = nRF24L01+
RF Data Rate = 1 MBPS
RF Power Amplifier = PA_LOW
RF Low Noise Amplifier = Enabled
CRC Length = 16 bits
Address Length = 5 bytes
Static Payload Length = 32 bytes
Auto Retry Delay = 1500 microseconds
Auto Retry Attempts = 15 maximum
Packets lost on
current channel = 0
Retry attempts made for
last transmission = 0
Multicast = Disabled
Custom ACK Payload = Disabled
Dynamic Payloads = Disabled
Auto Acknowledgment = Disabled
Primary Mode = RX
TX address = 0xe7e7e7e7e7
pipe 0 (closed) bound = 0xe7e7e7e7e7
pipe 1 ( open ) bound = 0x3130303030
pipe 2 (closed) bound = 0xc3
pipe 3 (closed) bound = 0xc4
pipe 4 (closed) bound = 0xc5
pipe 5 (closed) bound = 0xc6
1

SPI Frequency = 10 Mhz
Channel = 115 (~ 2515 MHz)
Model = nRF24L01+
RF Data Rate = 1 MBPS
RF Power Amplifier = PA_LOW
RF Low Noise Amplifier = Enabled
CRC Length = 16 bits
Address Length = 5 bytes
Static Payload Length = 32 bytes
Auto Retry Delay = 1500 microseconds
Auto Retry Attempts = 15 maximum
Packets lost on
current channel = 0
Retry attempts made for
last transmission = 0
Multicast = Disabled
Custom ACK Payload = Disabled
Dynamic Payloads = Disabled
Auto Acknowledgment = Disabled
Primary Mode = TX
TX address = 0x3130303030
pipe 0 ( open ) bound = 0x3130303030
pipe 1 ( open ) bound = 0xc2c2c2c2c2
pipe 2 (closed) bound = 0xc3
pipe 3 (closed) bound = 0xc4
pipe 4 (closed) bound = 0xc5
pipe 5 (closed) bound = 0xc6
Entered TX loop

Hi, I am not an expert as so many here, but I start to get a litle experience with the NRF24. I run 2 of them, the 1st on an UNO R4 Wifi, the other on an UNO R4 minima.
You say : * The adapters are powered from the Arduino's 5V pin.
70% chance hat this is the problem.
You should try with an external supply, personaly I use a pack of 2x18650 bateries and a 3.3 v regulator capable of 500ma ouput plus of course the imperative 10 micro farad and 100nF decupling as close as possible from the 3.3v on the NRF for the 100nF. It is realy crucial !

But I used it with an NRF24 adapter.

The question is : can theArduino supply enough current? I doubt ! The NRF can draw 140/150 mA at low power when emitting. If you have sensors, led's... have to supply all of them! I don't know about the adaptator ! do they have proper decupling.. up to the moment I added the 100nF at the right placed I could'nt make my NRF working, as you the pretty details were correct but no communication. Before this I have been trying to make the NRF working from the Arduino 3.3v ! Now I have learnt that the Arduino are'nt power supplies ! Someone on this forum said it, Now I beleive him !

What Arduino are you using and what IDE version?

clone arduino uno and ide version is 2.3.7

I am already using a dedicated nRF24L01 Adapter Board (the one with an onboard AMS1117 voltage regulator that steps down 5V to 3.3V). You can look it up on Google; it is specifically designed to handle the voltage conversion and provide clean 3.3V power to the module. Right now, I have absolutely no sensors or servos connected to the Arduino—only the nRF24 with its adapter board is plugged in.
Currently, I only have a 10uF electrolytic capacitor on hand.

Given that I only have this 10uF capacitor and the adapter board, how and where should I place it to fix this issue? Should I just bridge it across the VCC and GND pins of the adapter input?

According to the data sheet, nRF24L01 uses <12mA when set to max Tx output, so Arduino Uno supply should not be a problem. Particularly with the supply module you are using.

One thing you could try, assuming the hardware is ok, change

radio.openReadingPipe(1, address);
to
radio.openReadingPipe(0, address);

Otherwise, I would look for a different example program.

you are right for the 12 mA (some say 14mA..) but for which type of NRF24... the nRF24 L01+ need 12/14 mA the NRF24L01+ PA LNA (the one with the external antenna need 140/150 mA. I stay on what I said before and as many sources say.