nRF24L01 Throughput Question

Hello Fellow Arduino Users,

I'm doing a project based on the nRF24L01 RF modules available online for about $2.5 each. They claim to have the following capabilities:

  • 1km @ 250Kbps
  • 500m @ 1Mbps
  • 250m @ 2Mbps

The best range test I have done (preliminary) with line of sight is something like 160m.
The best throughput I have seen in testing thus far is just 35kbps (sitting beside each other on max throughput settings).

I'm using the NRF24 library and an Arduino Nano (clone...sorry guys, I have legit ones too!) I've documented the progress on this project on Hackaday if you want some further background details.

Question: I expected to see maybe half of what was promised by the spec sheet, but 35kbps where I should see 2Mbps is disappointingly low for my already-lowered standards. Does someone else know of any possible way to squeeze some more throughput out of these guys? This actually affects my specific project pretty heavily because this isn't an IoT project where I'm just sending a few bytes now and then. I NEED some throughput :slight_smile:

If someone could shed some light on this I'd appreciate it. In short, why is the throughput so low, and is there anything that can be optimized to improve it? Thanks!

1 Like

Hi,

Have you got a separate supply for the RF units, the ones you are using have a Tx amplifier in them and will not be reliable running off the 3.3V supplied by the controller.

Tom... :slight_smile:

1 Like

How are you measuring this throughput? It could be you are misunderstanding what it means.

I tested a pair of units with the PCB antennas on the canal towpath a few days ago. When I set the "receiver" on the wooden engine cover I got a range of about 15m. When I put it higher up on the rear edge of the steel roof of the boat it was still working at 110m and I could not try a longer range because I could not see if the motor was rotating.

That suggested to me that the location is very important.

Interestingly the orientation of the nRF24 did not seem to matter. No matter how I held the handheld unit it continued to work.

I have it programmed to work at 250kbps but I am only sending small amounts of data (2 ints).

I only need about 15m for my application so this was just a curiosity test.

...R

@TomGeorge I have the nRF24L01+PA+LNA model which is best used with an accompanying power management breakout board which includes the needed capacitors and voltage regulator. I am using that on both units. In my most recent test, I did happen to be powering one of the radios from the Arduino itself, but I've seen similar results with both powered by 5V through the specially-designed power board. Power shouldn't be an issue.

@Grumpy_Mike I am using the Transfer example in the nRF24 Library. Downloaded yesterday (6/14/16)

@Robin2 Thanks for sharing your experience in range testing. Range really helps in my project (that's why I mentioned it), but I'm actually more interested in throughput. Do you have any idea how much throughput you are seeing on your units? I'd like to see if everyone else is getting similar numbers in real-world testing. Thanks!

Thanks to all who have replied!

arduinocreativity:
Do you have any idea how much throughput you are seeing on your units?

No. As I said above I am only sending 2 ints with each message. The system is for controlling model trains.

It should not be too difficult to write a program to send (say) 100 packets of 32 bytes and see how long it takes.

You may need to tweak the settings for the number of retries and how long to wait for an acknowledgment.

…R

Robin2:
You may need to tweak the settings for the number of retries and how long to wait for an acknowledgment.

That's something I hadn't thought of before. There is a 200ms timeout in that sketch. I might try to shorten it a bit. Of course, I don't think I had any dropped packets in my test runs that would have pushed me deep into that 200ms. Response time is something around 1.5ms or so. I'll definitely (try to) try it tonight and update though. Thanks for the tip!

You never answered Mike's question: How are you 'measuring through-put'? Are you measuring or calculating?

Simple parabolic reflectors on the antennas will help some.

arduinocreativity:
@Grumpy_Mike I am using the Transfer example in the nRF24 Library. Downloaded yesterday (6/14/16)

I'm using the Transfer example included in the RF24 Library. It sends a bunch of random data and spits out the rate on the serial monitor. I would post some sample output but I don't have the radios with me at the moment. Maybe this evening.

As far as antennas are concerned: I'm bench testing right now and the radios are 2 feet apart. They have small antennas attached.

For a distance of two feet RF24_PA_MAX could be too much.

The transfer sample I have uses RF24_1MBPS.