Fixing The Terrible Range Of Your Cheap NRF24L01+ PA/LNA Module

nRF24L01+ PA/LNA module specs look great on paper. Wireless communication up to 1000m in a small package readily available from a variety of cheap sources in China? The hard work of software connectivity already done by a variety of open source projects? Sounds great! But if you mashed BUY and are getting maybe 1% of that range, don’t worry because thanks to these clear directions, they can be fixed.

[Oitzu] got vastly better performance from his cheap units with a mixture of providing better power, controlling noise, adding shielding, and being careful to choose the right channel. He claims that “with [these] modifications I got about 1000m free line of sight out of the modules. In a forest with non free line of sight I measured about 270m, but these are probably not the maximum ranges possible. I need to test further.”

Modified nRF24L01+ PA/LNA modules and the MySensors software framework were used in another of [Oitzu]’s projects we recently featured: his solar-powered, networked birdhouses where they handle transmitting camera images to a Raspberry Pi for later uploading via the mobile network. He was able to get the aforementioned 270m in the woods, but not even a tenth of that before doing the simple modifications.

66 thoughts on “Fixing The Terrible Range Of Your Cheap NRF24L01+ PA/LNA Module

  1. Seems to me that the module was working fine, and that it was entirely the fault of the user who fed it with crap power and put it in a noisy environment.

    Considering that these module do not claim to do any filtering of the power lines, and clearly state that they need >100ma for transmit at full power, having a well designed power supply seems like a no brainer, especially when you consider that the packet nature of those radios necessitates rapid switching between transmit/recieve which will wreak havoc on a poorly designed SMPS supply. Also, if you want to have any hope of the crappy ‘1/4 wave’ whip antennas working you need to mount them on a ground plane (probably roughly what he did by wrapping the entire thing in aluminum foil), again an issue that is a complete non-sequitur if the module had been correctly mounted in a metal box with just the antenna mounted on a feedthrough SMA.

    1. You’re absolutely right. When you buy such a cheap, unshielded module, you don’t buy a complete radio, you just buy a piggy back PCB, that saves you from having to solder QFN ICs and doing all the microwave rf matching.
      It doesn’t save you from having to acquire rf knowledge to build a complete, functioning and compliant device.
      If you’re after that, buy a shielded, certified module with integrated micro, that’ll cost you about 100 times the money.

      1. @fuckface At the time i was writing that post it was mainly aimed at users having trouble to get the modules working, also the post was initially only focused on the shielding fix and expanded later with more errors that could occur.
        So yes, you are totally right about that a unstable power supply is the user fault, but that doesn’t prevent the user from doing it wrong. :)

        About noise: Well, on maximum power the module will not work without a shield regardless of a noise free envoirment and a clean powersupply. Isn’t mounting the module in a metal box not just a way of adding a bigger (volume wise) shield?

        @cyk: Actually there are shielded modules out there which claim to be FCC approved that will only cost you just 3 times the money. ;)

    2. @fface: (Potty mouth!) You’re right, and you’re wrong.

      What percentage of projects using nRF24 modules do we see here (a fairly savvy audience) where people just power them off the 5V rail of their Arduino? Tons. How many shield the things? None. With counterpoise? Please!

      The point is that if you buy one of these modules and follow the directions (haha! get it!) you’ll end up with the same thing that everyone has — a bare nRF24 module jammed into a breadboard under a tangle of wires sealed in a cardboard box.

      Documenting a better way to do it may not, in itself, be a hack. But it can certainly up the level of hackery in general. And that’s what we’re really here for, right?

      1. It’s 3.3V. I got lucky and can use max power w/o even having to use an external supply, unshielded too. I’ll do it when/if I run into issues…haven’t done much RF testing yet, still coding.

    1. If you’re interested in homebrew 2.4GHz antennas, checkout “andrew mcneil”‘s channel on YouTube. He literally has dozens of very informative 2.4GHz antenna builds and related videos.

        1. I made a 915 MHz omnidirectional biquad adapted from Andrew McNeil’s 2.4 GHz one (https://www.youtube.com/watch?v=4t6OliwhJ5g) for my Ubiquiti router car-to-home link. It works pretty well and was easier and more compact than a collinear for the same gain. http://superkuh.com/915MHz-Omnidirectional-Biquad.jpg

          His construction techniques using cut straws or metal sheet jigs for repeated wire cutting/bending have helped a lot. RG-402 semi-rigid coax for ease of soldering also.

  2. Those radios are fun because the majority of them coming out of China are actually counterfit chips. They work pretty well for being fakes, but the funny part is that the genuine radios actually have a design flaw that the counterfits don’t because they match the specification. You won’t notice unless you use the high throughput ping-pong mode; a counterfit won’t talk to a genuine because one of the bits in the packet is flipped! I recommend always buying them in pairs until you get your software fully bug free…

    1. I use the RFM75 or RFM73 which are clones with the proper bit for the nodes. However I use a NRF with PA/LNA big antenna at the center to get good range. It pisses me off a lot that I cannot use the auto ACK between them. Or that hoperf does not make their “high power” version with a LNA and external antenna.

  3. Nothing about changing bitrate to 250K…that alone improves range a lot.
    What about antenna – is it directional and matched?

    Tinfoil shielding is quite funny to me….

    1. Years ago I did some tests to get the longest range possible from some XRF radio modules with standard whip antennas running at 868.3mhz. I discovered that if I set the over-the-air baudrate down to 1.2k I achieved 3.4km when the antennas were aligned just right, with 1km giving a great signal.

      I also did a quick video to show the difference in terms of how much transmission is done between a packet being repeatedly sent at 250k and then at 1.2k by holding a wireless bug detector next to the transceiver:
      https://www.youtube.com/watch?v=I5D97NgMhXA

        1. Radio novice here.
          But more power at a lower rate, I thought it balanced out. Like a text message versus a call. I’m having difficulty finding the words for this.

          1. It does balance out, roughly. Higher data rates require propotionally more bandwidth, greater bandwidth proportionally increases received noise, requiring higher transmit power to overcome, so you end up with the power * data rate product being about constant for a given path and a given signal/noise ratio (which translates into 1/(error rate)). That’s assuming that the receiver bandwidth is reduced along with the data rate, but I don’t know if modules like these do that.

          2. @BrightBlueJim is right. As long as you can still increase your power or decrease your bit rate, you can kind of trade them one for another. But in practice things are different: a shorter packet with the same SNR has a smaller chance of being impacted by some other transmission in the shared band.
            This is why people tend to use the RX power at maximum and only then decrease the bit rate if the SNR/range is not acceptable.

        2. Thanks for the clarification, though the XRF modules I have run on 2v-3.6v and only consume 36mA when transmitting at full power, so not very much energy is used to transmit slow data at long distances.

  4. On the majority of transceiver modules I’ve purchased, the nRF24L01+ is an unlicensed clone, not made by Nordic Semi. The clones’ weakness is that they’re extremely sensitive to power supply noise. 50mV p-p of switching noise is enough to degrade their usable range to a few feet. And if there’s a PA/LNA, well… you know what they say about garbage in, garbage out.

    For the modules without PA/LNA, I start by soldering a 10uF ceramic SMD cap directly to the VCC/GND header pins. This helps, but often isn’t enough when powered from an average switcher. Instead of making the cap larger, I connect the module’s VCC and GND each through a 1ohm resistor; which in combo with the added cap, makes a more effective Pi filter. This always does the trick, and results in the expected range.

    For the modules with PA/LNA, I use 100uF and 2x 0.1ohm. Plus I usually add a LC Pi filter on the switcher output.

    This should be considered required knowledge for working with nRF24L01+ modules.

    1. Chris C. has it exactly right. We actually use these clones in production and found out with lots of testing that they are very usable up to 250m by properly filtering the power supply. We had better success using 22uF tantulum instead of 10uF ceramic for the normal modules with no series resistor. Similarly for the PA/LNA ones, we use 47uF tantulum that can be lowered to 22uF as well if it is on its own dedicated 3.3v linear supply rail.

      One thing we do NOT do as this has never worked in production: use a switcher supply nearby or to feed power to these clones. You are lucky to get 10 feet out of them! By adding shielding and a true ground plane PLUS additional LC filter, RF works fine up to 100m but then still fails. However, the production cost of the extra ground plane or putting the OEM parts on the PCB but needing an off-board connector was not worth it. Battery life takes a small hit but the alternative ended up being worse…

  5. Here is what I have learned from using these:
    1. careful about the power supply: a. decouple your LDO properly(it needs 1-2uF ceramic, not 100n + 100u electrolytic!). b. use a decoupling cap next to the module (1-2 uF ceramic).
    2. use a linear instead of a switching power supply
    3. Don’t use polling over SPI to check if there is a received packet like most of the libs out there do. This increases the noise. Use the IRQ pin
    4. 250Kbps does wonders
    5. Careful about cheap connectors, solder it if you can.
    6. A big ground near the module is preferred, like putting it in a metal box with a good contact to antenna ground.
    7. Don’t use long wires to the module, specially cheap stuff. See here: http://www.electrobob.com/bad-wires/

    1. This is excellent advice. I’m having issues myself with some shielded version of the PA+LNB versions, I presumed ordering the shielded versions would fix my issues, but it didn’t.

      I use these module boards to attach my units: http://www.addicore.com/nRF24L01-Adapter-p/123.htm

      The issue I have is that the module only sends when I physically hold the unit in my hand, I presume it’s related to the grounding of the module. When I hold it I get superb range. Looking at the above I’m going to try and add some ceramic capacitors (http://uk.rs-online.com/web/p/products/8523315), do I need to add them across the ground and vcc at both the radio and the modules I use above? With regards having to hold the unit, how could I fix this, I metal box isn’t an option for my application. Any thing else I should be aware of?

      Any help or advice would be greatly appreciated, I’m new to electronics!

      1. BTW Be really careful using large values ceramic caps (MLCC) on those OLD 1117 regulators which is shown in your link. The regulator is very old and was designed before MLCC, so it is not stable without having some minimal ESR. It is only designed for electrolytic caps. The part is very cheap ($0.03 from China), so it gets around.

        I read my datasheet and knew about the issues for the original part LM1117 that it is based on, so I designed in a series resistor. Just for the hell of it, I tested out the outputs when I use them in my design. https://hackaday.io/project/11427-low-cost-ntsc-gaming-with-arm-cortex-m/log/37823-pcb-layoutbuild

        go to bottom of the page:
        The scope picture with the saw tooth wave is because the ESR of the MLCC is so low that regulator goes into oscillation. By adding a series resistor (1R) that I have designed in, the output is as expected.

        Lesson of day: Don’t mix old regulators with large value ceramics caps without reading datasheets – preferably the one they are based on. Use chips that are designed in the last 5-10 years.

        Your second link capacitor has shitty Y5V dielectric as their values drops to a small fraction under bias. You want X7R, or X5R dielectrics. In general, keep the leads/connections very short when you use decoupling caps as the inductance of the leads adds impedance.

        1. Hi @fpgacomputer,

          Thank you for the reply, of which I think I understood most of it :-/

          SO given that I use the modules I linked too, how would you set things up (Capacitors / Resistors for example). I’m completely new to electronics, so the simpler, the better (I barely understand decoupling, oops). That said, I’ve spent weeks trying to get things working and am pulling my hair out. I’m really not sure why holding my modules makes them work perfectly, from what I’ve read it could be related to the grounding of it? BTW, currently I connect the module to the 5v line of my Arduino Uno.

          Any help would be very gratefully appreciated.

        1. Hi Bogdan,

          I can put some pictures up, but the wiring is pretty simple. I’ve basically got the adaptor board wired into my Arduino, and the shielded / non shielded NRF plunged into the adaptor board. The code works perfect, no question, confirmed using the non amplified versions.

          Like I say, if I hold the module the range is amazing and the transmissions perfect, if I don’t it’s terrible and transmissions are very slow, I presume it needs a better ground?

          I’m a little confused about the decoupling / resistor business, do you suggest I put small capacitor, for example 0.1 across the gnd / vcc along with a 1k resistor on both the radio and where the wires leave the Arduino for the adaptor board?

          Excuse my lack of knowledge!

    1. See how they have a board with nice decoupling next to the module? Most people will skip the board and hook up the module directly, skipping that capacitor and using thin wires. Also, the PA version of the NRF burns more current than the RFM69 (low power).

    1. lora will not save you if you make a bad design. ” getting maybe 1% of that range” as the article says points to some fundamental issues. of course, you can always get a crappy module, but they generally seem to be ok.

  6. Those nrf24L01+ chips have this nice bit 0 in register 09 marked as RPD – Received Power Detector. When there is any signal received on selected channel with strength over -64dBm, bit changes to 1 when you switch off RX mode. Why not use this function to quickly scan over entire channel range, find one channel that is empty and send to receiver a command to switch to that channel?
    Also I thought that everybody knows that each IC and each module needs its own power filters next to them. There are even sockets designed for logic chips that have 10nF or 100nF capacitor build in across Vdd and GND pins…

    1. I tried. The quickly scan is not a good measure. I live in an urban area with lots of WiFis around. Using that method I find something on every channel. What I found to give better results is to go to the frequency of wifi channel 8-9. Why: most APs default to channel 1, some use 6 or 11, which are the non overlapping ones. If nobody manually sets their AP there, 8-9 should be the quietest area.

  7. I’ve got some, and I appear to be lucky, in that they appear to be genuine ones. They have the built in antennna, and don’t have great range, but for the application I wanted, monitoring of things like plant water levels every so often, they have good enough range.

  8. One thing i would like to know is if these ultracheap “clone boards” actually are anywhere near the specs they should be for an RF-application. Are the RF traces impedance controlled? Do they even bother to check the impedances they get at pcb fab with test strips? And how well is the power distribution network of these boards designed? Do they actually do a proper PDN analysis and make shure the impedance of the power network is up to the task at hand?

    1. In your dreams….they even start taking out components off the cheapest modules. https://ncrmnt.org/2015/03/13/how-do-i-cost-optimize-nrf24l01/
      It may be that the modules are cloned from some better designed ones, but i know for sure there are at least 3 designs for the small power and 3 for the high power modules. So, maybe not.

      If you want something better, but still low cost look at HopeRF modules, they have the RFM75 (newest or 73 older). They are really compatible with the genuine NRF (won’t ACK with fake ones). You can get them from some of the big distributors as well, not crapbay.

  9. Hello, for the issue that the module only sends when you physically hold the unit in your hand or touch the IC with a finger to work fine, I solved it by lowering the power to a minimum radio.setPALevel(RF24_PA_MIN); and got 250 meters of range, I use nLRF24L01P PA + LNA :-)

  10. I’ve just managed to get 700m (through trees) out of these modules but it took 3 days of experiments. Many thanks to the comments above, indeed, this particular thread might be the best resource around for getting the high power modules to work. The best solution was an old-skool 317 with a 330R/560R to provide 3.3V. I have 0.1uF and 10uF on the radio module. The 317 is a standard schematic from the datasheet, eg a large value cap on the input (470uF), and on the output, 0.1uF and 10uF. I also wanted one variable removed so added a 2 meter cable to the antenna (you can get these pre-made on ebay etc). I’ve also got small ferrites on all the data lines, but not sure if these are needed. The power supply seems critical. I tried many switching regulators including ones up to 3A but no success. Multiple LC filters on the input and the output of the switchers. Put the switcher under load (10R) and watched the waveform on the CRO till it was rock steady. Still no luck, but the strange thing is when I put the switcher in parallel with a linear reg it works (a bit unorthadox I know). It worked if the linear reg is in parallel with the output after the additional LC filters but not if before these. I wonder if high voltage spikes are coming back from the radio module and the linear reg suppresses these?
    Another thing that was interesting was that if I tried powering the module from a huge bank of capacitors I could then replicate the fault even at the lowest power setting. It seems that if the module is unhappy in any way, it flips into self oscillation and draws a lot of power and then shuts down.
    Also tried another experiment – rock solid one second pings with a 2 meter extension on the antenna, but if remove the lead and attach the antenna directly, about one in ten pings don’t work. I think it helps to get the antenna away from the module and the arduino. I suspect the ground plane may also be shielding the module (ditto the foil trick).
    If you use a lead for the antenna, there are two types, male and reverse male and ditto female. Not sure of the correct terminology, but one type seems to be for radio modules and one is for home router wifi antennas and they are incompatible. But you can get little adaptors if you buy the wrong ones.
    Anyway, LM317 and antenna on a lead seems to work.

    1. In my case there is no problem with receiving data, but to transmitt anything at any range i have to touch the antenna, as long i keep touching it everything on transmitting side works. I tried shielding, playing with power supply, modifications and such, nothing helps except touching the antenna with my finger.

  11. All the back and fourth gives multiple angles of insight to those of us not quite as advanced in this field, as well as those of us that are. Thank you to all for chiming in. Remember, no two people are exactly the same. If there were, then one of them would be irrelevant and therefore would not exist. Wait,…am I even here. Is this even real?… Hey, what’s going on?! what the…….”poof”

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.