Muhammad Aqib
Published

nRF24L01 Interfacing with Arduino | Wireless Communication

In the first example, we will send “Hello world” command to blink the LED. In the second example, we will do bidirectional communication.

BeginnerProtip1 hour18,427
nRF24L01 Interfacing with Arduino | Wireless Communication

Things used in this project

Story

Read more

Schematics

Second Example Circuit Diagram

First Example Circuit Diagram

Code

Example 1 Transmitter

Arduino
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    RF24 radio(9, 10); // CE, CSN         
    const byte address[6] = "00001";     //Byte of array representing the address. This is the address where we will send the data. This should be same on the receiving side.
    int button_pin = 2;
    boolean button_state = 0;
    void setup() {
    pinMode(button_pin, INPUT);
    radio.begin();                  //Starting the Wireless communication
    radio.openWritingPipe(address); //Setting the address where we will send the data
    radio.setPALevel(RF24_PA_MIN);  //You can set it as minimum or maximum depending on the distance between the transmitter and receiver.
    radio.stopListening();          //This sets the module as transmitter
    }
    void loop()
    {
    button_state = digitalRead(button_pin);
    if(button_state == HIGH)
    {
    const char text[] = "Your Button State is HIGH";
    radio.write(&text, sizeof(text));                  //Sending the message to receiver
    }
    else
    {
    const char text[] = "Your Button State is LOW";
    radio.write(&text, sizeof(text));                  //Sending the message to receiver 
    }
    radio.write(&button_state, sizeof(button_state));  //Sending the message to receiver 
    delay(1000);
    }

Example 1 Receiver

Arduino
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    RF24 radio(9, 10); // CE, CSN
    const byte address[6] = "00001";
    boolean button_state = 0;
    int led_pin = 3;
    void setup() {
    pinMode(6, OUTPUT);
    Serial.begin(9600);
    radio.begin();
    radio.openReadingPipe(0, address);   //Setting the address at which we will receive the data
    radio.setPALevel(RF24_PA_MIN);       //You can set this as minimum or maximum depending on the distance between the transmitter and receiver.
    radio.startListening();              //This sets the module as receiver
    }
    void loop()
    {
    if (radio.available())              //Looking for the data.
    {
    char text[32] = "";                 //Saving the incoming data
    radio.read(&text, sizeof(text));    //Reading the data
    radio.read(&button_state, sizeof(button_state));    //Reading the data
    if(button_state == HIGH)
    {
    digitalWrite(6, HIGH);
    Serial.println(text);
    }
    else
    {
    digitalWrite(6, LOW);
    Serial.println(text);}
    }
    delay(5);
    }

Example 2 First Arduino

Arduino
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    RF24 radio(9, 10); // CE, CSN
    const byte addresses [][6] = {"00001", "00002"};  //Setting the two addresses. One for transmitting and one for receiving
    int button_pin = 2;
    int led_pin = 3;
    boolean button_state = 0;
    boolean button_state1 = 0;
    void setup() {
      pinMode(button_pin, INPUT);
      pinMode(led_pin, OUTPUT);
      radio.begin();                           //Starting the radio communication
      radio.openWritingPipe(addresses[1]);     //Setting the address at which we will send the data
      radio.openReadingPipe(1, addresses[0]);  //Setting the address at which we will receive the data
      radio.setPALevel(RF24_PA_MIN); //You can set it as minimum or maximum depending on the distance between the transmitter and receiver. 
    }
    void loop() 
    {  
      delay(5);
      radio.stopListening();                             //This sets the module as transmitter
      button_state = digitalRead(button_pin);
      radio.write(&button_state, sizeof(button_state));  //Sending the data
      delay(5);
      
      radio.startListening();                            //This sets the module as receiver
      while(!radio.available());                         //Looking for incoming data
      radio.read(&button_state1, sizeof(button_state1)); //Reading the data
      if (button_state1 == HIGH)
      {
        digitalWrite(led_pin, HIGH);
      }
      else
      {
        digitalWrite(led_pin, LOW);
      }
    }

Example 2 Second Arduino

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

RF24 radio(9, 10); // CE, CSN
const byte addresses [][6] = {"00001", "00002"};    //Setting the two addresses. One for transmitting and one for receiving
int button_pin = 2;

boolean button_state = 0;
boolean button_state1 = 0;
int led_pin = 3;

void setup() {
  pinMode(led_pin, OUTPUT);
  Serial.begin(9600);
  radio.begin();                            //Starting the radio communication
  radio.openWritingPipe(addresses[0]);      //Setting the address at which we will send the data
  radio.openReadingPipe(1, addresses[1]);   //Setting the address at which we will receive the data
  radio.setPALevel(RF24_PA_MIN);            //You can set it as minimum or maximum depending on the distance between the transmitter and receiver.
}

void loop() 
{
  delay(5);
  radio.startListening();                    //This sets the module as receiver
  if (radio.available())                     //Looking for incoming data
  {
    radio.read(&button_state, sizeof(button_state));
    if(button_state == HIGH)
  {
     digitalWrite(led_pin, HIGH);
  }
  else
  {
     digitalWrite(led_pin, LOW);
  }
  delay(5);
  
  radio.stopListening();                           //This sets the module as transmitter
  button_state1 = digitalRead(button_pin);
  radio.write(&button_state1, sizeof(button_state1));   //Sending the data
  }
}

NRF24l01 Library

Credits

Muhammad Aqib

Muhammad Aqib

16 projects • 79 followers
Hire me at www.freelancer.pk/u/Muhammadaqibdutt. Use my referral link (www.freelancer.pk/get/Muhammadaqibdutt?f=give) and get $20.

Comments