Partage
  • Partager sur Facebook
  • Partager sur Twitter

connection sans fil XBEE

13 mars 2013 à 10:11:09

Bonjour,

je viens vers vous car je débute dans les communications sans fil XBEE, et je ne sais pas trop comment m'y prendre

J'ai 2 arduino MEGA branché sur 2ordi différents , sur chacun des 2 arduino j'ai un shield XBEE plus un XBEE de connecté.

Je voudrais que le premier sur lequel j'ai branché un potentiomètre soit l'émetteur.

Mon but est juste de transférer la valeur analogique ([0;1023]) du potentiomètre du premier arduino vers le second pour ensuite l'afficher sue le serial monitor sauf que je ne sais pas du tout m'y prendre pour émettre et recevoir une variable de type chiffre

si vous avez des bouts de codes, des tutos ou des trucs qui pourrait m'aider je suis preneur.

Je vous remercie d'avance

  • Partager sur Facebook
  • Partager sur Twitter
13 mars 2013 à 10:17:53

Une première étape sera de réussir à afficher correctement une variable de type int sur le moniteur série (sans xbee). Pour ca le tuto Arduino sur le site devra te permettre d'y arriver.

Ensuite on pourra mettre en place la transmission XBEE ;)

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

13 mars 2013 à 14:38:26

Salut Eskimon et merci pour ta réponde.

Je maîtrise le fait d'écrire dans le moniteur Série des valeurs de variable ou du texte (avec Serial.print, Serial.println ). Je sais aussi interagir avec l'arduino en tapant des choses dans le Serial monitor ( changer l'état d'une led...).

En fouillant un peu j'ai trouvé un bout de code que j'ai un peu modifier pour pouvoir émettre la valeur d'un potentiomètre. Peu tu me dire ce que tu en pense?

int Pot =A0;
float Valeur =0; //Valeur a emettre 


void setup() {
  Serial.begin(9600);
  Configuration();
}

void loop() {
    Valeur = analogRead(pot); //Lecture de la valeur
    Serial.println(MaValeur); //Emission de la valeur
  }
  delay(50);
}

//Configuration du XBEE
void Configuration() {
  Serial.print("+++");
  char thisByte = 0;
  while (thisByte != '\r') { 
    if (Serial.available() > 0) {
      thisByte = Serial.read(); 
    }
  }
  Serial.print("ATRE\r");
  Serial.print("ATDL0\r"); // sent to xbee 0
  Serial.print("ATMY1\r"); // this xbee is 1
  Serial.print("ATID1111\r");
  Serial.print("ATCN\r");
}



  • Partager sur Facebook
  • Partager sur Twitter
13 mars 2013 à 15:46:45

Il faudrait que je me remette dans les docs des modules ^^ sur l'idée ca a l'air correcte (au jugé, je vais pas aller compiler pour vérifier).

Perso je mettrais un petit délai après la configuration, et je mettrais aussi un controle du retour des commande AT pour vérifier que tout se passe bien et éviter d'envoyer les commandes trop vite et que le module pige rien...

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

13 mars 2013 à 16:29:58

Que veut tu dire par un control de retour des commande AT? 

J'ai eu le temps de faire un essai de programme de réception avec un autre bout de code

String inputString = "";
int ChoseRecu;

void setup() {
  Serial.begin(9600);      
  setDestination();
}

void loop() {
  if (Serial.available() > 0) {
     char inByte = Serial.read();

   // save only ASCII numeric characters (ASCII 0 - 9):
  if (isDigit(inByte)){
    inputString = inputString + inByte;
  }
  
  // if you get an ASCII newline:
  if (inByte == '\n') {
    // convert the string to a number:
     ChoseRecu = inputString.toInt();
    Serial.print("Valeur recu: ");
    Serial.println(ChoseRecu);
    inputString = "";
  } 
}
}



// Configuration XBEE
void setDestination() {
  Serial.print("+++");
  char thisByte = 0;
  while (thisByte != '\r') {
    if (Serial.available() > 0) {
      thisByte = Serial.read(); 
    }
  }
  Serial.print("ATRE\r");
  Serial.print("ATMY0\r"); 
  Serial.print("ATID1111\r");
  Serial.print("ATCN\r");
  delay(100);
}

Pense tu que le fait que ma variable inByte soit déclaré en char ne va pas bloquer le fait que je puisse recevoir et afficher des chiffres a virgule?

  • Partager sur Facebook
  • Partager sur Twitter
13 mars 2013 à 16:42:44

controle de retour des commandes AT :

Quand tu écris une commande AT à ton module, ce dernier est censé te répondre (souvent il répond "OK"). Une bonne pratique serait de vérifier qu'il répond ce que tu attends.

Ensuite, pour la réception, qu'elle est le format de la donnée que tu attends ? car la si tu recois une virgule tu vas juste la virer...

Sinon tu es sur une carte MEGA, sais-tu sur quelle liaison série ton Xbee est branché ? Une bonne idée serait de mettre la liaison XBee sur un autre serial que celui de l'USB, comme ca tu peux faire un echo sur le moniteur USB de tout ce qui arrive sur la voie XBee.

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

