title: Radiohead library communication
body: <p>I am newbie, please bear me :)</p>
  
  <p>I am following this client server example of RadioHead found in its library,
  <a href="http://www.airspayce.com/mikem/arduino/RadioHead/" rel="nofollow noreferrer">http://www.airspayce.com/mikem/arduino/RadioHead/</a>
   I used Dragino Lora Shield with Arduino Uno and Arduino Mega. I have few questions if someone can help me:</p>
  
  <p>1) I do not see server or client address so how server and clients are sending messages?
  2) We can see code "while (!Serial) ;", Is it sending and receiving data by usb serial, not by wireless radio signals</p>
  
  <p><strong>Server</strong></p>
  
  <pre><code>// rf95_server.pde
  // -*- mode: C++ -*-
  // Example sketch showing how to create a simple messageing server
  // with the RH_RF95 class. RH_RF95 class does not provide for addressing or
  // reliability, so you should only use RH_RF95  if you do not need the higher
  // level messaging abilities.
  // It is designed to work with the other example rf95_client
  // Tested with Anarduino MiniWirelessLoRa, Rocket Scream Mini Ultra Pro with
  // the RFM95W, Adafruit Feather M0 with RFM95
  
  #include &lt;SPI.h&gt;
  #include &lt;RH_RF95.h&gt;
  
  // Singleton instance of the radio driver
  RH_RF95 rf95;
  //RH_RF95 rf95(5, 2); // Rocket Scream Mini Ultra Pro with the RFM95W
  //RH_RF95 rf95(8, 3); // Adafruit Feather M0 with RFM95 
  
  // Need this on Arduino Zero with SerialUSB port (eg RocketScream Mini Ultra Pro)
  //#define Serial SerialUSB
  
  int led = 9;
  
  void setup() 
  {
    // Rocket Scream Mini Ultra Pro with the RFM95W only:
    // Ensure serial flash is not interfering with radio communication on SPI bus
  //  pinMode(4, OUTPUT);
  //  digitalWrite(4, HIGH);
  
    pinMode(led, OUTPUT);     
    Serial.begin(9600);
    while (!Serial) ; // Wait for serial port to be available
    if (!rf95.init())
      Serial.println("init failed");  
    // Defaults after init are 434.0MHz, 13dBm, Bw = 125 kHz, Cr = 4/5, Sf = 128chips/symbol, CRC on
  
    // The default transmitter power is 13dBm, using PA_BOOST.
    // If you are using RFM95/96/97/98 modules which uses the PA_BOOST transmitter pin, then 
    // you can set transmitter powers from 5 to 23 dBm:
  //  driver.setTxPower(23, false);
    // If you are using Modtronix inAir4 or inAir9,or any other module which uses the
    // transmitter RFO pins and not the PA_BOOST pins
    // then you can configure the power transmitter power for -1 to 14 dBm and with useRFO true. 
    // Failure to do that will result in extremely low transmit powers.
  //  driver.setTxPower(14, true);
  }
  
  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, &amp;len))
      {
        digitalWrite(led, HIGH);
  //      RH_RF95::printBuffer("request: ", buf, len);
        Serial.print("got request: ");
        Serial.println((char*)buf);
  //      Serial.print("RSSI: ");
  //      Serial.println(rf95.lastRssi(), DEC);
        
        // Send a reply
        uint8_t data[] = "And hello back to you";
        rf95.send(data, sizeof(data));
        rf95.waitPacketSent();
        Serial.println("Sent a reply");
         digitalWrite(led, LOW);
      }
      else
      {
        Serial.println("recv failed");
      }
    }
  }
  </code></pre>
  
  <p><strong>Client</strong></p>
  
  <pre><code>// rf95_client.pde
  // -*- mode: C++ -*-
  // Example sketch showing how to create a simple messageing client
  // with the RH_RF95 class. RH_RF95 class does not provide for addressing or
  // reliability, so you should only use RH_RF95 if you do not need the higher
  // level messaging abilities.
  // It is designed to work with the other example rf95_server
  // Tested with Anarduino MiniWirelessLoRa, Rocket Scream Mini Ultra Pro with
  // the RFM95W, Adafruit Feather M0 with RFM95
  
  #include &lt;SPI.h&gt;
  #include &lt;RH_RF95.h&gt;
  
  // Singleton instance of the radio driver
  RH_RF95 rf95;
  //RH_RF95 rf95(5, 2); // Rocket Scream Mini Ultra Pro with the RFM95W
  //RH_RF95 rf95(8, 3); // Adafruit Feather M0 with RFM95 
  
  // Need this on Arduino Zero with SerialUSB port (eg RocketScream Mini Ultra Pro)
  //#define Serial SerialUSB
  
  void setup() 
  {
    // Rocket Scream Mini Ultra Pro with the RFM95W only:
    // Ensure serial flash is not interfering with radio communication on SPI bus
  //  pinMode(4, OUTPUT);
  //  digitalWrite(4, HIGH);
  
    Serial.begin(9600);
    while (!Serial) ; // Wait for serial port to be available
    if (!rf95.init())
      Serial.println("init failed");
    // Defaults after init are 434.0MHz, 13dBm, Bw = 125 kHz, Cr = 4/5, Sf = 128chips/symbol, CRC on
  
    // The default transmitter power is 13dBm, using PA_BOOST.
    // If you are using RFM95/96/97/98 modules which uses the PA_BOOST transmitter pin, then 
    // you can set transmitter powers from 5 to 23 dBm:
  //  driver.setTxPower(23, false);
    // If you are using Modtronix inAir4 or inAir9,or any other module which uses the
    // transmitter RFO pins and not the PA_BOOST pins
    // then you can configure the power transmitter power for -1 to 14 dBm and with useRFO true. 
    // Failure to do that will result in extremely low transmit powers.
  //  driver.setTxPower(14, true);
  }
  
  void loop()
  {
    Serial.println("Sending to rf95_server");
    // Send a message to rf95_server
    uint8_t data[] = "Hello World!";
    rf95.send(data, sizeof(data));
    
    rf95.waitPacketSent();
    // Now wait for a reply
    uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
    uint8_t len = sizeof(buf);
  
    if (rf95.waitAvailableTimeout(3000))
    { 
      // Should be a reply message for us now   
      if (rf95.recv(buf, &amp;len))
     {
        Serial.print("got reply: ");
        Serial.println((char*)buf);
  //      Serial.print("RSSI: ");
  //      Serial.println(rf95.lastRssi(), DEC);    
      }
      else
      {
        Serial.println("recv failed");
      }
    }
    else
    {
      Serial.println("No reply, is rf95_server running?");
    }
    delay(400);
  }
  </code></pre>