{"id":269,"date":"2020-03-22T12:30:48","date_gmt":"2020-03-22T11:30:48","guid":{"rendered":"http:\/\/www.ardpylab.fr\/?page_id=269"},"modified":"2020-05-10T16:34:56","modified_gmt":"2020-05-10T14:34:56","slug":"la-communication-arduino-python","status":"publish","type":"page","link":"https:\/\/www.ardpylab.fr\/?page_id=269","title":{"rendered":"Communication Arduino\/Python"},"content":{"rendered":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-arduino-python.jpg\" alt=\"\" class=\"wp-image-2443\" width=\"250\" height=\"166\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-arduino-python.jpg 768w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-arduino-python-300x200.jpg 300w\" sizes=\"auto, (max-width: 250px) 100vw, 250px\" \/><\/figure><\/div>\n\n\n\n<h4>&nbsp;<\/h4>\n<h4><span style=\"color: #0000ff;\"><strong><u>Principe de fonctionnement<br><br><\/u><\/strong><\/span><\/h4>\n<p>Si les microcontr\u00f4leurs <strong>Arduino<\/strong> sont, de par leur conception, destin\u00e9es \u00e0 travailler de mani\u00e8re autonome, il est cependant int\u00e9ressant de les utiliser comme interface physique sur un ordinateur pour piloter directement des mat\u00e9riels ou r\u00e9cup\u00e9rer des informations issues de capteurs, \u00e0 des fins de traitement et d\u2019exploitations. Les donn\u00e9es, qu\u2019elles soient des commandes ou des informations, transiteront par la connexion USB qui \u00e9mule un port s\u00e9rie. C\u2019est ce qu\u2019on appelle la communication s\u00e9rie.<\/p>\n<p>Dans un premier temps, pour communiquer avec l\u2019Arduino, par liaison s\u00e9rie, on peut utiliser le moniteur s\u00e9rie du logiciel <strong>Arduino IDE,<\/strong> dans lequel ou \u00e0 partir duquel, on demandera au microcontr\u00f4leur, via le programme t\u00e9l\u00e9vers\u00e9 dans sa m\u00e9moire, d\u2019\u00e9crire ou de lire des donn\u00e9es.<\/p>\n<p>On peut alors \u00e9galement se servir d\u2019un programme en python sur l\u2019ordinateur, <strong>en remplacement du moniteur s\u00e9rie<\/strong>, pouvant lui aussi lire ou \u00e9crire des donn\u00e9es via le port s\u00e9rie.<\/p>\n<p>Avec cette m\u00e9thode de communication, le programme t\u00e9l\u00e9vers\u00e9 dans la m\u00e9moire de l\u2019Arduino est sp\u00e9cifique aux circuits \u00e9lectroniques ou aux capteurs connect\u00e9s \u00e0 la platine. Les ordres sont donn\u00e9s \u00e0 l\u2019Arduino par ce programme et c\u2019est lui qui \u00e9crit ou lit les informations qui transitent par le port s\u00e9rie. Le programme python ne fait que lire les donn\u00e9es envoy\u00e9es par l\u2019Arduino et \u00e9ventuellement r\u00e9pondre \u00e0 une demande d\u2019information du microcontr\u00f4leur.<\/p>\n<p>&nbsp;<\/p>\n<p>Il existe une autre m\u00e9thode de communication ARDUINO \/ PYTHON, appel\u00e9 protocole de communication <strong>Firmata, <\/strong>bas\u00e9 sur deux programmes&nbsp;:<\/p>\n<p>&#8211; un programme en Python \u00ab\u00a0donneur d\u2019ordres\u00a0\u00bb, sur l\u2019ordinateur,<\/p>\n<p>&#8211; un programme \u00ab\u00a0pilote\u00a0\u00bb, sur le microcontr\u00f4leur, qui comme son nom l\u2019indique, pilotera les mat\u00e9riels en r\u00e9ponse aux ordres re\u00e7us.<\/p>\n<p>Dans ce cas, le programme t\u00e9l\u00e9vers\u00e9 dans la m\u00e9moire de l\u2019Arduino est g\u00e9n\u00e9raliste et n\u2019est qu\u2019un interm\u00e9diaire entre le programme sp\u00e9cifique donneur d\u2019ordres sur l\u2019ordinateur et le mat\u00e9riel ou les capteurs connect\u00e9s au microcontr\u00f4leur.<\/p>\n<p>C\u2019est le programme en Python qui donne l\u2019ordre, via la connexion USB, d\u2019effectuer une action au microcontr\u00f4leur (par exemple, d\u00e9clarer une entr\u00e9e num\u00e9rique, lire l\u2019\u00e9tat logique d\u2019une entr\u00e9e, \u00e9crire sur une sortie, lire la valeur d\u2019un capteur\u2026).<br><br><br><\/p>\n\n\n\n<p><strong>1. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2456\" data-wplink-url-error=\"true\"><u>Le moniteur s\u00e9rie<\/u><\/a><\/strong><\/p>\n<p style=\"padding-left: 40px;\">1.1 <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2497\" data-wplink-url-error=\"true\"><u>Envoi de donn\u00e9es de l\u2019Arduino vers le moniteur s\u00e9rie<\/u><\/a><\/p>\n<p style=\"padding-left: 80px;\">. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2497\/#rec1\" data-wplink-url-error=\"true\">La fonction \u201d<strong>Serial.print()<\/strong>\u201d<\/a><br \/>. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2497\/#rec2\" data-wplink-url-error=\"true\">La fonction \u201d<strong>Serial.write()<\/strong>\u201d<\/a><\/p>\n<p style=\"padding-left: 40px;\">1.2 <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2522\" data-wplink-url-error=\"true\"><u>Envoi de donn\u00e9es du moniteur s\u00e9rie vers l\u2019Arduino <\/u><\/a><\/p>\n<p style=\"padding-left: 80px;\">. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2522\/#env1\" data-wplink-url-error=\"true\">Programme pour la r\u00e9ception d\u2019un caract\u00e8re\u00a0<\/a><br \/>. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2522\/#env2\" data-wplink-url-error=\"true\">Programme pour la r\u00e9ception d\u2019une chaine de caract\u00e8res<\/a><\/p>\n<p style=\"padding-left: 40px;\">1.3 <span style=\"text-decoration: underline;\"><a href=\"https:\/\/www.ardpylab.fr\/?page_id=2587\" data-wplink-url-error=\"true\">Conversion des donn\u00e9es<\/a><\/span><\/p>\n<p style=\"padding-left: 80px;\">. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2587\/#conv1\" data-wplink-url-error=\"true\">La fonction \u201d<strong>atoi()<\/strong>\u201d<\/a><br \/>. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2587\/#conv2\" data-wplink-url-error=\"true\">La fonction \u201d<strong>sscanf()<\/strong>\u201d<\/a><br \/>. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2587\/#conv3\" data-wplink-url-error=\"true\">La fonction \u201d<strong>Serial.parseInt()<\/strong>\u201d<\/a><\/p>\n<p><strong><u><br \/><\/u>2. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2613\" data-wplink-url-error=\"true\"><u>Communication Arduino &#8211; Python via le port s\u00e9rie<\/u><\/a><\/strong><\/p>\n<p style=\"padding-left: 40px;\">2.1 <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2674\" data-wplink-url-error=\"true\"><u>R\u00e9ception de donn\u00e9es envoy\u00e9es depuis l\u2019Arduino par un programme Python<\/u><\/a><\/p>\n<p style=\"padding-left: 80px;\">. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2674\/#rec1\" data-wplink-url-error=\"true\">Programme pour la r\u00e9ception d\u2019une chaine de caract\u00e8res<\/a><br \/>. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2674\/#rec2\" data-wplink-url-error=\"true\">Programme pour la conversion d\u2019une chaine de caract\u00e8res en nombre<\/a><\/p>\n<p style=\"padding-left: 40px;\">2.2 <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2678\" data-wplink-url-error=\"true\"><u>Envoi de donn\u00e9es par un programme Python vers l\u2019Arduino<\/u><\/a><\/p>\n<p style=\"padding-left: 40px;\">2.3 <u><a href=\"https:\/\/www.ardpylab.fr\/?page_id=2683\" data-wplink-url-error=\"true\">R\u00e9ception et envoi de donn\u00e9es simultan\u00e9ment par un programme Python<\/a><br \/><br \/><\/u><\/p>\n<p><strong>3. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2725\" data-wplink-url-error=\"true\"><u>Communication Arduino-Python via le protocole de communication Firmata<\/u><\/a><\/strong><\/p>\n<p style=\"padding-left: 40px;\">3.1 <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2739\" data-wplink-url-error=\"true\"><u>le protocole de communication \u201d<strong>Firmata Standard<\/strong>\u201d<\/u><\/a><\/p>\n<p style=\"padding-left: 80px;\">. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2754\" data-wplink-url-error=\"true\">Gestion des sorties num\u00e9riques<\/a><br \/>. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2784\" data-wplink-url-error=\"true\">Gestion des entr\u00e9es num\u00e9riques<\/a><br \/>. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2808\" data-wplink-url-error=\"true\">Gestion des sorties analogiques<\/a><br \/>. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2831\" data-wplink-url-error=\"true\">Gestion des entr\u00e9es analogiques<\/a>\u00a0<\/p>\n<p style=\"padding-left: 40px;\">3.2 <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2852\" data-wplink-url-error=\"true\"><u>le protocole de communication \u201d<strong>Firmata Express<\/strong>\u201d<\/u><\/a><\/p>\n<p style=\"padding-left: 80px;\">. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2876\" data-wplink-url-error=\"true\">Gestion des sorties num\u00e9riques<\/a><br \/>. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2905\" data-wplink-url-error=\"true\">Gestion des entr\u00e9es num\u00e9riques<\/a><br \/>. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2922\" data-wplink-url-error=\"true\">Gestion des sorties analogiques<\/a><br \/>. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2942\" data-wplink-url-error=\"true\">Gestion des entr\u00e9es analogiques<\/a><br \/>. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2969\" data-wplink-url-error=\"true\">La prise en charge de la biblioth\u00e8que Arduino \u201d<strong>Tone<\/strong>\u201d<\/a><br \/>. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2987\" data-wplink-url-error=\"true\">La prise en charge des capteurs ultrasoniques<\/a><br \/><br \/><\/p>\n<p><strong>4. <a href=\"https:\/\/www.ardpylab.fr\/?page_id=3031\" data-wplink-url-error=\"true\"><u>Synth\u00e8se de la communication Arduino-Python<\/u><\/a><\/strong><\/p>\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=2370\"><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=2456\"><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>","protected":false},"excerpt":{"rendered":"<p>&nbsp; Principe de fonctionnement Si les microcontr\u00f4leurs Arduino sont, de par leur conception, destin\u00e9es \u00e0 travailler de mani\u00e8re autonome, il est cependant int\u00e9ressant de les utiliser comme interface physique sur un ordinateur pour piloter directement des mat\u00e9riels ou r\u00e9cup\u00e9rer des informations issues de capteurs, \u00e0 des fins de traitement et d\u2019exploitations. Les donn\u00e9es, qu\u2019elles soient [&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-269","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages\/269","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=269"}],"version-history":[{"count":0,"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages\/269\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}