FEATHER-32U4-LORA-LoRa-Radio

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

Utiliser le module LoRa Radio

Avant de commencer assurez-vous que vous avez votre Feather fonctionne sans problème, cela cette partie beaucoup plus facile. Une fois que vous avez la fonctionnalité Feather de base qui fonctionne vous pouvez télécharger le code, "Blink" , utilisez la sortie série, etc, vous pouvez ensuite passer à l'utilisation de la radio.

Notez que la radio sub-GHz n'est pas conçue pour le streaming audio ou vidéo!

Il est préférable d'utiliser de petits paquets de données. Le débit de données est ajustable mais le maximum atteignable est environ 19,2 Kbps (bits par seconde). Des débits de données plus faibles seront plus efficaces dans leurs transmissions.

Vous aurez, bien sûr, besoin d'au moins deux cartes possédant la même fréquence radio pour faire des tests! Les radios doivent être assortis en fréquence (par exemple 900 MHz et 900 MHz c'est ok, 900 MHz et 433 MHz ne fonctionnera pas). Ils doivent également utiliser les mêmes schémas d'encodage, vous ne pouvez pas faire communiquer un 900 MHz RFM69 talkie radio et un 900 MHz RFM96 LoRa radio.

Bibliothèque Arduino

Ces radios ont vraiment un excellent code déjà écrit, donc plutôt que de venir avec une nouvelle norme, nous vous suggérons d'utiliser les bibliothèques existantes comme AirSpayce Radiohead Library qui supporte également un grand nombre d'autres radios Il s'agit d'une véritable bibliothèque Arduino, alors merci de les remercier pour leurs efforts!

La bibliothèque RadioHead RFM9x

Pour commencer à utiliser la radio, vous devrez 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

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.

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)   Placez le dossier de bibliothèque RadioHead votre arduinoIDE / libraries / folder. 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

Exemple de base RX & TX

Permet d'obtenir une démo de base où un Feather LoRa transmet et l'autre reçoit.

Exemple de code d'émetteur

Nous commencerons par configurer l'émetteur

Ce code enverra un petit paquet de données une fois par seconde à l'adresse de noeud #1

Chargez ce code dans votre transmetteur Arduino/Feather!

// Feather9x_TX
// -*- mode: C++ -*-
// Example sketch showing how to create a simple messaging client (transmitter)
// 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_RX

#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);

void setup() 
{
  pinMode(RFM95_RST, OUTPUT);
  digitalWrite(RFM95_RST, HIGH);

  while (!Serial);
  Serial.begin(9600);
  delay(100);

  Serial.println("Feather LoRa TX 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);
}

int16_t packetnum = 0;  // packet counter, we increment per xmission

void loop()
{
  Serial.println("Sending to rf95_server");
  // 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();
  // Now wait for a reply
  uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
  uint8_t len = sizeof(buf);

  Serial.println("Waiting for reply..."); delay(10);
  if (rf95.waitAvailableTimeout(1000))
  { 
    // 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("Receive failed");
    }
  }
  else
  {
    Serial.println("No reply, is there a listener around?");
  }
  delay(1000);
}