[TUTORIEL] Utilisation RFM22 du TeensyWino

Forum de support et échanges sur les produits WiNo (TeensyWino en particulier)

[TUTORIEL] Utilisation RFM22 du TeensyWino

Message non lude Florian » Lun 5 Juin 2017 14:32

Bonjour,

Aujourd'hui nous allons voir comment mettre en route le transceiver RFM22 du TeensyWino.
teensywino.jpg
teensywino.jpg (34.37 Kio) Vu 372 fois

Comme son nom l'indique, le TeensyWino est un shield pour les cartes Teensy. Ce shield est muni de plusieurs capteurs comme un capteur de lumière, un gyroscope, un baromètre ou encore l'incontournable capteur de température et j'en passe.
Le TeensyWino est également équipé d'un module bidirectionnel (434MHz), le RFM22. Cette carte permet de faire de l'objet connecté. Il est ainsi possible de créer un réseau maillé avec plusieurs de ces cartes.

Dans ce tuto, nous allons voir comment échanger une donnée entre deux TeensyWino. Pour faire simple nous allons faire le désormais classique effet PING-PONG.
C'est à dire, l'un des TeensyWino enverra la donnée "PING" et l'autre TeensyWino enverra la donnée "PONG" à la réception de la donnée "PING".
=================================================================================================
DOCUMENTATIONS UTILES:

Bibliothèque:

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

La datasheet du module RFM22B:


Tutoriels employant le module RFM22B:


Tutoriels employant d'autres modules RFM:


Produits similaires:

=================================================================================================
- MATÉRIEL:
=================================================================================================
- BRANCHEMENTS:
Rien de plus simple, il suffit simplement d'empiler la carte TeensyWino sur la carte Teensy et de penser à connecter l'antenne.

=================================================================================================
- MANIPULATION:
Nous allons programmer les TeensyWino depuis l'IDE Arduino. Pour cela, il faut d'abord que la carte Teensy soit reconnu par le logiciel dans le choix des boards.
Il va falloir réaliser une petite installation pour y arriver. Je vous conseille de suivre le très bon tutoriel d'OpenClassRoom à ce sujet.
Une fois les cartes reconnues par votre IDE Arduino, il ne reste plus qu'à les programmer.
_______________________________________________________________________________________________________________
- CODE:
Sketch de transmission:
Code: Tout sélectionner
    /* Skecth Ping-Pong */

    #include <SPI.h>
    #include <RH_RF22.h>

    RH_RF22 rf22;    // Définition de la commande.

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

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

    void setup()
    {
       pinMode(5, OUTPUT);   // Configure la broche 5 en sortie (couleur verte de la led RGB).
       pinMode(6, OUTPUT);   // Configure la broche 6 en sortie (couleur bleue de la led RGB).
       pinMode(23, OUTPUT);  // Configure la broche 23 en sortie (couleur rouge de la led RGB).
     
      Serial.begin(9600);
      Serial.println("Sketch PING.");

      RH_RF22 rf22(SS,9);   // Affecte le SlaveSelect à la broche 9.
      SPI.setSCK(14);       // Affecte la clock à la broche 14.
     
      if (!rf22.init())    // Vérification que le modem soit correctement initialisé.
      {
        Serial.println("Echec de l'initialisation modem!");
        analogWrite(23, 8); // Place la broche 23 à 100% de sa capacité.
      }
      else
      {
        Serial.println("Succes de l'initialisation modem!");
        analogWrite(5, 8);  // Place la broche 5 à 100% de sa capacité.
      }
     
      delay(1000);
    }

    void loop()
    {
      analogWrite(5, 0);                          // Place la broche 5 à 0% de sa capacité.
     
      rf22.send(data, sizeof(data));          // Envoi de la donnée(PING).
     
      if (rf22.waitAvailableTimeout(500))    // Timeout.
      { 
        if (rf22.recv(buf, &len))           // Réception d'une donnée(PONG).
        {
          analogWrite(6, 8);                // Place la broche 6 à 100% de sa capacité.
          Serial.println((char*)buf);       // Affichage de la donnée reçue.
          analogWrite(6, 0);                // Place la broche 6 à 0% de sa capacité.
        }
      }
      delay(400);
    }

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

