[TUTORIEL] Breakout RFM95

Le forum de support des breakout de Snootlab

[TUTORIEL] Breakout RFM95

Message non lude Florian » Ven 9 Juin 2017 10:28

Bonjour,

Aujourd'hui nous allons manipuler le Breakout RFM95 (prochainement en boutique).
Breakout_RFM9x.png
Breakout_RFM9x.png (81.46 Kio) Vu 319 fois

A l'image du Breakout RFM22, le Breakout RFM95 va vous permettre d'inclure de l'objet connecté dans vos projets. A la différence que le module RFM95 qui équipe la breakout éponyme peut vous permettre de faire de la communication LoRa.
Étant donnée que le Breakout RFM95 fonctionne de la même façon que le Breakout RFM22 (avec l'usage LoRa ajouté) nous allons simplement reprendre le tutoriel de ce dernier dans un premier temps. Un tutoriel pour un usage avec la technologie LoRa suivra prochainement.
=================================================================================================
DOCUMENTATIONS UTILES:

Bibliothèque:

La bibliothèque utilisée pour faire fonctionner le Breakout RFM95 est la bibliothèque RadioHead.

La datasheet du module RFM95:


Tutoriels employant le module RFM95:


Tutoriels employant d'autres modules RFM:


Produits similaires:

================================================================================================
- MATÉRIEL:
================================================================================================
- BRANCHEMENTS:
BreakoutRFM95.PNG
BreakoutRFM95.PNG (73.77 Kio) Vu 319 fois

Alimentation du montage:
Le module RFM95 est un module fonctionnant sous une alimentation de 3.3V.

Nous avons besoin de mettre en place des ponts diviseurs de tension pour la broche qui va servir de Clock, celle qui va servir de Chip Select et celle qui va servir de MOSI. Ces dernières sont respectivement les pins 13, 11 et 10 de l'arduino Uno. Il faut donc placer un pont diviseur entre ces dernières et leurs homologues du module RFM95. Ainsi le protocole de communication SPI pourra se dérouler correctement. Le schéma du montage montre comment disposer les résistances pour créer un pont diviseur de tension. Pour passer de 5 à 3.3V, il faut utiliser des résistances de 3.3KOhms et de 1.8KOhms.

Branchements:

  • Du Breakout RFM95 à la carte arduino Uno:
    • La broche 3.3V à la broche 3.3V.
    • Le GND au GND.
    • La broche MISO[blanc] à la broche D12[blanc].
    • La broche DIO0 à la broche D2.
  • De la carte arduino Uno à la breadboard (pont diviseur):
    • Le GND au GND de chaque pont diviseur (soit à une patte de chaque résistance de valeur 3.3kOhms).
    • La broche D10 à une patte d'une résistance de valeur 1.8kOhms.
    • La broche D11 à une patte d'une résistance de valeur 1.8kOhms.
    • La broche D13 à une patte d'une résistance de valeur 1.8kOhms.
  • De la breadboard (pont diviseur) au Breakout RFM95:
    • Du nœud des résistances 1.8kOhms et 3.3kOhms à la broche MOSI.
    • Du nœud des résistances 1.8kOhms et 3.3kOhms à la broche SCK.
    • Du nœud des résistances 1.8kOhms et 3.3kOhms à la broche NSS.
Voilà pour les explications de la partie Hardware.
================================================================================================
- MANIPULATION:

Pour réaliser ce tutoriel, il faut deux sketchs. Le premier qui envoie une donnée en continue et peut afficher une donnée sur le moniteur série dès qu'il en reçoit une. Et le deuxième qui affiche la donnée qu'il reçoit sur le moniteur série puis qui envoie une nouvelle donnée à son tour, seulement et seulement si il en a reçu une avant.

- CODE:
Sketch de transmission:
Code: Tout sélectionner
/* Skecth Ping-Pong */

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

RH_RF95 rf95;    // Définition de la commande.

uint8_t data[] = "PING";    // Donnée qui va être émise.

uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];    // Variables qui vont permettre de
uint8_t len = sizeof(buf);               // décrypter les données reçues.

void setup()
{
  Serial.begin(9600);
  Serial.println("Sketch PING.");
     
  if (!rf95.init())    // Vérification que le modem soit correctement initialisé.
  {
    Serial.println("Echec de l'initialisation modem!");
  }
  else
  {
    Serial.println("Succes de l'initialisation modem!");
  }

  rf95.setTxPower(20);  // Puissance de transmission.
}

void loop()
{
  rf95.send(data, sizeof(data));    // Envoi de la donnée(PING).

  if (rf95.waitAvailableTimeout(500))    // Timeout.
  {   
    if (rf95.recv(buf, &len))    // Réception d'une donnée(PONG).
    {
      Serial.println((char*)buf);    // Affichage de la donnée reçue.
    }
  }
  delay(400);
}

Sketch de réception:
Code: Tout sélectionner
/* Skecth Ping-Pong */

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

RH_RF95 rf95;    // Définition de la commande.

uint8_t data[] = "PONG";    // Donnée qui va être émise.

uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];    // Variables qui vont permettre de
uint8_t len = sizeof(buf);               // décrypter les données reçues.

void setup()
{
  Serial.begin(9600);
  Serial.println("Sketch PONG.");
     
  if (!rf95.init())    // Vérification que le modem soit correctement initialisé.
  {
    Serial.println("Echec de l'initialisation modem!");
  }
  else
  {
    Serial.println("Succes de l'initialisation modem!");
  }

  rf95.setTxPower(20);  // Puissance de transmission.
}

void loop()
{
  if (rf95.recv(buf, &len))    // Réception d'une donnée(PING).
  {
    Serial.println((char*)buf);    // Affichage de la donnée reçue.
       
    rf95.send(data, sizeof(data));    // Envoi de la donnée(PONG).
  }
}

Une fois les sketchs uploadés dans les Arduino Uno, le moniteur série devrait afficher ce qui suit:
Pour le sketch de transmission:
Transmission.png
Transmission.png (26.03 Kio) Vu 319 fois

Pour le sketch de réception:
Réception.png
Réception.png (25.01 Kio) Vu 319 fois

Dans ce tutoriel, nous avons réalisé l'effet PING-PONG qui est la première prise en main pour nos produits équipés d'un module RFM. Étant donnée les similitudes, je vous conseille de regarder le tutoriel "Breakout RFM22. Envoi Température" pour voir comment envoyer une donnée variable dans le temps.
Florian
 
Messages: 75
Inscription: Mer 24 Juil 2013 17:36

Retourner vers Breakout de Snootlab

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron