Dialogue PC <--> EV3

L’EV3 sait envoyer et recevoir des messages, on peut donc envisager un dialogue PC-EV3…
Le protocole est publié iciev3combluetooth
Je me suis donc lancé dans un dialogue utilisant BlueTooth et une application Delphi
Il faut au préalable établir une liaison entre le PC ET L’EV3, j’ai privilégié une connexion Bluetooth, en suivant par exemple ce tuto.

Suite à cette connexion on obtient un port COM supplémentaire qui permet de communiquer avec l’EV3

Il est alors l’heure de lancer son Delphi avec sa bibliothèque TComPort….
Celle-ci est fournie avec un exemple, que j’ai légèrement modifié pour qu’il affiche ce qu’il reçoit en hexadécimal afin de découvrir le protocolereceptionev3On peut alors décortiquer les bytes reçus

Message texte

exemple du message texte de titre ‘envoiNombre’ et de valeur ‘1’:

15 00 01 00 81 9E 0C 65 6E 76 6F 69 4E 6F 6D 62 72 65 00 02 00 31 00
___   ____   _   _   _  __________________________  ___  ____
B1 B2: 15 00 , nombres d’octets du message sans ces deux la
B3 B4: 01 00 // Message counter, Little Endian\n, ne semblent pas signifiants ici….
B5: 81  // System command, reply not required
B6: 9E // Write to mailbox
B7: longueur du titre du message
B8 B9….B18: titre du message, ici ‘envoiNombre’
B19: 00 zéro terminal du titre
B20 B21: longueur de la la valeur  texte avec son zéro terminal propre aux valeurs textes
B22 B23: valeur avec son zéro terminal, ici le nombre 1 en format texte

Il a alors été facile de construire un message en émission, par exemple:
Envoi de:test 1
0E 00 01 00 81 9E 05 74 65 73 74 00 02 00 31 00
B1 B2: nombres d’octets à envoyer sans ces deux la
B3 B4: 01 00
B5: 81
B6: 9EB7: longueur du titre avec son zéro terminal
B8 B9…B11: Titre ici ‘test’
B12: 0, zéro terminal
B13 B14: longueur de la valeur avec son zéro
B15 B16: la valeur ici 1 en texte suivant du zéro terminal

On a donc pu mettre à jour la procédure d’envoi de texte….

Messages numériques

pour les nombres, ceux-ci sont transmis sur 32 bits à la norme IEEE754
seuls les octets à partir du zéro terminal du titre changent, les 4 octets correspondent au type single de Pascal, par exemple:
1 est stocké par 00 00 80 3F
2                          00 00 00 40
64                        00 00 80 42
1,123456            68 CD 8F 3F

etc….

les octets de longueur de la valeur sont fixes: 04 00,
il reste à déterminer les octets de valeur,
en émission, par exemple:
Begin
vf:=StrToFloat(EditValeur.Text);                          //vf valeur du single
pvf:=@vf;                                                                    // pointeur de byte
for i:=1 to 4 do Begin bv[i]:=pvf^;inc(pvf); end;// copy des octets dans le buffer
lv:=4;                                                                            // la longueur de la valeur
End;

en réception:
var b:QuatreOctets; // array[1..4]of byte;
v:single absolute b; // v et b occupent le même espace mémoire….
i:integer;
Begin
for i:=1 to 4 do b[i]:=ord(sv[i]);       //sv String Valeur
Result:=’, Nombre:’+FloatToStr(v);
End

Reste à régler le cas des chaines de 4 octets….

Les valeurs logiques

sont beaucoup plus simples, longueur 1, valeur 00 ou 01 selon False ou True

La boucle d’émission sur l’EV3

emissionev3

Ce contenu a été publié dans Non classé. Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *