{"id":2678,"date":"2020-04-18T17:45:02","date_gmt":"2020-04-18T15:45:02","guid":{"rendered":"http:\/\/www.ardpylab.fr\/?page_id=2678"},"modified":"2020-05-10T17:00:00","modified_gmt":"2020-05-10T15:00:00","slug":"envoi-de-donnees-par-python","status":"publish","type":"page","link":"https:\/\/www.ardpylab.fr\/?page_id=2678","title":{"rendered":"Envoi de donn\u00e9es par Python"},"content":{"rendered":"\n<h2 style=\"text-align: center;\"><em><strong>(vers l\u2019Arduino)<\/strong><\/em><\/h2>\n\n\n\n<p>&nbsp;<\/p>\n<p><br>Pour r\u00e9pondre \u00e0 un besoin d\u2019information du programme t\u00e9l\u00e9vers\u00e9 dans la m\u00e9moire de l\u2019Arduino (valeurs d\u2019une variable, actions \u00e0 effectuer\u2026), il est parfois n\u00e9cessaire que le programme Python envoie des donn\u00e9es vers le microcontr\u00f4leur via le port s\u00e9rie.<\/p>\n<p>Pour cela, on utilise la fonction <strong>\u201d<\/strong><strong>write()\u201d<\/strong> de l\u2019objet <strong>\u201d<\/strong><strong>port s\u00e9rie\u201d<\/strong>&nbsp;cr\u00e9\u00e9 au pr\u00e9alable&nbsp;:<\/p>\n<p style=\"padding-left: 40px;\"><strong>SerialPort = serial.Serial(\u201dCOM 5\u201d, baudrate=9600, timeout=1)<\/strong><\/p>\n<p><br>G\u00e9n\u00e9ralement, les donn\u00e9es \u00e0 envoyer seront des chaines de caract\u00e8res que le programme de l\u2019Arduino pourra traiter selon les m\u00e9thodes vues pr\u00e9c\u00e9demment. Cependant la fonction <strong>\u201d<\/strong><strong>write()\u201d <\/strong>\u00e9crit des donn\u00e9es binaires sur le port s\u00e9rie. Ces donn\u00e9es sont envoy\u00e9es comme une s\u00e9rie d&rsquo;octets.<\/p>\n<p>Il faut donc convertir la chaine de caract\u00e8res \u00e0 envoyer en donn\u00e9es binaires. On utilise pour cela la fonction <strong>\u201d<\/strong><strong>encode(&lsquo;utf-8&rsquo;)\u201d <\/strong>qui permet de convertir la chaine de caract\u00e8res en une s\u00e9quence d\u2019octets selon un encodage universel, l\u2019UTF-8 (abr\u00e9viation de l&rsquo;anglais Universal Character Set Transformation Format &#8211; 8 bits), qui r\u00e9unit les caract\u00e8res utilis\u00e9s par toutes les langues.<\/p>\n<p>L\u2019instruction d\u2019envoi d\u2019une chaine de caract\u00e8res<strong> \u201dString\u201d <\/strong>est alors&nbsp;:<\/p>\n<p style=\"padding-left: 40px;\"><strong>SerialPort.write(String.encode(&lsquo;utf-8&rsquo;))<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><u>Exemple de programme d\u2019envoi de donn\u00e9es<\/u>&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2500 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-ms5.png\" alt=\"\" width=\"573\" height=\"312\"><\/figure>\n<\/div>\n\n\n\n<p>Revenons \u00e0 notre programme nomm\u00e9 <strong>\u201d<\/strong><strong><a href=\"https:\/\/www.ardpylab.fr\/?page_id=2522\/#prog\" data-wplink-url-error=\"true\">LedRVB.ino<\/a>\u201d, <\/strong>avec le <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2497\/#circuit\" data-wplink-url-error=\"true\">circuit<\/a> support des exemples, qui sera t\u00e9l\u00e9vers\u00e9 dans la m\u00e9moire de l\u2019Arduino et qui demande \u00e0 l\u2019utilisateur de saisir un caract\u00e8re :<\/p>\n<p style=\"padding-left: 40px;\">. \u2018<strong>R<\/strong>\u2019, \u2018<strong>V<\/strong>\u2019 ou \u2018<strong>B<\/strong>\u2019 pour allumer respectivement la DEL rouge, verte ou bleue<\/p>\n<p style=\"padding-left: 40px;\">. \u2018<strong>0<\/strong>\u2019 pour \u00e9teindre les DELs<\/p>\n<p>Le programme Python nomm\u00e9 <strong>\u201d<\/strong><strong><a href=\"https:\/\/www.ardpylab.fr\/downloads\/pyserial\/writeledrvb.zip\" data-wplink-url-error=\"true\">WriteLedRVB.py<\/a>\u201d<\/strong> suivant, g\u00e8re la demande de saisie de caract\u00e8re et envoie la donn\u00e9e \u00e0 l\u2019Arduino afin qu\u2019il effectue l\u2019action demand\u00e9e :<br><br><\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.ardpylab.fr\/downloads\/pyserial\/codes\/py\/WriteLedRVB.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"690\" class=\"wp-image-2667 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-pc10-2.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-pc10-2.png 900w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-pc10-2-300x230.png 300w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-pc10-2-768x589.png 768w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/a><\/figure>\n<\/div>\n<p>&nbsp;<\/p>\n\n\n\n<p>Jusqu\u2019\u00e0 la boucle principale, le d\u00e9roulement du programme est identique \u00e0 celui du programme pr\u00e9c\u00e9dent de r\u00e9ception de donn\u00e9es (importations des librairies, d\u00e9claration des variables, connexion \u00e0 l\u2019Arduino).<\/p>\n<p>Apr\u00e8s avoir affich\u00e9, les informations sur les caract\u00e8res \u00e0 saisir pour effectuer les actions programm\u00e9 dans l\u2019Arduino, le programme attend la saisie d\u2019un caract\u00e8re avec l\u2019instruction\u00a0:<\/p>\n<p style=\"padding-left: 40px;\"><strong>saisie = str(input(\u201d\u201d))<\/strong><\/p>\n<p>Puis envoie la donn\u00e9e \u00e0 l\u2019Arduino\u00a0:<\/p>\n<p style=\"padding-left: 40px;\"><strong>SerialPort.write(saisie.encode(&lsquo;utf-8&rsquo;))<\/strong><\/p>\n<p>Ces instructions \u00e9tant dans une boucle infinie, une fois la donn\u00e9e envoy\u00e9e, le programme attend une nouvelle saisie jusqu\u2019\u00e0 la fin du programme en appuyant sur Ctrl-C.<\/p>\n<p>\u00a0<\/p>\n<p>Le m\u00eame programme python peut \u00eatre utilis\u00e9 avec le programme pour Arduino (nomm\u00e9 <strong>\u201d<\/strong><strong><a href=\"https:\/\/www.ardpylab.fr\/?page_id=2522\/#prog2\" data-wplink-url-error=\"true\">ReadString.ino<\/a>\u201d<\/strong>\u00a0) qui, toujours avec le m\u00eame circuit, va demander \u00e0 l\u2019utilisateur d\u2019envoyer un message. Si le message est <strong>\u201d<\/strong><strong>ON\u201d<\/strong>, la DEL rouge s\u2019allume, et si c\u2019est <strong>\u201d<\/strong><strong>OFF\u201d<\/strong>, la DEL rouge s\u2019\u00e9teint.<\/p>\n<p>La seule modification est sur l\u2019information affich\u00e9e pr\u00e9cisant le message \u00e0 envoyer (programme nomm\u00e9 <strong>\u201d<a href=\"https:\/\/www.ardpylab.fr\/downloads\/pyserial\/writeledrvb2.zip\" data-wplink-url-error=\"true\">WriteLedRVB2.py<\/a>\u201d<\/strong> ):<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.ardpylab.fr\/downloads\/pyserial\/codes\/py\/WriteLedRVB2.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"891\" height=\"294\" class=\"wp-image-2662 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-pc11.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-pc11.png 891w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-pc11-300x99.png 300w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-pc11-768x253.png 768w\" sizes=\"auto, (max-width: 891px) 100vw, 891px\" \/><\/a><\/figure>\n<\/div>\n<p>\u00a0<\/p>\n\n\n<div  class=\"grids-section grids-is-stretch\" style=\"--_gs-gap-desktop:0px 0px;--_gs-m-desktop:0 0 0 0;--_gs-p-desktop:0 0 0 0;--_gs-bg-desktop:transparent none;--_gs-bg-xp-desktop:0px;--_gs-zi-desktop:auto;--_gs-d-desktop:block;--_gs-mw-desktop:calc(100% - 0 - 0);--_gs-gap-tablet:0px 0px;--_gs-m-tablet:0 0 0 0;--_gs-p-tablet:0 0 0 0;--_gs-bg-tablet:transparent none;--_gs-bg-xp-tablet:0px;--_gs-zi-tablet:auto;--_gs-d-tablet:block;--_gs-mw-tablet:calc(100% - 0 - 0);--_gs-gap-mobile:0px 0px;--_gs-m-mobile:0 0 0 0;--_gs-p-mobile:0 0 0 0;--_gs-bg-mobile:transparent none;--_gs-bg-xp-mobile:0px;--_gs-zi-mobile:auto;--_gs-d-mobile:block;--_gs-mw-mobile:calc(100% - 0 - 0);--_gs-columns:2;--_gs-rows:1\"><div class=\"grids-s-w_i\">\n<div class=\"grids-area\" style=\"--_ga-column:1\/2;--_ga-row:1\/2;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)\">\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-large\"><a href=\"https:\/\/www.ardpylab.fr\/?page_id=2674\"><img loading=\"lazy\" decoding=\"async\" width=\"50\" height=\"28\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/03\/moins.jpg\" alt=\"\" class=\"wp-image-107\"\/><\/a><\/figure><\/div>\n\n<\/div>\n\n<div class=\"grids-area\" style=\"--_ga-column:2\/3;--_ga-row:1\/2;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)\">\n\n<div class=\"wp-block-image\"><figure class=\"alignright size-large\"><a href=\"https:\/\/www.ardpylab.fr\/?page_id=2683\"><img loading=\"lazy\" decoding=\"async\" width=\"50\" height=\"28\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/03\/plus.jpg\" alt=\"\" class=\"wp-image-106\"\/><\/a><\/figure><\/div>\n\n<\/div>\n<\/div><\/div>\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>(vers l\u2019Arduino) &nbsp; Pour r\u00e9pondre \u00e0 un besoin d\u2019information du programme t\u00e9l\u00e9vers\u00e9 dans la m\u00e9moire de l\u2019Arduino (valeurs d\u2019une variable, actions \u00e0 effectuer\u2026), il est parfois n\u00e9cessaire que le programme Python envoie des donn\u00e9es vers le microcontr\u00f4leur via le port s\u00e9rie. Pour cela, on utilise la fonction \u201dwrite()\u201d de l\u2019objet \u201dport s\u00e9rie\u201d&nbsp;cr\u00e9\u00e9 au pr\u00e9alable&nbsp;: SerialPort [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2678","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages\/2678","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2678"}],"version-history":[{"count":0,"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages\/2678\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2678"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}