#include <SPI.h>
#include <RH_RF22.h>

RH_RF22 rf22;    // Définition de la commande.

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

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

void setup()
{
  pinMode(5, OUTPUT);   // Configure la broche 5 en sortie (couleur verte de la led RGB).
  pinMode(6, OUTPUT);   // Configure la broche 6 en sortie (couleur bleue de la led RGB).
  pinMode(23, OUTPUT);  // Configure la broche 23 en sortie (couleur rouge de la led RGB).
 
  Serial.begin(9600);
  Serial.println("Sketch PONG.");

  RH_RF22 rf22(SS,9);   // Affecte le SlaveSelect à la broche 9.
  SPI.setSCK(14);   // Affecte la clock à la broche 14.

  if (!rf22.init())    // Vérification que le modem soit correctement initialisé.
  {
    Serial.println("Echec de l'initialisation modem!");
    analogWrite(23, 8); // Place la broche 23 à 100% de sa capacité.
  }
  else
  {
    Serial.println("Succes de l'initialisation modem!");
    analogWrite(5, 8);  // Place la broche 5 à 100% de sa capacité.
  }

  delay(1000);
}

void loop()
{
  analogWrite(5, 0);    // Place la broche 5 à 0% de sa capacité.
 
  if (rf22.recv(buf, &len))    // Réception d'une donnée(PING).
  {
    analogWrite(6, 8);  // Place la broche 6 à 100% de sa capacité.
    Serial.println((char*)buf);    // Affichage de la donnée reçue.
    rf22.send(data, sizeof(data));    // Envoi de la donnée(PONG).
    analogWrite(6, 0);  // Place la broche 6 à 0% de sa capacité.
  }
}

_______________________________________________________________________________________________________________
- PROGRAMMATION:
Important: Il faut savoir que la carte Teensy communique avec la TeensyWino par le biais d'une communication SPI. Or dans la bibliothèque Radiohead le SlaveSelect est attribué à la broche 10, cependant sur la carte TeensyWino, le SlaveSelect est attribué à la broche 9 de la carte Teensy. Même constat pour la clock (SCK) qui est attribuée à la broche 13 dans la bibliothèque, est attribué à la broche 14 sur la TeensyWino.
Il faut donc redéfinir le pinout de ces broches dans le code.

Pour redéfinir le brochage du SlaveSelect, on va utiliser la ligne de code suivante:
Code: Tout sélectionner
RH_RF22 rf22(SS,9);   // Affecte le SlaveSelect à la broche 9.

Pour redéfinir le brochage de la clock, on va utiliser la ligne de code suivante:
Code: Tout sélectionner
SPI.setSCK(14);       // Affecte la clock à la broche 14.

/!\ Attention: Il est important d'écrire ces deux lignes dans le setup() et surtout avant d'appeler la fonction rf22.init().

Vous aurez sûrement remarqué l'utilisation de la fonction analogWrite(). La carte TeensyWino est équipée d'une LED RGB. J'utilise donc cette dernière afin de fournir un indicatif visuel sur le déroulement du programme.
Un voyant vert s'allume pendant 1 seconde si le RFM22 s'initialise correctement.
Un voyant rouge s'allume si le RFM22 ne s'initialise pas.
Un voyant bleu s'allume dès qu'il y réception d'une donnée.
Ces lignes de codes ne sont pas essentielles au bon déroulement du programme. Si vous le souhaitez vous pouvez les commenter ou même les supprimer du sketch. Je répète qu'elles ne servent qu'à un titre indicatif.

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

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

Maintenant que vous savez comment communiquer avec le RFM22 du TeensyWino, il vous est possible de transmettre les valeurs enregistrées par les différents capteurs présents sur la carte.
Je vous recommande d'aller faire un tour sur OpenWino afin de prendre plus connaissance des capteurs du TeensyWino et de leur utilisation.

C'est tout pour aujourd'hui!
Florian
 
Messages: 75
Inscription: Mer 24 Juil 2013 17:36

Retourner vers WiNo

Qui est en ligne

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

cron