13 mars 2013 à 17:23:09

A ok comme genre un bit de contrôle je voie ;) avec une boucle if je doit surement pouvoir vérifier ça.

j'aimerais émettre et recevoir une valeur avec une précision de 10^-2, Pour cela il faut que j'utilise des variable de type float mais dans mon programme de réception si je remplace char par float j'ai un bug a la compilation...

Sinon pour ma connections XBEE/arduino j'utilise ce shield http://tinyurl.com/ascdpa5 je n'ai donc aucun fils sur les RX et TX de mon arduino

  • Partager sur Facebook
  • Partager sur Twitter
13 mars 2013 à 19:36:36

Ah ca c'est dommage, ca aurait été pratique de pouvoir débugguer en utilisant 2 voie série... si tu as des fils males/males, tu pourrais "externaliser" le module (en y amenant via des fils le 5V, la masse, le TX et le RX)
  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

14 mars 2013 à 19:10:47

J'ai regardé et ce shield utilise le RX0 et le TX0 je n'ai donc pas besoin de l'externaliser pour utiliser une autre connexion série.

Es qu'il est possible de faire communiquer 3 variables de type float par une seul connexion XBEE?

j'ai pensé a garder une variable tel quelle, multiplier la seconde par 10 et la 3eme par 100 pour ensuite faire des tests if et les redivisers.

  • Partager sur Facebook
  • Partager sur Twitter
14 mars 2013 à 20:12:31

Justement l'idée "d'externaliser" le shield serait de pouvoir le brancher sur une autre voie série pour pouvoir débugguer sur l'USB et en meme temps se servir du shield :)

Pour envoyer un float tu peux faire un truc un peu malin...

Un float à la taille de 4 char. En faisant des opérations de décalage et masquage tu vas pouvoir envoyer les 4 octets à la suite, puis ensuite il suffira de faire l'opération inverse du coté récepteur pour reconstruire le float.

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

14 mars 2013 à 21:21:49

Oui pour utiliser le shield et la voie serie USB en même temps il me suffit juste de déclarer mon serial XBBE en Serial.begin(9600); et mon Serial USB en Serial1.begin(9600);.

J'ai chercher et trouver un de tes post sur le forum concernant le flot to char et j'ai donc modifier mon code en intégrant la conversion. 

int Pot =A0;
float Valeur =0; 

void setup() {
  Serial.begin(9600);
  Configuration();
}
 
void loop() {
    Valeur = analogRead(Pot); //Lecture de la valeur
    char message[20]; //taille max de 20 caractère pour le message, pour l'exemple
    sprintf(message, "%f", Valeur); //comme un printf mais dans une chaine !
    Serial.println(Valeur); //Emission de la valeur
  delay(50);
}
 
//Configuration du XBEE
void Configuration() {
  Serial.print("+++");
  char thisByte = 0;
  while (thisByte != '\r') {
    if (Serial.available() > 0) {
      thisByte = Serial.read();
    }
  }
  Serial.print("ATRE\r");
  Serial.print("ATDL0\r"); // sent to xbee 0
  Serial.print("ATMY1\r"); // this xbee is 1
  Serial.print("ATID1111\r");
  Serial.print("ATCN\r");
}

Cependant je ne comprend pas a quoi correspond message sprintf(message, "%f", Valeur); 

Es normal que sprintf ne ce colore pas dans l'éditeur?

Je ne peu pas tester mes codes car le matériel est au lycée... Peu tu me dire ce que tu en pense? :)

  • Partager sur Facebook
  • Partager sur Twitter
15 mars 2013 à 9:31:58

Je ne pensais pas à un de mes vieux messages (qui dans le cas d'Arduino se révèle être faux, sprintf ne marche pas pour les float pour Arduino si mes souvenirs sont bons...)

Ce que je te propose est différent et sera de la forme suivante :

void envoyer(float value) {
   for(char i=0; i<4; i++) {
      Serial.print(value & 0x000000FF); //on envoie seulement les derniers bits
      value = value >> 8; //on décale value vers la droite
   }
}

float recevoir() {
   float value = 0;
   float temp = 0;
   for (char i=0; i<4; i++) {
      temp = Serial.read() & 0x000000FF;
      value |= temp << (i*8);
   }
   return value;
}

Sans garantie de succès mais ca peut peut etre marcher!

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

21 mars 2013 à 19:03:42

Bonjour,

J'ai enfin pu tester les XBEE et le résultat est juste nul ^^ rien a marché alors j'ai décidé de commencer par la base de la base: Physicalpixel.

j'ai donc connecter une led a un arduino mega et je lui ai compilé le programme 

Pour l'autre arduino je lui ai compilé un programme très simple:

void setup{
Serial.begin(9600);
}

void loop(){
Serial.print("H");
delay(2000);
Serial.print("LOW");
delay(2000);
}

Et toujours rien. Alors je me pose plusieurs questions:

-Es que le fait que ce soit le RX0 et TX0 qui soit utilisé puisse faire bugger?

-Le shield est'il compatible arduino mega?

-Il y a t'il une configuration spéciale a faire aux XBEE?

J'ai essayé d'"externalisé" les XBEE en suivant ce shémat http://jeromeabel.net/files/ressources/xbee-arduino/images/large/xbee-arduino-send-bb.png mais toujours rien.

Pour finir j'ai mit un fils du RX0 de la carte 1 au TX0 de la carte2 et un autre du RXO de la carte 2 au TX0 de la carte1 et sa a fonctionné!

Si vous avez une idée pour faire marché ces modules XBEE (j'utilise des XBEE chip série 2) je suis preneur

merci d'avance :)

  • Partager sur Facebook
  • Partager sur Twitter
21 mars 2013 à 19:46:33

Tester le programme en reliant par des fils -> très bonne idée :)

Pour les shields, garde les "externaliser" (ce que au passage j'avais proposé quelques posts plus tot) en branchant le xbee sur les pins de la voie série 1 par exemple (et laissant la voie série 0 pour l'USB). Si possible fais nous un schéma ou une bonne photo qu'on voit si le montage est correcte (ou alors une bonne explication)

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

21 mars 2013 à 21:29:04

C'est en relisant tes post que je me suis dit après tout il y a qu'a externalisé ;) Ce qui est une chose non aisé du fait que les pin du XBEE ont un espacement plus petit que ce des trous des platines de test 

