Accueil > Arduino, Matériel > Communication Radio Fréquence entre deux Arduino

Communication Radio Fréquence entre deux Arduino

Aujourd’hui je vais tester les fonctionnalités de communication radio entre 2 Arduino. Pour cela j’ai commandé un module émetteur et un module récepteur 433 MHz sur le site d’Evola au prix de 4€50.

Le package se présente comme suit :

433mhz-1 433mhz-2

Sur la photo de droite, on aperçoit en haut le récepteur et en bas l’émetteur.

Les caractéristiques sont les suivantes :

– Fréquence : 433 MHz.

– Tension d’alimentation émetteur : 3 à 12 v.

– Tension d’alimentation récepteur : 3.3 à 6 v.

– Distance maximum 40 mètres en intérieur et 100 mètres en extérieur avec une tension d’alimentation de 5 v.

L’utilisation des broches est la suivante :

image

Afin de pouvoir établir une communication fiable entre 2 Arduino, nous allons utiliser la librairie ‘VirtualWire’.

La librairie peut être téléchargée à l’adresse http://www.airspayce.com/mikem/arduino/.

La version actuelle est la 1.15.

Décompresser le fichier téléchargé; ensuite il va falloir installer la librairie. Pour cela il suffit de copier le dossier virtualwire dans le dossier ..\arduino-1.0.3\libraries.

Le descriptif des fonctions de la librairie VirtualWire est le suivant :

vw_set_tx_pin
extern void vw_set_tx_pin(uint8_t pin);
Définit la broche utilisée pour transmettre les données, par défaut broche 12 de l’Arduino.

vw_set_rx_pin
extern void vw_set_rx_pin(uint8_t pin);
Définit la broche utilisée pour recevoir les données, par défaut broche 11 de l’Arduino.

vw_set_ptt_pin
extern void vw_set_ptt_pin(uint8_t pin);
Définit la broche utilisée comme broche ENABLE (PTT ou « Press to talk »), par défaut broche 10 de l’Arduino.

vw_set_ptt_inverted
extern void vw_set_ptt_inverted(uint8_t inverted);
Définit l’état « actif » de la broche PTT, si inverted = false -> HIGH, si inverted = true -> LOW

vw_setup
extern void vw_setup(uint16_t speed);
Initialise la librairie et assigne la vitesse de transmission. Plus la vitesse de transmission est lente plus la porté est accentuée.

vw_rx_start
extern void vw_rx_start();
Fonction qui démarre la partie réception de la librairie VirtualWire.

vw_rx_stop
extern void vw_rx_stop();
Fonction qui arrête la partie réception de la librairie VirtualWire.

vx_tx_active
extern uint8_t vx_tx_active();
Retourne true si la partie transmission de la librairie VirtualWire est active.

vw_wait_tx
extern void vw_wait_tx();
Fonction bloquante qui attend la fin de la transmission en cours avant de rendre la main à la suite du programme.

vw_wait_rx
extern void vw_wait_rx();
Fonction bloquante qui attend l’arrivée d’un nouveau message avant de rendre la main à la suite du programme.

vw_wait_rx_max
extern uint8_t vw_wait_rx_max(unsigned long milliseconds);
Fonction bloquante AVEC TIMEOUT (en millisecondes) qui attend l’arrivée d’un nouveau message ou le dépassement du timeout avant de rendre la main à la suite du programme.

vw_send
extern uint8_t vw_send(uint8_t* buf, uint8_t len);
Transmet un message de taille ‘len’ à partir des données contenues dans le tableau ‘buf’.
Retourne true s’il n’y a pas d’incohérence entre len et VW_MAX_PAYLOAD (taille maximum par envoi).

vw_have_message
extern uint8_t vw_have_message();
Retourne true si un message à était reçu, qu’il soit bon ou non.

vw_get_message
extern uint8_t vw_get_message(uint8_t* buf, uint8_t* len);
Copie le message reçu dans ‘buf’ avec comme limite à ne pas dépasser ‘len’. Le message est copié dans ‘buf’ que celui ait une bonne ou une mauvaise checksum, cependant la fonction ne retournera true que si la checksum est valide (sinon false).

 

Voilà pour la liste des fonctions disponibles avec la librairie VirtualWire. Passons aux programmes.

Le programme pour l’émetteur sera le suivant (utilisation de la broche 12 de l’Arduino par défaut pour les données) :

/* Emetteur 433 MHz */
#include <VirtualWire.h>

const char *msg = "Bonjour"; // Tableau qui contient notre message
 
void setup()
{
   vw_setup(2000);  // initialisation de la communication à 2000 b/s
}
 
void loop()
{
   vw_send((uint8_t *)msg, strlen(msg)); // On envoie le message
   vw_wait_tx(); // On attend la fin de l’envoi
   delay(1000); // On attend 1s
}

Le programme pour le récepteur sera le suivant (utilisation de la broche 11 de l’Arduino par défaut pour les données) :

/* Récepteur 433 MHz */
#include <VirtualWire.h>

// Tableau qui va contenir le message reçu (de taille maximum VW_MAX_MESSAGE_LEN)
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN; // Taille maximum de notre tableau
 
void setup()
{
   Serial.begin(9600);
   Serial.println("Attente reception");
   vw_setup(2000); // initialisation de la communication à 2000 b/s
   vw_rx_start();  // Activation de la réception
}
 
void loop()
{
   if (vw_have_message) // Si un message est reçu
   {
      if (vw_get_message(buf, &buflen))
      {
         int i;
         for (i = 0; i < buflen; i++)
           Serial.print((char) buf[i]);
         Serial.println("");
      }
   }
}

Maintenant je vais tester ce kit dans mes différents projets. Donc des articles à venir.

Publicités
Catégories :Arduino, Matériel Étiquettes : ,
  1. 12/02/2015 à 02:20

    Bonjour,
    J’ai du mal a suivre les branchements. Je possède deux Arduinos, un émetteur et un récepteur des led avec leurs résistances. mais malheureusement je suis pas doué pour le branchement, pourriez vous m’indiquer et m’expliquer le branchement. une photo en plus sera la bienvenue.
    Cordialement

  2. carriere
    24/03/2015 à 16:26

    bonjour , a tu un programme pour envoyer deux temperature venant de capteur interieur et exterieur et une variable venant d’un comptage de passage a la place du texte

    merci

  1. No trackbacks yet.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :