Modifications

Sauter à la navigation Sauter à la recherche
11 627 octets ajoutés ,  21 novembre 2016 à 14:41
aucun résumé de modification
Ligne 1 : Ligne 1 : −
{{traduction}}
  −
   
{{ADFImage|FEATHER-32U4LORA-45.jpg|640px}}
 
{{ADFImage|FEATHER-32U4LORA-45.jpg|640px}}
   Ligne 26 : Ligne 24 :  
== La bibliothèque RadioHead RFM9x ==
 
== La bibliothèque RadioHead RFM9x ==
   −
Pour commencer à utiliser la radio, vous devrez télécharger la bibliothèque RadioHead.  
+
Pour commencer à utiliser la radio, vous devrez [http://www.airspayce.com/mikem/arduino/RadioHead/ télécharger la bibliothèque RadioHead].  
Vous pouvez le faire en visitant le repo de github et en téléchargeant manuellement ou, plus simplement, cliquez simplement '''ici pour télécharger le zip correspondant à la version 1.62'''
+
Vous pouvez le faire en visitant le repo de github et en téléchargeant manuellement ou, plus simplement, cliquez simplement [https://cdn-learn.adafruit.com/assets/assets/000/035/106/original/RadioHead-1.62.zip?1472068723 '''ici pour télécharger le zip correspondant à la version 1.62''']
   −
Notez que tout le code dans les exemples ci-dessous est basé sur cette version, vous pouvez visiter la page de documentation de RadioHead pour obtenir la version la plus récente qui peut avoir des corrections de bugs ou plus de fonctionnalités.
+
Notez que tout le code dans les exemples ci-dessous est basé sur cette version, vous pouvez visiter [http://www.airspayce.com/mikem/arduino/RadioHead/ la page de documentation de RadioHead pour obtenir la version la plus récente qui peut avoir des corrections de bugs ou plus de fonctionnalités.]
    
Décompresser le zip et trouver le dossier nommé RadioHead et vérifier que le dossier RadioHead contient RH_RF95.cpp et RH_RF95.h (ainsi que quelques dizaines d'autres fichiers pour les radios qui sont pris en charge)
 
Décompresser le zip et trouver le dossier nommé RadioHead et vérifier que le dossier RadioHead contient RH_RF95.cpp et RH_RF95.h (ainsi que quelques dizaines d'autres fichiers pour les radios qui sont pris en charge)
Ligne 36 : Ligne 34 :  
Vous devrez peut-être créer le sous-dossier des bibliothèques si c'est votre première bibliothèque. Redémarrez l'IDE pour que cela soit pris en compte.
 
Vous devrez peut-être créer le sous-dossier des bibliothèques si c'est votre première bibliothèque. Redémarrez l'IDE pour que cela soit pris en compte.
   −
Nous avons également un excellent didacticiel sur l'installation de la bibliothèque Arduino à: '''LIEN VERS TUTO'''
+
Nous avons également un excellent didacticiel sur l'installation de la bibliothèque Arduino à: [https://wiki.mchobby.be/index.php?title=Installation_d%27un_librairie_Arduino '''en suivant ce tutoriel''']
    
== Exemple de base RX & TX ==
 
== Exemple de base RX & TX ==
Ligne 202 : Ligne 200 :     
{{ADFImage|FEATHER-32U4LORA-46.png|640px}}
 
{{ADFImage|FEATHER-32U4LORA-46.png|640px}}
 +
 +
Ouvrez maintenant une autre instance de l'IDE Arduino - c'est pour que vous puissiez voir la sortie de la console série de la du Feather TX pendant que vous configurez le Feather RX.
 +
 +
== Exemple de code récepteur ==
 +
 +
Ce code recevra et accusera réception d'un petit paquet de données.
 +
Chargez ce code dans votre Receiver Arduino / Feather!
 +
 +
{{tmbox text=Assurez-vous que le #define RF95_FREQ 915.0 corresponde bien à la fréquence de votre émetteur Feather!}}
 +
 +
{{ambox text=Décommenter / commenter les sections définissant les broches pour Feather 32u4, Feather M0, etc selon le chipset et le câblage que vous utilisez! Les broches utilisées varieront en fonction de votre configuration!}}
 +
 +
<syntaxhighlight lang="python">
 +
// Feather9x_RX
 +
// -*- mode: C++ -*-
 +
// Example sketch showing how to create a simple messaging client (receiver)
 +
// 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 Feather9x_TX
 +
 +
#include <SPI.h>
 +
#include <RH_RF95.h>
 +
 +
/* for feather32u4 */
 +
#define RFM95_CS 8
 +
#define RFM95_RST 4
 +
#define RFM95_INT 7
 +
 +
/* for feather m0 
 +
#define RFM95_CS 8
 +
#define RFM95_RST 4
 +
#define RFM95_INT 3
 +
*/
 +
 +
/* for shield
 +
#define RFM95_CS 10
 +
#define RFM95_RST 9
 +
#define RFM95_INT 7
 +
*/
 +
 +
 +
/* for ESP w/featherwing
 +
#define RFM95_CS  2    // "E"
 +
#define RFM95_RST 16  // "D"
 +
#define RFM95_INT 15  // "B"
 +
*/
 +
 +
/* Feather 32u4 w/wing
 +
#define RFM95_RST    11  // "A"
 +
#define RFM95_CS      10  // "B"
 +
#define RFM95_INT    2    // "SDA" (only SDA/SCL/RX/TX have IRQ!)
 +
*/
 +
 +
/* Feather m0 w/wing
 +
#define RFM95_RST    11  // "A"
 +
#define RFM95_CS      10  // "B"
 +
#define RFM95_INT    6    // "D"
 +
*/
 +
 +
/* Teensy 3.x w/wing
 +
#define RFM95_RST    9  // "A"
 +
#define RFM95_CS      10  // "B"
 +
#define RFM95_INT    4    // "C"
 +
*/
 +
 +
// Change to 434.0 or other frequency, must match RX's freq!
 +
#define RF95_FREQ 915.0
 +
 +
// Singleton instance of the radio driver
 +
RH_RF95 rf95(RFM95_CS, RFM95_INT);
 +
 +
// Blinky on receipt
 +
#define LED 13
 +
 +
void setup()
 +
{
 +
  pinMode(LED, OUTPUT);   
 +
  pinMode(RFM95_RST, OUTPUT);
 +
  digitalWrite(RFM95_RST, HIGH);
 +
 +
  while (!Serial);
 +
  Serial.begin(9600);
 +
  delay(100);
 +
 +
  Serial.println("Feather LoRa RX Test!");
 +
 
 +
  // manual reset
 +
  digitalWrite(RFM95_RST, LOW);
 +
  delay(10);
 +
  digitalWrite(RFM95_RST, HIGH);
 +
  delay(10);
 +
 +
  while (!rf95.init()) {
 +
    Serial.println("LoRa radio init failed");
 +
    while (1);
 +
  }
 +
  Serial.println("LoRa radio init OK!");
 +
 +
  // Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250, +13dbM
 +
  if (!rf95.setFrequency(RF95_FREQ)) {
 +
    Serial.println("setFrequency failed");
 +
    while (1);
 +
  }
 +
  Serial.print("Set Freq to: "); Serial.println(RF95_FREQ);
 +
 +
  // 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:
 +
  rf95.setTxPower(23, false);
 +
}
 +
 +
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("Received: ", buf, len);
 +
      Serial.print("Got: ");
 +
      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("Receive failed");
 +
    }
 +
  }
 +
}
 +
</syntaxhighlight>
 +
 +
Maintenant ouvrez la console série sur le récepteur, tout en vérifiant également sur la console série de l'émetteur. Vous devriez voir le récepteur est ... eh bien, la réception des paquets !
 +
 +
{{ADFImage|FEATHER-32U4LORA-47.png|640px}}
 +
 +
Vous pouvez voir que l'exemple de bibliothèque affiche les octets hexadécimaux reçus, '''48 65 6C 6C 6F 20 57 6F 72 6C 64 20 23 30 0 20 20 20 20 0''' ainsi que la chaîne ""Hello World"" en ASCII.
 +
 +
Ensuite, il enverra une réponse à l'emetteur.
 +
 +
L'émetteur reçoit donc la réponse et l'affiche ""And hello back to you"" quand il reçoit celle-ci.
 +
 +
La séquence se répète jusqu'à ce que vous l'interrompiez.
 +
 +
Jetons un coup d'oeil aux exemples afin que vous sachiez comment s'adapter à votre propre configuration de la radio
 +
 +
=== Configuration des Pin de la radio LoRa ===
 +
 +
Ceci est la configuration de brochage pour tous les Feather 32u4 RFM9X's:
 +
 +
<syntaxhighlight lang="python">
 +
/* for feather32u4 */
 +
#define RFM95_CS 8
 +
#define RFM95_RST 4
 +
#define RFM95_INT 7
 +
</syntaxhighlight>
 +
 +
Ceci est la configuration de brochage pour tous les Feather M0 RFM9X's:
 +
 +
<syntaxhighlight lang="python">
 +
/* for feather m0 */
 +
#define RFM95_CS 8
 +
#define RFM95_RST 4
 +
#define RFM95_INT 3
 +
</syntaxhighlight>
 +
 +
=== La fréquence ===
 +
Vous pouvez éditer la fréquence sur laquelle la radio doit communiquer, par exemple 915.0, 434.0 ou 868.0 ou n'importe quel nombre.
 +
Différents pays / zones de l'UIT ont des bandes ISM différentes, donc assurez-vous d'utiliser une fréquence autorisée dans votre zone géographique / pays.
 +
 +
<syntaxhighlight lang="python">
 +
// Change to 434.0 or other frequency, must match RX's freq!
 +
#define RF95_FREQ 915.0
 +
</syntaxhighlight>
 +
 +
Vous pouvez ensuite instancier l'objet radio avec nos numéros de broches personnalisés.
 +
 +
<syntaxhighlight lang="python">
 +
// Singleton instance of the radio driver
 +
RH_RF95 rf95(RFM95_CS, RFM95_INT);
 +
</syntaxhighlight>
 +
 +
=== Installation ===
 +
 +
Nous commençons par configurer la console série et réinitialiser la radio.
 +
 +
<syntaxhighlight lang="python">
 +
void setup()
 +
{
 +
  pinMode(LED, OUTPUT);   
 +
  pinMode(RFM95_RST, OUTPUT);
 +
  digitalWrite(RFM95_RST, HIGH);
 +
 +
  while (!Serial); // wait until serial console is open, remove if not tethered to computer
 +
  Serial.begin(9600);
 +
  delay(100);
 +
  Serial.println("Feather LoRa RX Test!");
 +
 
 +
  // manual reset
 +
  digitalWrite(RFM95_RST, LOW);
 +
  delay(10);
 +
  digitalWrite(RFM95_RST, HIGH);
 +
  delay(10);
 +
</syntaxhighlight>
 +
 +
Supprimez la ligne '''while (!Serial);'''  si vous n'êtes pas relié à un ordinateur, car sinon le Feather attendra une connexion à l'ordinateur pour continuer à exécuter le programme !
 +
 +
=== Initiation à la radio ===
 +
 +
La bibliothèque est initialisée avec un appel à init().
 +
Une fois initialisée, vous pouvez régler la fréquence d'émission/réception de la puce radio.
 +
Vous pouvez également configurer le niveau de puissance de sortie, le nombre va de 5 à 23.
 +
Commencez par le niveau de puissance le plus élevé (23), puis réduisez-le au besoin (afin d'économiser de l'énergie dans votre projet ;)
 +
 +
<syntaxhighlight lang="python">
 +
  while (!rf95.init()) {
 +
    Serial.println("LoRa radio init failed");
 +
    while (1);
 +
  }
 +
  Serial.println("LoRa radio init OK!");
 +
 +
  // Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250, +13dbM
 +
  if (!rf95.setFrequency(RF95_FREQ)) {
 +
    Serial.println("setFrequency failed");
 +
    while (1);
 +
  }
 +
  Serial.print("Set Freq to: "); Serial.println(RF95_FREQ);
 +
 +
  // 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:
 +
  rf95.setTxPower(23, false);
 +
</syntaxhighlight>
 +
 +
== Code de l'émetteur ==
 +
 +
Si vous utilisez l'émetteur, ce code attendra 1 seconde, puis transmettra un paquet avec "Hello World #" et un numéro de paquet incrémenté à chaque envoi.
 +
 +
<syntaxhighlight lang="python">
 +
void loop()
 +
{
 +
  delay(1000); // Wait 1 second between transmits, could also 'sleep' here!
 +
  Serial.println("Transmitting..."); // Send a message to rf95_server
 +
 
 +
  char radiopacket[20] = "Hello World #      ";
 +
  itoa(packetnum++, radiopacket+13, 10);
 +
  Serial.print("Sending "); Serial.println(radiopacket);
 +
  radiopacket[19] = 0;
 +
 
 +
  Serial.println("Sending..."); delay(10);
 +
  rf95.send((uint8_t *)radiopacket, 20);
 +
 +
  Serial.println("Waiting for packet to complete..."); delay(10);
 +
  rf95.waitPacketSent();
 +
</syntaxhighlight>
 +
 +
c'est assez simple, le ""delay"" fixe un temps d'attente. (vous pouvez remplacer celui avec un script de mise en veille de faible puissance).
 +
 +
Ensuite, il génère le paquet et ajoute un nombre qui augmente à chaque transmission (TX).
 +
Ensuite, il appelle simplement la fonction '''send()''' pour transmettre les données, et passe en paramètre le tableau de données et la longueur des données.
 +
Notez qu'il ne fait aucun adressage ou sous-réseau - si vous voulez vous assurer que le paquet va à une radio particulière, vous devrez peut-être ajouter un identifiant / adresse octet dans le message !
 +
Ensuite, vous appelez waitPacketSent() pour attendre que la transmission radio soit terminée.
 +
Vous ne recevrez pas un accusé de réception automatique, à partir de l'autre radio, à moins qu'il ne sache renvoyer un paquet. C'est un peu comme le protocole 'UDP' en réseau- les données sont envoyées, mais ce n'est pas certain qu'il a été reçu! En outre, il n'y aura pas de nouvelles tentatives automatiques en cas d'échec sauf si vous prévoyez une fonction dédiée qui attendra une réponse avec un timeout pour un nouvel envoi si celle-ci n'est pas reçue dans un temps imparti.
 +
 +
=== Code du récepteur ===
 +
 +
Le Récepteur a le même code de configuration, mais la boucle est différente:
 +
 +
<syntaxhighlight lang="python">
 +
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("Received: ", buf, len);
 +
      Serial.print("Got: ");
 +
      Serial.println((char*)buf);
 +
      Serial.print("RSSI: ");
 +
      Serial.println(rf95.lastRssi(), DEC);
 +
</syntaxhighlight>
 +
 +
Au lieu d'émettre, il vérifie constamment s'il ya des paquets de données qui ont été reçus.
 +
available() renvoie true si un paquet avec correction d'erreur correcte a été reçu.
 +
Si c'est le cas, le récepteur l'affiche en hexadécimal et aussi comme une 'chaîne de caractères'  (dans la console série).
 +
Il affiche également le RSSI qui est l'indicateur de puissance du signal du récepteur.
 +
Ce nombre sera compris entre environ -15 et environ -100.
 +
Plus le nombre est bas, (-15 étant le plus élevé que vous verrez probablement) plus le signal est fort. (ce chiffre représente en fait le taux d'atténuation du signal par une valeur numérique)
 +
Une fois terminé, il répondra automatiquement, ce qui est un moyen pour les radios de savoir qu'il y avait un accusé de réception.
 +
 +
<syntaxhighlight lang="python">
 +
// Send a reply
 +
      uint8_t data[] = "And hello back to you";
 +
      rf95.send(data, sizeof(data));
 +
      rf95.waitPacketSent();
 +
      Serial.println("Sent a reply");
 +
</syntaxhighlight>
 +
 +
Il renvoie simplement une chaîne et attend jusqu'à ce que la réponse soit complètement envoyée.
    
{{FEATHER-32U4LORA-TRAILER}}
 
{{FEATHER-32U4LORA-TRAILER}}
704

modifications

Menu de navigation