J'ai fait un schéma du câblage (c'est le même pour les 2 arduino sauf que un a une led sur le pin 13 en plus)

Cablâge d'un XBEE

  • Partager sur Facebook
  • Partager sur Twitter
21 mars 2013 à 21:38:42

Pourquoi tu relies une I/O du XBee au reset Arduino ?

Sinon ca a l'air bon au niveau montage.

Maintenant tu vas pouvoir faire de la supervision avec ta voie USB en parrallèle de la voie série XBee

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

21 mars 2013 à 21:49:30

je sais pas j'ai vue sa sur le net....

que doit je faire? supprimer ce fils?

Au niveau du programme si j'ai bien compris vue que j'utilise le RX et TX 1 je doit pour envoyer avec le XBEE écrire par ex:

void setup(){
Serial.begin(9600); //connexion pour le USB
Serial1.begin(9600); //connexion pour le XBEE
}

void loop(){
Serial1.print("H");
Serial1.print("L");
}

Ou il y a t'il une configuration a faire pour emmètre sur le RX et TX 1?

  • Partager sur Facebook
  • Partager sur Twitter
21 mars 2013 à 22:05:22

Non dans l'idée c'est ca oui :)

Ce que tu peux faire, avec une carte Arduino tu émet un caractère (ou tu fait une boucle pour en envoyer plusieurs) de manière constante.

Pendant ce temps, tu bidouilles avec l'autre Arduino (qui est branché au PC) pour réussir à obtenir le signal.

Si les deux xbee sont paramétrer pour fonctionner à la bonne vitesse alors ca devrait bien marcher !

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

22 mars 2013 à 18:54:03

Bon ben j'ai essayé en mais toujours aucun résultat...

En me cherchant sur le net j'ai vue qu'un mec rajouté une librairie pour les XBEE

#include <SoftwareSerial.h>

SoftwareSerial xbee(2, 3); // RX, TX
char c = 'A';
int  pingPong = 1;

void setup()
{
    Serial.begin(9600);

    Serial.println( "Arduino started sending bytes via XBee" );

    //Set the data rate for the SoftwareSerial port
    xbee.begin(9600);
}

void loop() {
    // Send character via XBee to other XBee connected to Mac
    // via USB cable.
    xbee.write( c );

    //--- Display the character just sent on console. ---
    Serial.println( c );

    //--- Get the next letter in the alphabet, and reset to ---
    //--- 'A' once we have reached 'Z'.
    c = c + 1;
    if ( c>'Z' )
         c = 'A';

    //--- Switch LED on Arduino board for every character sent---
    if ( pingPong == 0 )
        digitalWrite(13, LOW);
    else
        digitalWrite(13, HIGH);
    pingPong = 1 - pingPong;
    delay( 1000 );
}

Je sais pas si sa pourrait me faire avancé.

Tu m'as dit que si il était bien configuré sa pourrais marché mais perso j'ai fait aucun paramétrage a mes XBEE . De quel paramétrage parlé tu?

  • Partager sur Facebook
  • Partager sur Twitter
24 juillet 2015 à 0:21:02

est ce que quelqu'un peut me dire comment relier 2 modules xbee (relié chacun à une carte arduino uno) par une communication série
  • Partager sur Facebook
  • Partager sur Twitter
24 juillet 2015 à 13:59:19

Bonjour sarrassark,

Plutôt que de déterrer un sujet vieux de 2 ans, je t'invite à créer ton propre sujet.

Profites en aussi pour ajouter un bonjour au début de ton message (ça fait toujours plaisir) et dit nous un peu ce que tu as essayé de faire ou ce que tu aimerais faire car on ne va pas faire le travail à ta place (surtout quand on sait qu'il y a une infinité de tutoriel XBee sur internet).

Sur ceux, je ferme pour éviter d'autres déterrages.

-
Edité par lorrio 24 juillet 2015 à 13:59:36

  • Partager sur Facebook
  • Partager sur Twitter