How NRF24l01 Arduino Nano Works

NRF24L01 is a single-chip transceiver module that uses the SPI protocol or an RF24 library. Here is all that you need to know about NRF24L01, how it works, NRF24L01 Arduino Guide, and NRF24L01 Module Pinout.

The transceiver module consists of fully integrated frequency synthesizers, a crystal oscillator, an amplifier, a demodulator, a modulator, and an Enhanced ShockBurst protocol engine.

Operations of NRF24L01

The operations which make NRF24L01 better than others are as given below:

Power Consumption

The module’s operating range is from 1.9 to 3.6V, and the logic pins are 5-volt tolerant, so it can easily be connected to an Arduino or any 5V logic microcontroller without using any logic level converter.

It supports programmable output power viz. 0 dBm, -6 dBm, -12 dBm, or -18 dBm and consumes around 12 mA during transmission at 0 dBm, which is even less than a single LED’s power consumption. The best factor is that it consumes 26 µA in standby mode and 900 nA in power-down mode. That makes it the go-to wireless device for low-power applications.

Other Specifications

Frequency range - 2.4 GHz ISM band
Maximum Air data range 2 Mbps
Modulation format - GFSK
Maximum Output power - 0 dBm
Operating Voltage - 1.9V to 3.6 V
Max. Operating Current - 13.5 mA
Minimum current (stand by) - 26µA
Logic Input - 5 V tolerant
Communication range - 800 m

Features of NRF24L01

The NRF24L01 has many features which make it more user-friendly. These features are as follows:

  • Easy to pair: It is easy to pair with Microcontrollers Arduino Board ( MCU, ARM, PIC, AVR, SIM 32).
  • Cost to performance ratio: It balances wireless transmission with performance and cost.
  • Wide range: It can work up to a wide range of 100m with a standby current of 22 uA.
  • Cost-effective: The wireless transceiver offers the aforementioned features, is more affordable than its competitors, and can be purchased for US $2!

    Applications of NRF24L01

    The application range of NRF24L01 is wide; it can be used from Wireless PCs to controllers and toys. Here is the list of some of its applications:

    1. Game controllers
    2. VoIP headsets
    3. 3-in-1 desktop bundles
    4. Wireless PC peripherals
    5. Sports watches and sensors
    6. Asset tracking systems
    7. Toys
    8. Mouse, keyboards, and remotes
    9. RF RFID
    10. Advanced media center remote controls

    How is NRF24L01 different from NRF24L01+?

    You must be amazed to see a “+” sign with some of the NRF24L01s in the market. You need not be confused anymore. Here is the difference between the two:

    The NRF24L01+ is an updated version of the NRF24L01. It is capable of handling an extra 250kbps of on-air data rate while the NRF24L01 without “+” has only 1Mbps and 2Mbps.

    Other than that, both can be considered identical to one another. Both versions can be mixed as long as 1 or 2 MBps are used as the data rate.

    SPI interface of NRF24L01

    The NRF24L01+ transceiver module communicates over a 4-pin Serial Peripheral Interface (SPI), and its maximum data range is 10Mbps. The SPI interface can configure the parameters such as frequency channel (125 selectable channels), output power (0 dBm, -6 dBm, -12 dBm, or -18 dBm), and data rate (250kbps, 1Mbps, or 2Mbps).

    The SPI bus works on the concept of a master and a subordinate. Arduino is the master in most common applications, and the NRF24L01+ transceiver module is the subordinate. The number of subordinates on the SPI bus is limited; on the other hand, Arduino Uno can use a maximum of two SPI subordinates, i.e., two nRF24L01+ transceiver modules.

    Versions of NRF24L01+

    The versions of NRF24L01+ are:

    • NRF24L01+ wireless module is the first version of the NRF24L01+. It comes with an onboard antenna and is small and compact.
    • NRF24L01+ 2.4 wireless module is the second version of the NRF24L01+.
    • NRF24L01+ PA has an external IPX antenna and a power amplifier with a wide transmission range of 100m.

    NRF24L01 Module Pinout

    Here is the representation of the NRF24L01 Module pinout:

    NRF24L01 Module Pinout

    Pin No. Pin Name  Pin Specifications
    1 VCC This pin supplies power to the module. Its voltage can range from 1.9 to 3.9 volts. We can connect it directly to the 3.3V output of our Arduino.
    2 CSN (Chip Select Not) CSN is an active-LOW pin and is normally kept HIGH. It has to be kept high except when we are sending the device an SPI command or receiving data on the SPI bus from the microcontroller.
    3 MOSI ((Master Out Slave In) It is SPI input to the nRF24L01 that is used to
    receive data from the microcontroller
    4 IRQ It is an interrupt pin that alerts the master when new data is available to process.
    5 MISO
    (Master In Slave Out)
    It is SPI output from the nRF24L01. It is used to send data to the microcontroller
    6 SCK (Serial Clock) It accepts clock pulses provided by the SPI bus master.
    7 CE (Chip Enable) It is the enable pin of the module. CE is used to select the mode of the NRF24L01 which is either transmit or receive, depending upon the mode it is currently in.
    8 GND GND is a Ground Pin. It is usually marked by enclosing the pin in a square to be used to identify the other pins.

    Coding

    The two codes for wireless communication are as follows:

    Transmitters’ code:

    /*
    Transmitter coding for the nrf24L01 radio transceiver.
    pins connections
    VCC 3.3
    GND GND
    CE pin9
    CSN pin8
    SKL pin13
    MOSI pin11
    MISO pin12
    */

    //Include Libraries
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    //create an RF24 object
    RF24 radio(9, 8); // CE, CSN
    const byte address[6] = "00001"; //address through which two modules communicate.

    void setup()
    {
    radio.begin();
    //set the address
    radio.openWritingPipe(address);
    //set module as transmitter
    radio.stopListening();
    }
    void loop()
    {
    //Send message to receiver
    const char text[] = "Hello World";
    radio.write(&text, sizeof(text));
    delay(1000);

    Receivers’ code:

    /*
    Transmitter coding for the nrf24L01 radio transceiver.
    Pins connections
    VCC 3.3
    GND GND
    CE pin9
    CSN pin8
    SKL pin13
    MOSI pin11
    MISO pin12
    */
    //Include Libraries
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>

    //create an RF24 object
    RF24 radio(9, 8); // CE, CSN
    //address through which two modules communicate.
    const byte address[6] = "00001";

    void setup()
    {
    while (!Serial);
    Serial.begin(9600);
    radio.begin();
    //set the address
    radio.openReadingPipe(0, address);
    //Set module as receiver
    radio.startListening();
    }

    void loop()
    {
    //Read the data if available in buffer
    if (radio.available())
    {
    char text[32] = {0};
    radio.read(&text, sizeof(text));
    Serial.println(text);
    }
    }

     

    Transmitter Connections:

    Transmitter Connections NRF24L01

    Receiver Connections:

    Receiver connection

    Conclusion

    The NRF24L01 is a great option for wireless communication, with Arduino projects being a cost-effective and reliable choice for the users. It is easy to use and consumer-friendly.

    Frequently Asked Questions

    1. Can I use NRF24L01 without Arduino?

    The NRF24L01 has a complex SPI based interface due to which it is required to have an “Arduino”, or an alternative microcontroller core, to send and receive a message as the particular chip is not a user programmable one.

    Leave a comment

    Please note, comments must be approved before they are published