Configuration XCTU

On va a présent configurer les deux XBees afin de les installer sur le même réseau.

Logiciels pré-requis : XCTU

circle-exclamation

Une fois le logiciel installé, on connecte les deux XBees via un câble USB à l'ordinateur :

On notera précieusement les adresses MACs des deux XBees, ceux-ci seront essentiels pour la suite de l'installation. On a donc ici : XBee Coordinateur : 0013A2004198CC5 XBee End-Device : 0013A20041BF3D0D

Paramètres communs

Il faut donc ensuite parametrer les XBees pour qu'elles soient toutes sur le même réseaux MESH. Pour cela:

Les deux cartes doivent avoir les mêmes paramètres. Il est surtout conseillé de donner un identifiant a ses cartes, afin de pouvoir mieux les identifier.

Ici, le coordinateur s’appellera GRP1_CO et le End Device GRP1_ED

Il faut ensuite configurer le mode de communication des XBees :

Configuration du Coordinateur

L'Xbee Coordinateur doit avoir des paramètres bien spécifiques:

Elle doit en effet être configuré en tant que "Non-Routing Coordinator".

Configuration de l'XBee End Device

Pareil pour l'XBee :

Il faudra définir par avance les entrées que l'on souhaite utiliser pour la mesure de la tension.

Ici, ce sera l'entée AD2 qui sera utilisé pour mesurer la tension.

On s'assurer ensuite que les XBees soient bien sur le même réseau en scannant le réseau MESH (Bouton Networking mode en haut a gauche de XCTU)

On testera immédiatement la liaison entre les deux XBees en effectuant une requête de mesure. On entre donc dans le "Console Working Mode" (icone de terminal dans XCTU et on ouvre la liaison entre les deux XBees)

Création de la trame pour une mesure de tension

circle-info

La documentation XBee est disponible à l'adresse suivante : https://www.digi.com/resources/documentation/digidocs/pdfs/90002002.pdfarrow-up-right

Dans la documentation XBee , l'envoi de trame de requête de mesure est définie page 189. Il s'agit d'une trame 0x17. Chaque commande AT prend un paramètre défini dans la documentation XBee. Ici, on s'intéressera à la commande IS "Force Sample" (page 276).

On s'intéresse d'abord à la constitution d'une trame API :

On rappelle !

circle-exclamation

Notre trame de requête ressemblera donc a :

0x7E -> Start Delimiter 0x00 0x0F-> Longueur de la frame 0x17 -> ID de la frame AT Command 0x0A -> ID de la frame (pour la retrouver plus facilement, on choisira des valeurs entre 0x01 et 0xFF, 0x00 étant un ID spécifique pour ne pas recevoir de réponses) 0x00 0x13 0xA2 0x00 0x41 0xBF 0x3D 0x0D -> Adresse 64 bits du End-Device 0xFF 0xFE -> Adresse 16 bits du End-Device (ici inconnue) 0x00 -> Remote Command Option (on souhaite juste lire une donnée et non pas modifier un paramètre, cette valeur restera donc à 0) 0x49 0x53 -> Commande AT "IS" qui permet à l'XBee de lire l'état de chacunes des broches définies en tant qu'entrée. 0x46 -> Checksum (calcul donné page 157) Dans XCTU, on aura donc :

En envoyant cette trame et en observant les communications avec le mode "Network Monitoring" de XCTU, on trouvera la trame réponse suivante :

Il faut à présent décoder la trame ! (Pas de panique, ça n'a rien de sorcier !)

circle-info

La documentation étant partiellement incomplète pour la commande IS, je me suis donc aidé de la page suivante qui aide a décoder ces trames :https://www.digi.com/support/knowledge-base/digital-and-analog-sampling-using-xbee-radiosarrow-up-right

0x7E -> Start Delimiter 0x00 0x17-> Longueur de la frame 0x97 -> ID de la frame AT Command Response (il s'agit d'une trame différente, on s'aidera donc de la page 217 qui traite en détail de cette commande) 0x0A -> ID de la frame (qui est identique à la trame d'envoi !) 0x00 0x13 0xA2 0x00 0x41 0xBF 0x3D 0x0D -> Adresse 64 bits du End-Device 0xFF 0xFE -> Adresse 16 bits du End-Device (ici inconnue) 0x49 0x53-> Commande que l'on a envoyé précédement et qui nous ai retourné 0x00 -> Command status, 0x00 signifie que la trame précédente a pu être traitée 0x01 -> Nombre d'échantillonnage dans la trame (toujours à 1) 0x0001 -> "Digital Channel Mask" (proposé page 149), on rappelle que plus haut, on a uniquement configuré AD0 en Digital I/O (ce pin a uniquement était activé pour un projet personnel, en temps normal il n'est pas forcément utile). Après conversion, ce nombre en hexadécimal donne donc 00000000000001. (MSB puis LSB !! )

On retrouve donc les indications de notre configuration. Et c'est pas fini ! 0x04 -> "Analog Channel Mask" (proposé page 150), qui nous indiquera quels sont les ports ADC utilisés sur notre carte. On rappelle qu'on a uniquement configuré AD2 ! On retrouve donc 00000100, (on rappelle, MSB puis LSB), c'est a dire AD2.

0x0000 -> Valeur mesurée par la broche Digital I/O configuré en sortie, son état étant actuellement low, on obtient donc 0.

Et enfin !!!!

0x02D5 -> Valeur mesurée par l'ADC : en décimal 725. Sachant que A/D(mv)=(A/D1200mV)/1023A/D(mv) = (A/D* 1200mV) / 1023 Soit dans notre cas : A/D(mv)=(7251200mV)/1023A/D(mv) = (725 * 1200mV) / 1023 La tension alors lue est de 0,85V !

0xE9 -> Checksum (calcul donné page 157)

Nous savons maintenant pramétrer une carte XBee Coordinateur et End Device pour envoyer une requête de mesure de tension, puis nous savons interpreter le résultat.

Dans la prochaine partie, nous verrons comment appliquer tout ce chapitre dans un programme simple qui nous enverras automatiquement une trame contenant la valeur de la tension à mesurer.

Last updated