Partage
  • Partager sur Facebook
  • Partager sur Twitter

Communication entre 3 Xbee Pro

Sujet résolu
    25 octobre 2015 à 21:48:26

    Bonjour à tous, je dispose de 3 Xbee pro XBP24-AWI (je ne sais plus si ce sont des s1 ou s2...) et je souhaite les faire communiquer de la sorte :


    BASE : comme son nom l'indique, c'est la base qui communique avec les différents RECEPTEUR(s) afin d'acquérir une valeur.


    RECEPTEUR : Reçoit un ordre de BASE, le transmet à un arduino relié en Rx-Tx. l'arduino traite l'instruction et agît en considération. Suivant l'instruction reçue, il peut aussi être amené à envoyer un message à RECEPTEUR pour envoyer un ordre à EMETTEUR.


    EMETTEUR : capte une valeur analogique sur un de ses pins et le transmet à RECEPTEUR qui va le transmettre à la carte arduino auquel il est relié


    Et je ne parviens pas à communiquer uniquement de la BASE au RECEPTEUR. Soit le message est envoyé en broadcast soit les autres ne le reçoivent pas...


    Quelqu'un aurait-il un solution ?

    -
    Edité par Heziode 25 octobre 2015 à 22:15:13

    • Partager sur Facebook
    • Partager sur Twitter
    Ensemble créons l'avenir !
      26 octobre 2015 à 8:18:00

      Pourrais ton voir le code que tu utilises ?

      -
      Edité par lorrio 27 octobre 2015 à 12:19:22

      • Partager sur Facebook
      • Partager sur Twitter
        26 octobre 2015 à 8:48:43

        Excuse moi lorrio, mais je n'ai pas compris quel code tu souhaite que je montre...

        Fait tu refference à la trame ? L'arduino ?

        • Partager sur Facebook
        • Partager sur Twitter
        Ensemble créons l'avenir !
          26 octobre 2015 à 9:02:19

          Bah, le code qui tourne sur l'arduino RECEPTEUR par exemple.

          C'est juste histoire de voir comment tu gères la réception d'une trame et comment tu la renvoies ;)

          • Partager sur Facebook
          • Partager sur Twitter
            26 octobre 2015 à 9:05:40

            Ah d'accord.

            Bah... pour le moment je n'ai pas grand chose, le code n'est pas complet, ce qu'il y a dans l'arduino n'est qu'a titre de test pour l'instant :

            #include <SoftwareSerial.h>
            
            SoftwareSerial emetteur(2,3);
            
            void setup()
            {
                Serial.begin(9600);
                emetteur.begin(19200);
            
                Serial.println("## Xbee Communication ##");
                Serial.println();
            }
            
            void loop()
            {
                emetteur.listen(); // On écoute "emetteur"
                // Si on écoute "emetteur"
                if(emetteur.isListening()) 
                {   
                    // S'il y a des données à lires
                    if(emetteur.available()) 
                    {
                        String data = getData(&emetteur); // On récupère les données
                        Serial.print("Message recu : "+data); // Puis on les affiches
                    }        
            
                }
                delay(2000);
            }
            
            String getData(SoftwareSerial *source)
            {
                String value = "";
                
                // Tant qu'il y a des données à lire dans le buffer
                while(source->available())
                {
                    value += (char)source->read(); // Concaténation des caractère lue dans le buffer "source"
                }
            
                return value;
            }
            



            • Partager sur Facebook
            • Partager sur Twitter
            Ensemble créons l'avenir !
              26 octobre 2015 à 9:14:35

              Du coup, je suppose que tu es en mode AT Command.

              Ce mode est très bien pour faire du broadcast ou de la communication entre seulement 2 modules mais il n'est pas du tout adapté pour un système à plusieurs modules.

              Je te conseils vivement de t'orienter vers le mode API qui offre de nombreux avantages :

              • Encapsulation des trames sous forme de paquet
              • Possibilité de sélectionner précisément l'adresse du module à qui on veut envoyer un paquet
              • Possibilité de savoir de quel adresse provient un paquet reçu
              • Gestion des accusés de réception pour savoir si le paquet a bien été transmis
              • ...

              Il te faudra reconfigurer tes modules avec XCTU pour utiliser ce mode.

              Quand au code sur arduino, il existe une lib pour utiliser les XBee dans ce mode là.

              • Partager sur Facebook
              • Partager sur Twitter
                26 octobre 2015 à 10:22:18

                Le problème c'est que je les ai déjà configuré en mode API... c'est là que je ne comprends pas comment les paramétré de sorte pour que je puisse m'adresser à un module particulier.
                • Partager sur Facebook
                • Partager sur Twitter
                Ensemble créons l'avenir !
                  26 octobre 2015 à 10:32:24

                  Si tu les as paramétrés en mode API, tu ne peux pas envoyer du simple texte comme en mode AT Command.

                  En mode API, le module s'attend à recevoir des données binaires respectant un format bien précis.

                  Tu ne peux donc pas te permettre d'utiliser simplement print et read.

                  Il te faut passer par la lib XBee API : https://code.google.com/p/xbee-arduino/

                  Avec cette lib, tu auras des fonctions pour envoyer des packets :

                  // Création des données du packet à envoyer
                  char payload[] = "HelloWorld";
                  
                  // Création de l'adresse du récepteur (SH + SL) :
                  XBeeAddress64 addr = XBeeAddress64(0x0054A30B, 0xA521F6EB);
                  
                  // Création du paquet à envoyer :
                  ZBTxRequest packet = ZBTxRequest(addr, payload, sizeof(payload));
                  
                  // Envoie du paquet :
                  xbee.send(packet);



                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 octobre 2015 à 12:21:51

                    lorrio, comment j’effectue le branchement de l'xbee sur l'arduino pour envoyer la trame avec ton code ?

                    actuellement, j'ai le code suivant :

                    #include <XBee.h>
                    
                    // create the XBee object
                    XBee xbee = XBee();
                    
                    //uint8_t payload[] = (uint8_t ) "Hello World";
                    
                    void setup() {
                      // put your setup code here, to run once:
                      Serial.begin(9600);
                      xbee.setSerial(Serial);
                    }
                    
                    void loop() {
                      // Création des données du packet à envoyer
                      uint8_t payload[] = "HelloWorld";
                     
                      // Création de l'adresse du récepteur (SH + SL) :
                      XBeeAddress64 addr = XBeeAddress64(0x0013A200, 0x404BD71B);
                     
                      // Création du paquet à envoyer :
                      ZBTxRequest packet = ZBTxRequest(addr, payload, sizeof(payload));
                     
                      // Envoie du paquet :
                      xbee.send(packet);
                      delay(2000);
                    }



                    • Partager sur Facebook
                    • Partager sur Twitter
                    Ensemble créons l'avenir !
                      28 octobre 2015 à 12:36:42

                      Avec ce code, tu vas utiliser le Serial Hardware de l'arduino.

                      Ce qui signifie que tu ne pourras plus mettre à jour ton code sans débrancher le XBee ni utiliser le Serial pour afficher des messages dans la console.

                      Autant dire que ce n'est pas très pratique...

                      Tu ferais mieux d'utiliser un SoftwareSerial pour dialoguer avec le Xbee.

                      Ce qui nous donne :

                      #include <XBee.h>
                      #include <SoftwareSerial.h>
                      
                      // Affectation des pins
                      uint8_t softRxPin = 10;
                      uint8_t softTxPin = 11;
                      
                      // Gestionnaire du SoftwareSerial pour le XBee
                      SoftwareSerial SerialXbee(softRxPin, softTxPin);
                      
                      // Creation du gestionnaire Xbee
                      XBee xbee = XBee();
                      
                      void setup() {
                      
                      	// Initialisation du Serial avec le PC
                      	Serial.begin(9600);
                      	
                      	// Initialisation de Serial avec le Xbee
                      	SerialXbee.begin(9600);
                      	xbee.setSerial(SerialXbee);
                      
                      }
                       
                      void loop() {
                      
                      	// Création des données du packet à envoyer
                      	uint8_t payload[] = "HelloWorld";
                      
                      	// Création de l'adresse du récepteur (SH + SL) :
                      	XBeeAddress64 addr = XBeeAddress64(0x0013A200, 0x404BD71B);
                      
                      	// Création du paquet à envoyer
                      	ZBTxRequest packet = ZBTxRequest(addr, payload, sizeof(payload));
                      
                      	// Envoie du paquet
                      	xbee.send(packet);
                      	delay(2000);
                        
                      }

                      Avec ce code, la pin 10 sert de Rx et doit donc être connectée au DOUT du Xbee

                      Quand à la pin 11, elle sert de Tx et doit donc être connectée au DIN du Xbee

                      Tu peux changer ces numéros si tu le souhaites mais attention : toutes les pins ne peuvent pas servir de Rx !

                      Plus d'info ici : https://www.arduino.cc/en/Reference/SoftwareSerial

                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 octobre 2015 à 12:54:04

                        Ok. Bon maintenant, j'ai bien le paquet qui part (je le voie grâce au témoin LED de Tx) mais l'xbee destinataire ne reçois rien...

                        J'ai portant bien saisie la bonne adresse64 (SH+SL), j'ai revérifier... celà doit venir du fait de la configuration des modules alors.

                        Une solution ?

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Ensemble créons l'avenir !
                          28 octobre 2015 à 13:32:06

                          Bah là, il faut revoir la configuration de tes modules avec XCTU.

                          Normalement, tu dois avoir un module Coordinator et les autres modules EndDevice.

                          Tes modules doivent aussi être sur le même channel (CH) ainsi que sur le même PanID (ID).

                          -
                          Edité par lorrio 28 octobre 2015 à 13:33:29

                          • Partager sur Facebook
                          • Partager sur Twitter
                            28 octobre 2015 à 14:01:23

                            Voilà la config de mes 3 modules xbee :

                            BASEEMETTEURRECEPTEUR
                            CH C C C
                            ID 3332 3332 3332
                            DH 0 0 0
                            DL 0 0 0
                            MY 0 1 2
                            CE 1(Coord) 0(ED) 0(ED)
                            A1 0 7 7
                            A2 7 0 0
                            NI BASE EMETTEUR RECEPTEUR
                            AP 1 1 1

                            -
                            Edité par Heziode 28 octobre 2015 à 15:34:59

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Ensemble créons l'avenir !
                              28 octobre 2015 à 15:27:22

                              Bah là, je ne sais pas trop quoi te dire...

                              Essayes d'envoyer des commandes à ton modules pour voir si il est bien connecté.

                              Il y a cet exemple qui montre comment envoyer des ATCommand en mode API.

                              Profites en aussi pour envoyer des commands afin de vérifier les adresses de tes modules.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                28 octobre 2015 à 15:35:58

                                Ok je vais voir ce que je peux faire :) Je te remercie de ton aide.

                                Je posterais si je trouve une solution.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Ensemble créons l'avenir !
                                  28 octobre 2015 à 17:07:04

                                  Je suis enfin parvenu à un résultat !!!

                                  Je vous partage la configuration de mes Xbee et le code arduino, ça peut en aider d'autre :)

                                  La config appliquer sur les 3 Xbee sont : 

                                   BASEEMETTEURRECEPTEUR
                                  CH D D D
                                  ID 3332 3332 3332
                                  DH 0 0 0
                                  DL 0 0 0
                                  MY 0 1 2
                                  CE 1(Coord) 0(ED) 0(ED)
                                  A1 0000b [0] 0100b [4] 0100b [4]
                                  A2 100b [4] 000b [0] 000b [0]
                                  NI BASE EMETTEUR RECEPTEUR
                                  AP 1 1 1

                                  Voici les XML des fichier pour ceux disposant du même modèle :

                                  BASE :

                                  <?xml version="1.0" encoding="UTF-8"?>
                                  
                                  <data>
                                    <profile>
                                      <description_file>XBP24_15_4_10A5.xml</description_file>
                                      <settings>
                                        <setting command="CH">D</setting>
                                        <setting command="ID">3332</setting>
                                        <setting command="DH">0</setting>
                                        <setting command="DL">0</setting>
                                        <setting command="MY">0</setting>
                                        <setting command="RR">0</setting>
                                        <setting command="RN">0</setting>
                                        <setting command="MM">0</setting>
                                        <setting command="NT">19</setting>
                                        <setting command="CE">1</setting>
                                        <setting command="SC">1FFE</setting>
                                        <setting command="SD">4</setting>
                                        <setting command="A1">0</setting>
                                        <setting command="A2">4</setting>
                                        <setting command="EE">0</setting>
                                        <setting command="KY"></setting>
                                        <setting command="NI">0x20BASE</setting>
                                        <setting command="PL">4</setting>
                                        <setting command="CA">2C</setting>
                                        <setting command="SM">0</setting>
                                        <setting command="ST">1388</setting>
                                        <setting command="SP">0</setting>
                                        <setting command="DP">3E8</setting>
                                        <setting command="BD">3</setting>
                                        <setting command="RO">3</setting>
                                        <setting command="AP">1</setting>
                                        <setting command="PR">FF</setting>
                                        <setting command="D8">0</setting>
                                        <setting command="D7">1</setting>
                                        <setting command="D6">0</setting>
                                        <setting command="D5">1</setting>
                                        <setting command="D4">0</setting>
                                        <setting command="D3">0</setting>
                                        <setting command="D2">0</setting>
                                        <setting command="D1">0</setting>
                                        <setting command="D0">0</setting>
                                        <setting command="IU">1</setting>
                                        <setting command="IT">1</setting>
                                        <setting command="IC">0</setting>
                                        <setting command="IR">0</setting>
                                        <setting command="IA">FFFFFFFFFFFFFFFF</setting>
                                        <setting command="T0">FF</setting>
                                        <setting command="T1">FF</setting>
                                        <setting command="T2">FF</setting>
                                        <setting command="T3">FF</setting>
                                        <setting command="T4">FF</setting>
                                        <setting command="T5">FF</setting>
                                        <setting command="T6">FF</setting>
                                        <setting command="T7">FF</setting>
                                        <setting command="P0">1</setting>
                                        <setting command="P1">0</setting>
                                        <setting command="PT">FF</setting>
                                        <setting command="RP">28</setting>
                                        <setting command="CT">64</setting>
                                        <setting command="GT">3E8</setting>
                                        <setting command="CC">2B</setting>
                                      </settings>
                                    </profile>
                                  </data>
                                  

                                  EMETTEUR :

                                  <?xml version="1.0" encoding="UTF-8"?>
                                  
                                  <data>
                                    <profile>
                                      <description_file>XBP24_15_4_10A5.xml</description_file>
                                      <settings>
                                        <setting command="CH">D</setting>
                                        <setting command="ID">3332</setting>
                                        <setting command="DH">0</setting>
                                        <setting command="DL">0</setting>
                                        <setting command="MY">1</setting>
                                        <setting command="RR">0</setting>
                                        <setting command="RN">0</setting>
                                        <setting command="MM">0</setting>
                                        <setting command="NT">19</setting>
                                        <setting command="CE">0</setting>
                                        <setting command="SC">1FFE</setting>
                                        <setting command="SD">4</setting>
                                        <setting command="A1">4</setting>
                                        <setting command="A2">0</setting>
                                        <setting command="EE">0</setting>
                                        <setting command="KY"></setting>
                                        <setting command="NI">0x20EMETTEUR</setting>
                                        <setting command="PL">4</setting>
                                        <setting command="CA">2C</setting>
                                        <setting command="SM">0</setting>
                                        <setting command="ST">1388</setting>
                                        <setting command="SP">0</setting>
                                        <setting command="DP">3E8</setting>
                                        <setting command="BD">3</setting>
                                        <setting command="RO">3</setting>
                                        <setting command="AP">1</setting>
                                        <setting command="PR">FF</setting>
                                        <setting command="D8">0</setting>
                                        <setting command="D7">1</setting>
                                        <setting command="D6">0</setting>
                                        <setting command="D5">1</setting>
                                        <setting command="D4">0</setting>
                                        <setting command="D3">0</setting>
                                        <setting command="D2">0</setting>
                                        <setting command="D1">0</setting>
                                        <setting command="D0">0</setting>
                                        <setting command="IU">1</setting>
                                        <setting command="IT">1</setting>
                                        <setting command="IC">0</setting>
                                        <setting command="IR">0</setting>
                                        <setting command="IA">FFFFFFFFFFFFFFFF</setting>
                                        <setting command="T0">FF</setting>
                                        <setting command="T1">FF</setting>
                                        <setting command="T2">FF</setting>
                                        <setting command="T3">FF</setting>
                                        <setting command="T4">FF</setting>
                                        <setting command="T5">FF</setting>
                                        <setting command="T6">FF</setting>
                                        <setting command="T7">FF</setting>
                                        <setting command="P0">1</setting>
                                        <setting command="P1">0</setting>
                                        <setting command="PT">FF</setting>
                                        <setting command="RP">28</setting>
                                        <setting command="CT">64</setting>
                                        <setting command="GT">3E8</setting>
                                        <setting command="CC">2B</setting>
                                      </settings>
                                    </profile>
                                  </data>
                                  

                                  RECEPTEUR :

                                  <?xml version="1.0" encoding="UTF-8"?>
                                  
                                  <data>
                                    <profile>
                                      <description_file>XBP24_15_4_10A5.xml</description_file>
                                      <settings>
                                        <setting command="CH">D</setting>
                                        <setting command="ID">3332</setting>
                                        <setting command="DH">0</setting>
                                        <setting command="DL">0</setting>
                                        <setting command="MY">02</setting>
                                        <setting command="RR">0</setting>
                                        <setting command="RN">0</setting>
                                        <setting command="MM">0</setting>
                                        <setting command="NT">19</setting>
                                        <setting command="CE">0</setting>
                                        <setting command="SC">1FFE</setting>
                                        <setting command="SD">4</setting>
                                        <setting command="A1">4</setting>
                                        <setting command="A2">0</setting>
                                        <setting command="EE">0</setting>
                                        <setting command="KY"></setting>
                                        <setting command="NI">0x20RECEPTEUR</setting>
                                        <setting command="PL">4</setting>
                                        <setting command="CA">2C</setting>
                                        <setting command="SM">0</setting>
                                        <setting command="ST">1388</setting>
                                        <setting command="SP">0</setting>
                                        <setting command="DP">3E8</setting>
                                        <setting command="BD">3</setting>
                                        <setting command="RO">3</setting>
                                        <setting command="AP">1</setting>
                                        <setting command="PR">FF</setting>
                                        <setting command="D8">0</setting>
                                        <setting command="D7">1</setting>
                                        <setting command="D6">0</setting>
                                        <setting command="D5">1</setting>
                                        <setting command="D4">0</setting>
                                        <setting command="D3">0</setting>
                                        <setting command="D2">0</setting>
                                        <setting command="D1">0</setting>
                                        <setting command="D0">0</setting>
                                        <setting command="IU">1</setting>
                                        <setting command="IT">1</setting>
                                        <setting command="IC">0</setting>
                                        <setting command="IR">0</setting>
                                        <setting command="IA">FFFFFFFFFFFFFFFF</setting>
                                        <setting command="T0">FF</setting>
                                        <setting command="T1">FF</setting>
                                        <setting command="T2">FF</setting>
                                        <setting command="T3">FF</setting>
                                        <setting command="T4">FF</setting>
                                        <setting command="T5">FF</setting>
                                        <setting command="T6">FF</setting>
                                        <setting command="T7">FF</setting>
                                        <setting command="P0">1</setting>
                                        <setting command="P1">0</setting>
                                        <setting command="PT">FF</setting>
                                        <setting command="RP">28</setting>
                                        <setting command="CT">64</setting>
                                        <setting command="GT">3E8</setting>
                                        <setting command="CC">2B</setting>
                                      </settings>
                                    </profile>
                                  </data>
                                  

                                  Puis, pour tester dans un premier temps que les modules communiques bien entre eux, j'ai réalisé une petite trame de communication Tx-Rx (à adapter pour le destinataire (et le message)) : 

                                  7E 00 1F 01 01 00 02 00 5B 42 61 73 65 5D 20 3A 20 62 6F 6E 6A 6F 75 72 20 52 45 43 45 50 54 45 55 52 80

                                  Et pour finir, le code arduino (en reprenant ce que m'avez fournis lorrio)

                                  #include <XBee.h>
                                  #include <SoftwareSerial.h>
                                  
                                  // Affectation des pins
                                  uint8_t softRxPin = 10;
                                  uint8_t softTxPin = 11;
                                  
                                  int curseur = 0; // curseur de déplacement
                                  
                                  // Création des adresses des récepteurs 
                                  uint16_t addr16[2] = {0x0000, 0x0001};
                                  
                                  // Création des données du packet à envoyer
                                  uint8_t payload[2][30] = {"[RECEPTEUR] : bonjour chef !", "[RECEPTEUR] : salut copain"};
                                  
                                  // Gestionnaire du SoftwareSerial pour le XBee
                                  SoftwareSerial SerialXbee(softRxPin, softTxPin);
                                  
                                  // Creation du gestionnaire Xbee
                                  XBee xbee = XBee();
                                  
                                  void setup() {
                                  
                                      // Initialisation du Serial avec le PC (Port serie)
                                      Serial.begin(9600);
                                  
                                      // Initialisation de Serial avec le Xbee
                                      SerialXbee.begin(9600);
                                      xbee.setSerial(SerialXbee);
                                  
                                  }
                                  
                                  void loop() {
                                  
                                      if(curseur > 1) curseur = 0;
                                  
                                      // Création du paquet à envoyer
                                      Tx16Request tx = Tx16Request(addr16[curseur], payload[curseur], sizeof(payload[curseur]));
                                  
                                      // Envoie du paquet
                                      xbee.send(tx);
                                  
                                      delay(2000); // attente de 2 secondes
                                      curseur++; // incrémentation du curseur
                                  }

                                  Voilà, en espérant que cela puisse aider :)





                                  -
                                  Edité par Heziode 28 octobre 2015 à 17:11:33

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Ensemble créons l'avenir !
                                    16 novembre 2015 à 16:28:03

                                    Bonjour ! Alors moi j'ai exactement le même problème sauf que je dois coder tout ça en python et je suis un peu perdue.. Pourrais-je avoir un peu d'aide.

                                    Merci infiniment pour vos réponses !

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      16 novembre 2015 à 17:00:52

                                      As tu cherché un peu sur Google si il n'existait pas une lib pour XBEE API en Python ?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        16 novembre 2015 à 21:46:46

                                        Bonsoir MaudeLP. Le projet que je réalise avec ces xbee et une reprise de mon projet de bac. A l'origine j'utilisés un script en python pour la communication raspberry pi <-> xbee.

                                        Voici un script que j'avais fait :

                                        import serial
                                        #Connexion entre 2 Xbee
                                        
                                                #Add ,9600 if problems
                                        ser = serial.Serial('/dev/ttyUSB0', 9600)
                                        
                                        #Variable for Xbee
                                        #Poste in HEX
                                        #poste = 0x02
                                        
                                        #Definition des variables
                                        var = 0 #consigne en lux
                                        var_mli = var * 1023 / 800 #rapport consigne <-> quantum
                                        var_hexa = "{0:0>4X}".format(var_mli) #conversion en Hexa (4 octets)
                                        
                                        ser.open()
                                        #Bytes Start
                                        ser.write(b'\x7E')
                                        #Digi part of lengh (always 0)
                                        ser.write(b'\x00')
                                        ser.write(b'\x11')
                                        
                                        #Instruction
                                        ser.write(b'\x17')
                                        ser.write(b'\x01')
                                        #ID of dest.
                                        ser.write(b'\x00')
                                        ser.write(b'\x00')
                                        ser.write(b'\x00')
                                        ser.write(b'\x00')
                                        ser.write(b'\x00')
                                        ser.write(b'\x00')
                                        ser.write(b'\x00')
                                        ser.write(b'\x00')
                                        #Destinataire
                                        ser.write(b'\x00')
                                        ser.write(b'\x02')
                                        ser.write(b'\x02')
                                        #Commande ASCII : M1 (PWM)
                                        ser.write(b'\x4D')
                                        ser.write(b'\x31')
                                        #Command Data
                                        ser.write(var_hexa[:2].decode("hex")) #On récupère la première valeur hexa (les 2 premiers octets)
                                        ser.write(var_hexa[2:].decode("hex")) #On récupère la première valeur hexa (les 2 derniers octets)
                                        #Checksum Calculator
                                        cons1 = "0x" + var_hexa[:2]
                                        cons2 = "0x" + var_hexa[2:]
                                        sum = 0x17 + 0x01 + 0x02 + 0x02 + 0x4D + 0x31 + int(cons1, 16) + int(cons2, 16)
                                        checksum = 0xFF - (sum & 0xFF)
                                        hexa = hex(checksum)
                                        print(sum)
                                        print(checksum)
                                        #Envoie du checksum
                                        ser.write(str(chr(checksum)))
                                        print(str(chr(checksum)))
                                        #Fin de notre requete
                                        ser.close()

                                        Bon il y a probablement des choses à revoir, mais l'idée est là. A "l'époque", je n'étais pas parvenu à trouver de librairies en python exclusive ZigBee (ou xbee pour les modules de Digit). Je me suis donc servie de la libraire serial pour communiquer sur le les ports de la raspberry.

                                        -
                                        Edité par Heziode 16 novembre 2015 à 21:47:35

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Ensemble créons l'avenir !
                                          17 novembre 2015 à 9:41:24

                                          Si il existe des lib python sur google, je les ai déjà importées. mais je suis un peu nouvelle dans le milieu de la programmation j'essaie de déchiffrer un peu tout ça :) Merci beaucoup Yoratheon, pour ton script je vais analyser ça de plus près. En vérité, mon problème est peut être un petit peu différent. (je suis en stage dans un labo robotique). Je dois réaliser une triangulation avec trois ou plus xbee. Je dois utiliser les récepteurs qui capteront l'intensité du signal qu'il existe entre eux et la base, et de ça je dois en déduire la distance des récepteurs à la base. Tout ça codé en python. Les gars avec qui je bosse m'ont dit d'utiliser ROS mais mes xbee sont série 2 et par conséquent la lib que j'ai trouvé ne convient pas car elle marche pour les série 1.. ils m'ont aussi parler de rasperry pi mais je n'ai jamais travaillé dessus je vais donc faire quelques tutos pour me familiariser.. Comme vous l'aurez compris je ne suis pas encore au point mais j'ai trois mois pour faire tout ça :) , mais la moindre aide me serait très utile.

                                          Merci beaucoup !

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            17 novembre 2015 à 10:24:34

                                            Ehhhh, avant de chercher à comprendre comment utiliser le XBee, je te conseillerais plutôt de chercher à voir si c'est possible de faire ça avec des Xbee !

                                            En effet, j'ai de gros doutes sur la faisabilité d'une triangulation par XBee...


                                            Déjà, pour faire une triangulation correct, il faut au minimum 3 positions connues, ce qui fait un système à 4 XBee :

                                            • 3 XBee fixe et de position connues qui serviront de référence (un peu comme les satellites pour la géolocalisation GPS)
                                            • 1 Xbee mobile sur lequel tu cherches à triangularisation sa position.

                                            Ensuite, pour faire de la triangularisation, il faut connaitre la distance qu'il y a entre chaque module.

                                            Pour cela, je ne vois que 2 solutions possible :

                                            • Mesurer le temps de propagation du signal entre les XBee pour en déduire la distance sachant que la vitesse de déplacement d'une onde dans l'air est connue
                                            • Mesurer la puissance du signal reçu sachant qu'il est possible de modéliser les pertes de puissance en fonction de la distance

                                            Mais dans les 2 cas, j'ai du mal à voir comment tu vas pouvoir faire ça avec XBee sachant que :

                                            • Pour le premier cas, il faut synchroniser les XBee et mesurer des temps extrêmement court étant donné qu'une onde se déplace pratiquement à la vitesse de la lumière
                                            • Pour le second cas, il faut connaitre la puissance de réception (RSSI) de tous les modules entre eux (l'interface XBee permet-elle de récupérer ça ? à vérifier...)

                                            A mon avis, tu peux oublier la première technique qui demande un matériel spécialisé pour la synchronisation et la mesure de ces temps.

                                            Je te conseille donc t'orienter tes recherches sur l'approximation de distance par RSSI.

                                            -
                                            Edité par lorrio 17 novembre 2015 à 10:30:06

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              17 novembre 2015 à 10:59:57

                                              En tous cas je ferai mon possible pour essayer de trouver une solution avec xbee si solution(s) il y a :) !  J'avais pour idée de faire avec ta seconde proposition car il est possible de récuperer des  RSSI "counts" grâce au logiciel XCTU, et en déduire la puissance. En revanche, je n'avais pas pensé à faire une référence consitituée de 3 xbee..
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                20 novembre 2015 à 17:10:22

                                                Okay en fait j'ai un nouveau problème. Ce n'est pas de la triangulation qu'il faut que je fasse. En fait j'ai un robot sur lequel il y aurait 2 xbee (disons a et b), et il y aurait un autre xbee mis à une certaine distance (appelé c). il faut que a et b sur le robot renvoit la force de signal qu'il existe entre eux et c (donc force entre a - b et b - c). De cette sorte il faut que lorsque le robot avance, il faut déterminer dans quelle direction (dans un premier temps) il doit se tourner pour que les forces de signal a - b et b - c soient à nouveau les mêmes. le but ultime est que le robot arrive jusqu'au xbee c. Donc j'aurais 2 end device sur le robot et un rooter à distance, tout ça coordonné par un coordinateur qui serait sur un ordinateur. Pensez vous que cette fois ce serait possible de faire un code python avec tout ça ?

                                                Merci pour vos réponses :)

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  21 novembre 2015 à 11:12:16

                                                  Je te conseille d'ouvrir un nouveau fil pour ton problème...
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Ensemble créons l'avenir !
                                                    17 septembre 2018 à 6:46:20

                                                    bsr mes cher grand frères oft je suis très content pour du fait que ça cadre avec mon thème de fin d'etude pourriez vs m'aider à faire communique 3 xbee pro s1 en proteus svp il me reste 2 jours
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

                                                    Communication entre 3 Xbee Pro

                                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                    • Editeur
                                                    • Markdown