Communication Issue between two nRF24L01+

Hi, I have connected two nRF24L01+ with two different arduino nano using pin 9 for the CE pin, and pin 8 for the CSN pin. The arduino with Radio 0 has just the radio and it's an old bootloader. But the other one with Radio 1 is new bootloader and has it's rest of the digital and anolog pins conneced to various LEDs and Push Buttons.

I have used GettingStarted example from RF24 library. But can't seem to create a proper network between the two. And behaviour is quite abronmal. From Serial log you can see although Radio 0 is receiveing 4 bytes but payload not getting updated, more importantly Radio 1 not receiving acknoledgement. Even upon flipping the role, Radio 1 receiving the bytes but payload is still not there but this time Radio 0 is receiving acknoledgement though.

FYI: Antennas for both of the radio is connected all the time.

My Connection Diagram:
InkedArduino-Wiring-Fritzing-Connections-with-nRF24L01-PA-LNA-External-Antenna-Wireless-Module

Radio 1 Serial Log:

12:19:25.348 -> RF24/examples/GettingStarted
12:19:25.348 -> Which radio is this? Enter '0' or '1'. Defaults to '0'
12:19:36.812 -> radioNumber = 1
12:19:36.812 -> *** PRESS 'T' to begin transmitting to the other node
12:19:36.812 -> SPI Speedz	= 10 Mhz
12:19:36.812 -> STATUS		= 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
12:19:36.812 -> RX_ADDR_P0-1	= 0x65646f4e32 0x65646f4e31
12:19:36.859 -> RX_ADDR_P2-5	= 0xc3 0xc4 0xc5 0xc6
12:19:36.859 -> TX_ADDR		= 0x65646f4e32
12:19:36.859 -> RX_PW_P0-6	= 0x04 0x04 0x04 0x04 0x04 0x04
12:19:36.859 -> EN_AA		= 0x3f
12:19:36.859 -> EN_RXADDR	= 0x02
12:19:36.859 -> RF_CH		= 0x4c
12:19:36.859 -> RF_SETUP	= 0x03
12:19:36.859 -> CONFIG		= 0x0f
12:19:36.859 -> DYNPD/FEATURE	= 0x00 0x00
12:19:36.859 -> Data Rate	= 1 MBPS
12:19:36.859 -> Model		= nRF24L01+
12:19:36.859 -> CRC Length	= 16 bits
12:19:36.859 -> PA Power	= PA_LOW
12:19:36.859 -> ARC		= 0
12:19:36.859 -> SPI Frequency		= 10 Mhz
12:19:36.859 -> Channel			= 76 (~ 2476 MHz)
12:19:36.859 -> RF Data Rate		= 1 MBPS
12:19:36.859 -> RF Power Amplifier	= PA_LOW
12:19:36.859 -> RF Low Noise Amplifier	= Enabled
12:19:36.859 -> CRC Length		= 16 bits
12:19:36.859 -> Address Length		= 5 bytes
12:19:36.859 -> Static Payload Length	= 4 bytes
12:19:36.859 -> Auto Retry Delay	= 1500 microseconds
12:19:36.906 -> Auto Retry Attempts	= 15 maximum
12:19:36.906 -> Packets lost on
12:19:36.906 ->     current channel	= 0
12:19:36.906 -> Retry attempts made for
12:19:36.906 ->     last transmission	= 0
12:19:36.906 -> Multicast		= Disabled
12:19:36.906 -> Custom ACK Payload	= Disabled
12:19:36.906 -> Dynamic Payloads	= Disabled
12:19:36.906 -> Auto Acknowledgment	= Enabled
12:19:36.906 -> Primary Mode		= RX
12:19:36.906 -> TX address		= 0x65646f4e32
12:19:36.906 -> pipe 0 (closed) bound	= 0x65646f4e32
12:19:36.906 -> pipe 1 ( open ) bound	= 0x65646f4e31
12:19:36.906 -> pipe 2 (closed) bound	= 0xc3
12:19:36.906 -> pipe 3 (closed) bound	= 0xc4
12:19:36.906 -> pipe 4 (closed) bound	= 0xc5
12:19:36.906 -> pipe 5 (closed) bound	= 0xc6
12:21:10.063 -> *** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK
12:21:10.155 -> Transmission failed or timed out
12:21:11.275 -> Transmission failed or timed out
12:21:12.346 -> Transmission failed or timed out
12:21:13.468 -> Transmission failed or timed out
12:21:14.541 -> Transmission failed or timed out
12:21:15.661 -> Transmission failed or timed out
12:21:16.645 -> *** CHANGING TO RECEIVE ROLE -- PRESS 'T' TO SWITCH BACK
12:21:19.222 -> Received 4 bytes on pipe 0: 0.00
12:21:20.247 -> Received 4 bytes on pipe 0: 0.00
12:21:21.228 -> Received 4 bytes on pipe 0: 0.00
12:21:22.250 -> Received 4 bytes on pipe 0: 0.00
12:21:23.230 -> Received 4 bytes on pipe 0: 0.00
12:21:24.213 -> Received 4 bytes on pipe 0: 0.00

