{"id":68,"date":"2016-02-29T10:16:06","date_gmt":"2016-02-29T09:16:06","guid":{"rendered":"http:\/\/daniel974.fr\/wordpress\/?p=68"},"modified":"2016-03-03T08:16:44","modified_gmt":"2016-03-03T07:16:44","slug":"dialogue-pc-ev3","status":"publish","type":"post","link":"http:\/\/daniel974.fr\/wordpress1\/2016\/02\/29\/dialogue-pc-ev3\/","title":{"rendered":"Dialogue PC <--> EV3"},"content":{"rendered":"<p>L&rsquo;EV3 sait envoyer et recevoir des messages, on peut donc envisager un dialogue PC-EV3&#8230;<br \/>\nLe protocole est publi\u00e9<a href=\"https:\/\/github.com\/mindboards\/ev3sources\/blob\/master\/lms2012\/c_com\/source\/c_com.h\" target=\"_blank\"> ici<\/a><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-69 alignright\" src=\"http:\/\/daniel974.fr\/wordpress\/wp-content\/uploads\/2016\/02\/ev3combluetooth-185x300.png\" alt=\"ev3combluetooth\" width=\"185\" height=\"300\" srcset=\"http:\/\/daniel974.fr\/wordpress1\/wp-content\/uploads\/2016\/02\/ev3combluetooth-185x300.png 185w, http:\/\/daniel974.fr\/wordpress1\/wp-content\/uploads\/2016\/02\/ev3combluetooth.png 378w\" sizes=\"(max-width: 185px) 100vw, 185px\" \/><br \/>\nJe me suis donc lanc\u00e9 dans un dialogue utilisant BlueTooth et une application Delphi<br \/>\nIl faut au pr\u00e9alable \u00e9tablir une liaison entre le PC ET L\u2019EV3, j\u2019ai privil\u00e9gi\u00e9 une connexion Bluetooth, en suivant<a href=\"http:\/\/fr.mathworks.com\/help\/supportpkg\/legomindstormsev3io\/ug\/connect-to-an-ev3-brick-over-bluetooth-using-windows-1.html\" target=\"_blank\"> par exemple ce tuto<\/a>.<\/p>\n<p>Suite \u00e0 cette connexion on obtient un port COM suppl\u00e9mentaire qui permet de communiquer avec l&rsquo;EV3<\/p>\n<p style=\"text-align: left;\">Il est alors l&rsquo;heure de lancer son Delphi avec sa <a href=\"https:\/\/sourceforge.net\/projects\/comport\/\" target=\"_blank\">biblioth\u00e8que TComPort&#8230;.<\/a><br \/>\nCelle-ci est fournie avec un exemple, que j&rsquo;ai l\u00e9g\u00e8rement modifi\u00e9 pour qu&rsquo;il affiche ce qu&rsquo;il re\u00e7oit en hexad\u00e9cimal afin de d\u00e9couvrir le protocole<a href=\"http:\/\/daniel974.fr\/wordpress\/wp-content\/uploads\/2016\/02\/receptionev3.png\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-72 aligncenter\" src=\"http:\/\/daniel974.fr\/wordpress\/wp-content\/uploads\/2016\/02\/receptionev3-300x180.png\" alt=\"receptionev3\" width=\"300\" height=\"180\" srcset=\"http:\/\/daniel974.fr\/wordpress1\/wp-content\/uploads\/2016\/02\/receptionev3-300x180.png 300w, http:\/\/daniel974.fr\/wordpress1\/wp-content\/uploads\/2016\/02\/receptionev3.png 660w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>On peut alors d\u00e9cortiquer les bytes re\u00e7us<\/p>\n<h2 style=\"text-align: left;\">Message texte<\/h2>\n<p style=\"text-align: left;\">exemple du message texte de titre &lsquo;envoiNombre&rsquo; et de valeur &lsquo;1&rsquo;:<\/p>\n<p style=\"text-align: left;\">15 00 01 00 81 9E 0C 65 6E 76 6F 69 4E 6F 6D 62 72 65 00 02 00 31 00<br \/>\n___\u00a0\u00a0 ____\u00a0\u00a0 _\u00a0\u00a0 _\u00a0\u00a0 _\u00a0 __________________________\u00a0 ___\u00a0 ____<br \/>\nB1 B2: 15 00 , nombres d&rsquo;octets du message sans ces deux la<br \/>\nB3 B4: 01 00 \/\/ <span class=\"pl-c\">Message counter, Little Endian\\n, ne semblent pas signifiants ici&#8230;.<\/span><br \/>\nB5: 81\u00a0 <span class=\"pl-c\">\/\/ System command, reply not required<\/span><br \/>\nB6: 9E <span class=\"pl-c\">\/\/ Write to mailbox<\/span><br \/>\nB7: longueur du titre du message<br \/>\nB8 B9&#8230;.B18: titre du message, ici &lsquo;envoiNombre&rsquo;<br \/>\nB19: 00 z\u00e9ro terminal du titre<br \/>\nB20 B21: longueur de la la valeur\u00a0 texte avec son z\u00e9ro terminal propre aux valeurs textes<br \/>\nB22 B23: valeur avec son z\u00e9ro terminal, ici le nombre 1 en format texte<\/p>\n<p style=\"text-align: left;\">Il a alors \u00e9t\u00e9 facile de construire un message en \u00e9mission, par exemple:<br \/>\nEnvoi de:test 1<br \/>\n0E 00 01 00 81 9E 05 74 65 73 74 00 02 00 31 00<br \/>\nB1 B2: nombres d&rsquo;octets \u00e0 envoyer sans ces deux la<br \/>\nB3 B4: 01 00<br \/>\nB5: 81<br \/>\nB6: 9EB7: longueur du titre avec son z\u00e9ro terminal<br \/>\nB8 B9&#8230;B11: Titre ici &lsquo;test&rsquo;<br \/>\nB12: 0, z\u00e9ro terminal<br \/>\nB13 B14: longueur de la valeur avec son z\u00e9ro<br \/>\nB15 B16: la valeur ici 1 en texte suivant du z\u00e9ro terminal<\/p>\n<p style=\"text-align: left;\">On a donc pu mettre \u00e0 jour la proc\u00e9dure d&rsquo;envoi de texte&#8230;.<\/p>\n<h2 style=\"text-align: left;\">Messages num\u00e9riques<\/h2>\n<p style=\"text-align: left;\">pour les nombres, ceux-ci sont transmis sur 32 bits \u00e0 la<a href=\"https:\/\/fr.wikipedia.org\/wiki\/IEEE_754\" target=\"_blank\"> norme IEEE754<br \/>\n<\/a>seuls les octets \u00e0 partir du z\u00e9ro terminal du titre changent, les 4 octets correspondent au type single de Pascal, par exemple:<br \/>\n1 est stock\u00e9 par 00 00 80 3F<br \/>\n2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 00 00 00 40<br \/>\n64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 00 00 80 42<br \/>\n1,123456\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 68 CD 8F 3F<\/p>\n<p>etc&#8230;.<\/p>\n<p style=\"text-align: left;\">les octets de longueur de la valeur sont fixes: 04 00,<br \/>\nil reste \u00e0 d\u00e9terminer les octets de valeur,<br \/>\nen \u00e9mission, par exemple:<br \/>\nBegin<br \/>\nvf:=StrToFloat(EditValeur.Text);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/vf valeur du single<br \/>\npvf:=@vf;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ pointeur de byte<br \/>\nfor i:=1 to 4 do Begin bv[i]:=pvf^;inc(pvf); end;\/\/ copy des octets dans le buffer<br \/>\nlv:=4;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ la longueur de la valeur<br \/>\nEnd;<\/p>\n<p style=\"text-align: left;\">en r\u00e9ception:<br \/>\nvar b:QuatreOctets; \/\/ array[1..4]of byte;<br \/>\nv:single absolute b; \/\/ v et b occupent le m\u00eame espace m\u00e9moire&#8230;.<br \/>\ni:integer;<br \/>\nBegin<br \/>\nfor i:=1 to 4 do b[i]:=ord(sv[i]);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/sv String Valeur<br \/>\nResult:=&rsquo;, Nombre:&rsquo;+FloatToStr(v);<br \/>\nEnd<\/p>\n<p style=\"text-align: left;\">Reste \u00e0 r\u00e9gler le cas des chaines de 4 octets&#8230;.<\/p>\n<h2 style=\"text-align: left;\">Les valeurs logiques<\/h2>\n<p>sont beaucoup plus simples, longueur 1, valeur 00 ou 01 selon False ou True<\/p>\n<h2 style=\"text-align: left;\">La boucle d&rsquo;\u00e9mission sur l&rsquo;EV3<\/h2>\n<p style=\"text-align: left;\"><a href=\"http:\/\/daniel974.fr\/wordpress\/wp-content\/uploads\/2016\/02\/emissionev3.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-82\" src=\"http:\/\/daniel974.fr\/wordpress\/wp-content\/uploads\/2016\/02\/emissionev3-300x65.png\" alt=\"emissionev3\" width=\"679\" height=\"147\" srcset=\"http:\/\/daniel974.fr\/wordpress1\/wp-content\/uploads\/2016\/02\/emissionev3-300x65.png 300w, http:\/\/daniel974.fr\/wordpress1\/wp-content\/uploads\/2016\/02\/emissionev3.png 1005w\" sizes=\"(max-width: 679px) 100vw, 679px\" \/><\/a><\/p>\n<p style=\"text-align: left;\">\n","protected":false},"excerpt":{"rendered":"<p>L&rsquo;EV3 sait envoyer et recevoir des messages, on peut donc envisager un dialogue PC-EV3&#8230; Le protocole est publi\u00e9 ici Je me suis donc lanc\u00e9 dans un dialogue utilisant BlueTooth et une application Delphi Il faut au pr\u00e9alable \u00e9tablir une liaison &hellip; <a href=\"http:\/\/daniel974.fr\/wordpress1\/2016\/02\/29\/dialogue-pc-ev3\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"http:\/\/daniel974.fr\/wordpress1\/wp-json\/wp\/v2\/posts\/68"}],"collection":[{"href":"http:\/\/daniel974.fr\/wordpress1\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/daniel974.fr\/wordpress1\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/daniel974.fr\/wordpress1\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/daniel974.fr\/wordpress1\/wp-json\/wp\/v2\/comments?post=68"}],"version-history":[{"count":20,"href":"http:\/\/daniel974.fr\/wordpress1\/wp-json\/wp\/v2\/posts\/68\/revisions"}],"predecessor-version":[{"id":92,"href":"http:\/\/daniel974.fr\/wordpress1\/wp-json\/wp\/v2\/posts\/68\/revisions\/92"}],"wp:attachment":[{"href":"http:\/\/daniel974.fr\/wordpress1\/wp-json\/wp\/v2\/media?parent=68"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/daniel974.fr\/wordpress1\/wp-json\/wp\/v2\/categories?post=68"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/daniel974.fr\/wordpress1\/wp-json\/wp\/v2\/tags?post=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}