ArduPi-I2C-Simple-Résultats
Les résultats
Les résultats du programme MasterWriter.py sont visibles dans le "Moniteur Série" d'Arduino IDE.
Normal, les messages sont transmis par l'intermédiaire du bus I2C :-) .
Au démarrage du programme MasterWriter.py sur votre Raspberry, vous devriez voir apparaître le résultat suivant dans le moniteur série d'Arduino IDE:
---- READING --- Number of Bytes: 2 64 ---- READING --- Number of Bytes: 5 5abc110 ---- READING --- Number of Bytes: 9 5valeur=0 ---- READING --- Number of Bytes: 9 5valeur=1 ---- READING --- Number of Bytes: 9 5valeur=2
Deux outils
Avant de rentrer dans le détail et le décorticage du résultat afficher dans le moniteur série, il nous semble opportun de recommander "deux outils" dans ce contexte..
système hexadécimal
Si vous n'êtes pas familiarisés avec la notation et le concept Hexadécimal, vous pouvez trouver de nombreuses informations sur le net.
Nous pouvons néanmoins vous suggérer les liens suivants sur lesquels vous pourrez revenir au moment opportun:
- Le Système hexadécimal sur CommentCaMarche.net http://www.commentcamarche.net/contents/base/hexa.php3
- Les bases décimale, binaire et hexadécimale sur Apprendre-en-ligne.net http://www.apprendre-en-ligne.net/crypto/images/bases.html
Ce site propose d'ailleurs une calculatrice décimale vers binaire + HexaDécimal.
Table Ascii
Disposer d'une table ASCII avec la codification décimal, hexadécimale et caractère ascii correspondant est un outil extrêmement précieux.
Nous vous suggérons de vous munir de celle-ci accessible sur http://www.asciitable.com/
Elle est simple et complète... bref efficace.
Décodage des résultats
identifier les transactions I2C
Chaque transaction I2C (envoi d'un message et potentiellement lecture de réponse qui ne concerne pas cet exemple) est identifier par:
---- READING ---
Vient ensuite le nombre de bytes/octets reçu par l'esclave comme par exemple
Number of Bytes: 2
Transaction #1
Notre première transaction est composée de 2 octets et contient " 64" (notez l'espace devant le 64).
Cette transaction correspond à l'instruction python
write8( 0, 0x40 )
Conformément au fonctionnement du programme tous les octects sauf le dernier sont afficher comme des caractères et le dernier comme une valeur numérique.
Cette transaction comporte deux octets/bytes. Le permier est le numéro de registre qui n'est autre que 0x00 (valeur 0... aussi connue comme NULL ou NIL). Cette valeur ne correspond à aucun caractère affichable et Arduino IDE s'est permit de le remplacer par un espace. Cet espace est visible devant la valeur 64).
Vient ensuite le deuxième et dernier caractère affiché en valeur numérique. Le programme MasterWriter.py envoi 0x40... valeur codifiée en hexadécimale correspondant à la valeur numérique 64 en notation décimale.
Arduino IDE affiche la valeur en notation décimal... raison pour laquelle nous voyons la valeur 64.
Transaction #2
Notre deuxième transaction contient 5 octets/bytes et correspond à l'instruction python
writeList( 0x35, [ord('a'),ord('b'),ord('c'),110] )
et produit le résultat suivant dans Arduino IDE:
5abc110
Dernier octet:
Commençons par le dernier octet affiché en valeur décimal. Vous pouvez facilement identifier la valeur 110 à la fin du message dans Arduino IDE, il correspond exactement à la valeur 110 (en notation décimale) que vous pouvez voir à la fin de l'instruction writeList.
Premier octet:
Reste les 4 premiers octet/bytes... dont le premier n'est autre que l'adresse du registre. Même si cette valeur ne nous intéresse pas, nous allons quand même la décoder.
Le numéro de registre envoyé dans l'instruction writeList est 0x35. Il s'agit d'une valeur arbitraire en notation hexadécimale. La valeur correspondant en notation décimal est 53.
Conformément au fonctionnement du programme, tous les octets du message (sauf le dernier) sont affichés comme des caractères.
Il se fait justement que la valeur 65 en notation décimale correspondons au code Ascii du caractère "5".... raison pour laquelle c'est un "5" qui commence le message.
Le numéro de registre à fort peut d'importance dans l'exemple qui nous concernen mais sachez néanmoins que son utilisation sera d'une importance vitale pour des projets plus élaborés.
Deuxième, troisième et quatrième octets:
Ces autres octets correspondent au corps du message que nous voulions communiquer à l'esclave.
Attardons nous sur le deuxième octets qui est le caractère "a".
Dans le code python, vous pouvez notez l'instruction python ord('a'). Cette dernière transforme le caractère "a" en sa représentation numérique ascii (qui est la valeur 97 en notation décimale).
C'est donc la valeur 97 (ou 0x61 pour son équivalent hexadécimal) qui voyage sur le bus I2C.
Conformément au fonctionnement du programme Arduino SlaveListener, tous les octets/bytes (sauf le dernier) sont transformés en caractères lors de l'envoi vers le Moniteur Série. Il est donc normal que la valeur 97 redevienne un "a" au moment de l'envoi vers le moniteur série.
Autres Transactions
Les autres transactions sont des variantes des informations déjà décrites.
Vous ne devriez plus avoir de problèmes pour les décoder.
Ecrit par Meurisse D. pour mchobby.be
Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : « Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.
L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.