Radio 0 Serial Log:

12:19:26.410 -> RF24/examples/GettingStarted
12:19:26.410 -> Which radio is this? Enter '0' or '1'. Defaults to '0'
12:19:29.924 -> radioNumber = 0
12:19:29.924 -> *** PRESS 'T' to begin transmitting to the other node
12:19:29.924 -> SPI Speedz	= 10 Mhz
12:19:29.924 -> STATUS		= 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
12:19:29.972 -> RX_ADDR_P0-1	= 0x65646f4e31 0x65646f4e32
12:19:29.972 -> RX_ADDR_P2-5	= 0xc3 0xc4 0xc5 0xc6
12:19:29.972 -> TX_ADDR		= 0x65646f4e31
12:19:29.972 -> RX_PW_P0-6	= 0x04 0x04 0x04 0x04 0x04 0x04
12:19:29.972 -> EN_AA		= 0x3f
12:19:29.972 -> EN_RXADDR	= 0x02
12:19:29.972 -> RF_CH		= 0x4c
12:19:29.972 -> RF_SETUP	= 0x03
12:19:29.972 -> CONFIG		= 0x0f
12:19:29.972 -> DYNPD/FEATURE	= 0x00 0x00
12:19:29.972 -> Data Rate	= 1 MBPS
12:19:29.972 -> Model		= nRF24L01+
12:19:29.972 -> CRC Length	= 16 bits
12:19:29.972 -> PA Power	= PA_LOW
12:19:29.972 -> ARC		= 0
12:19:29.972 -> SPI Frequency		= 10 Mhz
12:19:29.972 -> Channel			= 76 (~ 2476 MHz)
12:19:29.972 -> RF Data Rate		= 1 MBPS
12:19:29.972 -> RF Power Amplifier	= PA_LOW
12:19:29.972 -> RF Low Noise Amplifier	= Enabled
12:19:29.972 -> CRC Length		= 16 bits
12:19:30.018 -> Address Length		= 5 bytes
12:19:30.018 -> Static Payload Length	= 4 bytes
12:19:30.018 -> Auto Retry Delay	= 1500 microseconds
12:19:30.018 -> Auto Retry Attempts	= 15 maximum
12:19:30.018 -> Packets lost on
12:19:30.018 ->     current channel	= 0
12:19:30.018 -> Retry attempts made for
12:19:30.018 ->     last transmission	= 0
12:19:30.018 -> Multicast		= Disabled
12:19:30.018 -> Custom ACK Payload	= Disabled
12:19:30.018 -> Dynamic Payloads	= Disabled
12:19:30.018 -> Auto Acknowledgment	= Enabled
12:19:30.018 -> Primary Mode		= RX
12:19:30.018 -> TX address		= 0x65646f4e31
12:19:30.018 -> pipe 0 (closed) bound	= 0x65646f4e31
12:19:30.018 -> pipe 1 ( open ) bound	= 0x65646f4e32
12:19:30.018 -> pipe 2 (closed) bound	= 0xc3
12:19:30.018 -> pipe 3 (closed) bound	= 0xc4
12:19:30.018 -> pipe 4 (closed) bound	= 0xc5
12:19:30.018 -> pipe 5 (closed) bound	= 0xc6
12:21:10.093 -> Received 4 bytes on pipe 1: 0.00
12:21:11.166 -> Received 4 bytes on pipe 1: 0.00
12:21:12.237 -> Received 4 bytes on pipe 1: 0.00
12:21:13.359 -> Received 4 bytes on pipe 1: 0.00
12:21:14.431 -> Received 4 bytes on pipe 1: 0.00
12:21:15.551 -> Received 4 bytes on pipe 1: 0.00
12:21:19.206 -> *** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK
12:21:19.253 -> Transmission successful! Time to transmit = 568 us. Sent: 0.00
12:21:20.232 -> Transmission successful! Time to transmit = 560 us. Sent: 0.01
12:21:21.211 -> Transmission successful! Time to transmit = 564 us. Sent: 0.02
12:21:22.235 -> Transmission successful! Time to transmit = 560 us. Sent: 0.03
12:21:23.214 -> Transmission successful! Time to transmit = 560 us. Sent: 0.04
12:21:24.244 -> Transmission successful! Time to transmit = 564 us. Sent: 0.05

