Showing posts with label RFM95. Show all posts
Showing posts with label RFM95. Show all posts

Saturday, September 21, 2019

Rfm95 with arduino uno working with serial communication

Rfm95 with arduino uno working with serial communication:

connection with arduino uno

ARDUINO UNO
RFM 95
Gnd
Gnd
3.3v
3.3v
D5
reset
D2
DIO 0
D3
DIO1
D13(SCK)
SCK
D12(MISO)
MISO
D11(MOSI)
MOSI
D10(SS)
NSS



NOTE:
LEVEL SHIFTER FOR BETTER OUTPUT

sender side code:
#include <SPI.h>

#include <RH_RF95.h>

RH_RF95 rf95;
int led = 9;

void setup() 
{
  pinMode(led, OUTPUT);     
  Serial.begin(9600);
  while (!Serial) ; // Wait for serial port to be available
  if (!rf95.init())
    Serial.println("init failed");  
}

void loop()
{
  if (rf95.available())
  {// Should be a message for us now   
    uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
    uint8_t len = sizeof(buf);
    if (rf95.recv(buf, &len))
    {
      digitalWrite(led, HIGH);
     // RH_RF95::printBuffer("request: ", buf, len);
      Serial.print("got request: ");
      Serial.println((char*)buf);
      sender_fn();
    }
    else
    {
      Serial.println("recv failed");
    }
  }
  delay(100);
}

void sender_fn()
{
  /***************************************/
      // Send a reply
  /***************************************/
    char data[32]="";
   int availableBytes = Serial.available();
    if(availableBytes>0)
   {
       for(int i=0; i<availableBytes; i++)
       {     
           data[i]=Serial.read();
       } 
          rf95.send(data, sizeof(data));
          rf95.waitPacketSent();
           Serial.print("Sent::");
           Serial.print(data);
           digitalWrite(led, LOW);
        
   }
  }



Receiver side code:


// rf95_client.pde

#include <SPI.h>
#include <RH_RF95.h>

int led = 9;
RH_RF95 rf95;
void setup()
{
  pinMode(led, OUTPUT); 
  Serial.begin(9600);
  while (!Serial) ; // Wait for serial port to be available
  if (!rf95.init())
    Serial.println("init failed");
}

void loop()
{
  rfm95_uart();
}

void rfm95_uart()
{
   uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
     uint8_t len = sizeof(buf);
      if (rf95.waitAvailableTimeout(3000))
      {
         //Serial.print(rf95.recv(buf, &len));
           if (rf95.recv(buf, &len)>0)
           {
             Serial.print("got reply: ");
            Serial.println((char*)buf); 
          }
 
          else
          {
             Serial.println("recv failed");
          }
        }
        else
        {
          rfm95_uart_sndr();
            //Serial.println(".");
            //Serial.println("No reply, is rf95_server running?");
       }
  delay(10);
}

void rfm95_uart_sndr()
{
   //Serial.println("Sending to rf95_server::");
   char data[32]="";
   int availableBytes = Serial.available();
    //Serial.print(availableBytes);
   if(availableBytes>0)
   {
       for(int i=0; i<availableBytes; i++)
       {   
           data[i]=Serial.read();
       }
          rf95.send(data, sizeof(data));
          rf95.waitPacketSent();
           Serial.print("Sent::");
           Serial.print(data);
           digitalWrite(led, LOW);
   }

}

output :



for the code download the below link:

https://drive.google.com/file/d/1Hx0noPMxfg8zQdcvZqobS8y8dE7NbxSX/view?usp=sharing

python class topic video