Modifications

Aller à : navigation, rechercher

Robokite/ComSansFil

4 843 octets ajoutés, 1 mai 2014 à 18:07
Page créée avec « Réalisation d'une communication sans fil entre deux arduino avec une paire d'émmetteurs-récepteurs à bas coût 433Mhz == Introduction == Cette page vise à excpliqu... »
Réalisation d'une communication sans fil entre deux arduino avec une paire d'émmetteurs-récepteurs à bas coût 433Mhz


== Introduction ==

Cette page vise à excpliquer la procédure utilisée pour faire communiquer 2 arduinos entre elles. Elle permet d'envoyer des données de type chaine de caractère ou dans notre cas des entiers en utilisant une paire d'émetteur récepteur 433Mhz [http://www.robotshop.com/eu/fr/tx-rx-433mhz-a-faible-cout-seeedstudio.html de ce type].

Les scripts présenté sont basés sur un tutoriel plus complet réalise par SKYWOOD et disponibles [http://skyduino.wordpress.com/2011/12/29/tutoriel-arduino-et-emetteurrecepteur-433mhz-virtualwire/ ici].


== Branchements ==

Il est possible de choisir les pattes avec lesquelles ont souhaite émettre et recevoir les données (cf tutoriel indiqué dans l'introduction). Dans notre cas, nous allons utiliser les pattes par défaut.

Le plus petit module est l'emetteur , le grand module est le récepteur (un peu plus conséquent sans doute car il doit falloir filtrer légèrement les signaux reçu.

Aussi, la simplicité de ces modules se retrouve dans leurs branchements:


Branchement de l'arduino au récepteur:

Arduino <nowiki>------</nowiki> Récepteur
5V <nowiki>------</nowiki> 5V
D11 <nowiki>------</nowiki> Data (n'importe laquelle des 2 pattes si vous en avez 2 sur le récepteur)
GND <nowiki>------</nowiki> GND

Branchement de l'arduino à l'émetteur:

Arduino <nowiki>------</nowiki> Emetteur
5V <nowiki>------</nowiki> 5V
D12 <nowiki>------</nowiki> Data
GND <nowiki>------</nowiki> GND

Il faut ensuite installer la libraire VirtualWire, à télécharger [http://www.airspayce.com/mikem/arduino/ ici] et à placer dans le dossier libraries de votre dossier d'installation arduino.


La librarie VitrualWire crée un protocole de communication assez semblable à de l'UDP: elle vérifie l'intégrité des messages à la réception mais ne s'occupe pas de les renvoyer si un packet à été loupé. Elle ne permet d'envoyer que des chaines de caractères. Pour envoyer des entiers ou des floatant sans gaspiller de bande passante, il faudrait créer notre propre fonction de convertion. Mais dans un premier temps, nous allons simplement utiliser les fonctions fournies par arduino itoa() et atoi() qui permettent respectivement de transformer une chaine de caractère en un int et un int en une chaine de caractère. Avec cette méthode un int qui représente normalement deux octets sera envoyé sous forme d'une chaine de caractère entre 1 et 5 caractère suivant sa valeurs. Soit entre 1 et 5 octet : perte de bande passante.


Quoiqu'il en soit, les sketchs suivants fonctionnent:


----

Emetteur

#include <VirtualWire.h> // inclusion de la librairie VirtualWire

// DATA D12!!!

char SensorMsg1[10];
unsigned int SensorData1 = 42239;

void setup() // Fonction setup()
{
Serial.begin(9600);
Serial.println("Demarrage");

vw_setup(2000); // initialisation de la librairie VirtualWire à 2000 bauds
}

void loop() // Fonction loop()
{
itoa(SensorData1,SensorMsg1,10);
Serial.print(SensorMsg1);
// On signale le début de l'envoi
vw_send((uint8_t *)SensorMsg1, strlen(SensorMsg1)); // On envoie le message
vw_wait_tx(); // On attend la fin de l'envoi
Serial.println(" envoyé !"); // On signal la fin de l'envoi
delay(2000); // Et on attend
}


----
Récepteur

#include <VirtualWire.h> // inclusion de la librairie VirtualWire

// RECEPTEUR : DATA D11
// Sensors
unsigned int SensorData1;
char SensorMsg1[10];


void setup() // Fonction setup()
{
Serial.begin(9600); // Initialisation du port série pour avoir un retour sur le serial monitor
Serial.println("Start"); // Petit message de bienvenue

vw_setup(2000); // initialisation de la librairie VirtualWire à 2000 bauds (note: je n'utilise pas la broche PTT)
vw_rx_start(); // Activation de la partie réception de la librairie VirtualWire
}

void loop() // Fonction loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN]; // Tableau qui va contenir le message reçu (de taille maximum VW_MAX_MESSAGE_LEN)
uint8_t buflen = VW_MAX_MESSAGE_LEN; // Taille maximum de notre tableau

if (vw_wait_rx_max(200)) // Si un message est reçu dans les 200ms qui viennent
{
if (vw_get_message(buf, &buflen)) // On copie le message, qu'il soit corrompu ou non
{
Serial.print("RX : ");
for (byte i = 0; i < buflen; i++) // Si il n'est pas corrompu on l'affiche via Serial
//Serial.print(buf[i]);
SensorMsg1[i] = char(buf[i]);
Serial.println("");
}

SensorMsg1[buflen] = '\0';
SensorData1 = atoi(SensorMsg1);
Serial.println(SensorData1);
}

}

[[Catégorie:Fablabo]]
7
modifications

Menu de navigation