Did the 'GettingStarted example' work reliably ?

Hi,
You are using the 3V3 from the onboard 3V3 regulator, have you got a 10uF capacitor across the 3V3 to gnd AT the NRF?

A good circuit diagram would help ,a hand drawn image would be fine.

What are you using to power your two projects?
How close have you got the NRF+ units to each other?
Try spacing them out to at least 50cm.

A copy of your codes would help too.

Thanks.. Tom... :grinning: :+1: :coffee: :australia:

You are looking at the serial output from both the devices, I am not sure what do you mean by reliability. You have to judge!

Thanks a lot @TomGeorge :innocent: for replying. I have tried to answer all your doubts here. Let me know if there is something else I am missing.

No I don't. Should I add one?

I have added the circuit diagram on the post. Exactly that is the circuit no other components are used for Radio 0. But for Radio 1 there are Push Buttons added on all Analog pins and LEDs on all digital pin. There is a I2C OLED display added as well.

Though USB only. No other power source is added during testing.

Ok this one I have to try. They were pleced just side by side. Will get back to you after trying this.

It's just the getting started example from RF24 library. In case you don't have it with you. This is the link: GettingStarted Example of RF24. Also in case you ask, I have changed the CE and CSN pin on the example based on the circuit diagram. I mean those radios seems to be working fine, based on all those debuging information I am getting on serial. Just the payload and ack isn't quite working as it should. Could this be due to some h/w damange on any one of them? Or issue with the actual library itself? I have installed it thorugh IDE Library manager. Also I have heard about this another library called RadioHead. Should I try that?

Here are the main things that I learned while struggling to get my radios to work.

If you read and, closely, follow Robin2's simple rf24 tutorial you should be able to get them working. That tutorial sure helped me. Run the CheckConnection.ino (look in reply #30) to verify the physical wiring between the radio module and its processor (Arduino).

Make sure the rf24 power supply can provide enough current. This is especially true for the high power (external antenna) modules. I use homemade adapters like these. They are powered by 5V and have a 3.3V regulator on the board. Robin2 also has suggested trying with a 2 AA cell battery pack.

If using the high powered radios make sure to separate them by a few meters. They may not work too close together. Try lower power settings.

Reset the radios by cycling power to them after uploading new code. I have found that to help. They do not reset with the Arduino.

Switch to 1MB data rate to catch the not so cloned clones.

radio.setDataRate( RF24_1MBPS );

I have found that my radios will not communicate short distance when power amplification is set too high. You might want to test with minimum power.

Yes, this is it. Arduino couldn't power those radios properly. I used these adapters and rest of the circuit was unchanged. It's working now. Thank you @groundFungus

https://www.amazon.com/dp/B01IK9GCPE/ref=cm_sw_em_r_mt_dp_B7YPGZ2QMDW40547MMDP

Yes, I already knew this and if you check the provided logs PA Power was set to PA_LOW and they were far enough.

Anyway majority of the problems for 3V3 modules with Arduino I have found is the power supply. Although luckily these radios have 5V tollerance logic pins. Many modules require level shifters for logic pins too. I wonder why they make these modules 3V3 at the first place while they are meant to be used with standard 5V microcontrollers!

Because the RF chips are 3.3V.

Most electronic tenchnolgy for the last maybe 20 years has been primarily 3.3V.

Very much doubt anyone would make semiconductors just for the very small minority of those in the Arduino hobby world.