2017-10-16 6 views
0

Je suis novice, s'il vous plaît me porter :)communication bibliothèque Radiohead

Je suivais cet exemple de serveur client de Radiohead trouvé dans sa bibliothèque, http://www.airspayce.com/mikem/arduino/RadioHead/ J'ai utilisé Dragino Lora Shield avec Arduino Uno et Mega Arduino. J'ai quelques questions si quelqu'un peut m'aider:

1) Je ne vois pas d'adresse de serveur ou de client ainsi comment le serveur et les clients envoient des messages? 2) On peut voir le code "while (série)", est-il d'envoyer et recevoir des données par USB série, non pas par des signaux radio sans fil

Server

// 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 <SPI.h> 
#include <RH_RF95.h> 

// 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, &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"); 
   } 
 } 
} 

clients

// 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 <SPI.h> 
#include <RH_RF95.h> 

// 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, &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); 
} 
+0

ne peut pas répondre à toutes vos questions, mais par les regards de celui-ci le code utilise la configuration de la fréquence par défaut et le détail de la communication: '434.0MHz, 13dBm, Bw = 125 kHz, Cr = 4/5, Sf = 128chips/symbole' dans un schéma de communication simple maître/esclave, vous n'avez pas * besoin * d'une adresse en soi, et les périphériques plus ou moins juste à tour de rôle "parler" –

+0

en outre, 'if (! Rf95.init ()) 'venant après' while (! Serial) 'suggère que' rf95.init() 'se connecte au Serial d'Arduino en quelque sorte. je suppose que les ports série USB sont coupés et pris en charge par l'électronique radio, ou que l'électronique radio reflète l'entrée/sortie des ports série. (IE ils peuvent être parallèles) –

+0

Cela signifierait aussi que vos appels 'Serial.println' déversent des déchets sur la radio, perturbant éventuellement votre protocole de communication. –

Répondre

1

1) Je ne vois pas l'adresse du serveur ou du client, alors comment le serveur et les clients envoient-ils des messages?

  1. Lora est un protocole radio que tout récepteur est capable de décoder (tant qu'ils ont la puce Semtech ou équivalent). Comme recevoir la radio FM - tout ce dont vous avez besoin est une antenne et la volonté de le faire. :)

    LoraWAN est une spécification de réseau avec une transmission Lora comme couche physique . Lorawan spécifie les installations pour le chiffrement de bout en bout de paquets, dispositif d'adressage, la protection replay attaque, gestion de la congestion, le canal de saut, le provisionnement d'application, etc.

2) Nous pouvons voir le code " while (série!) », est-il d'envoyer et recevoir des données par USB série, non pas par des signaux radio sans fil

  1. Les bibliothèques radiohead n'interagissent pas avec de série ou rediriger de quelque manière que.

    while (!Serial); est un idiome Arduino standard. La classe Serial implémente une méthode operator bool() de sorte que (bool)Serial évalue à true lorsqu'il est prêt à l'emploi. Ainsi, while (!Serial); est une boucle serrée qui attend que le port série soit prêt.