{"id":1018,"date":"2013-04-26T20:51:23","date_gmt":"2013-04-26T18:51:23","guid":{"rendered":"http:\/\/ubik75.com\/?p=1018"},"modified":"2013-05-07T19:00:40","modified_gmt":"2013-05-07T17:00:40","slug":"bus-i2c-liaison-nxt-carte-arduino","status":"publish","type":"post","link":"http:\/\/ubik75.com\/?p=1018","title":{"rendered":"Bus I2C, liaison NXT carte Arduino, partie 1."},"content":{"rendered":"<p style=\"text-align: justify;\">Le bus I2C est un bus de donn\u00e9es s\u00e9rie synchrone bidirectionnel half-duplex.\u00a0Plusieurs\u00a0\u00e9quipements\u00a0peuvent se connecter au bus I2C. Les \u00e9changes ont toujours lieu entre un seul ma\u00eetre et un ou plusieurs esclaves toujours \u00e0 l&rsquo;initiative du ma\u00eetre. Apr\u00e8s cette d\u00e9finition quelque peu \u00ab\u00a0Wikip\u00e9diaine\u00a0\u00bb et avoir vu quelques\u00a0articles\u00a0sur le net, je me suis d\u00e9cid\u00e9 \u00e0 relier une brique NXT \u00e0 une carte Arduino.<\/p>\n<p><!--more--><\/p>\n<p><span style=\"text-decoration: underline;\"><strong>Le mat\u00e9riel:<\/strong><\/span><\/p>\n<ul>\n<li>Une carte Arduino UNO REV3<\/li>\n<li>Une brique NXT<\/li>\n<li>Un cable de liaison LEGO sacrifi\u00e9<\/li>\n<li>2 r\u00e9sistances de 47 K<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">La connexion entre le NXT et la carte Arduino est r\u00e9alis\u00e9e par deux lignes, une ligne de donn\u00e9es bidirectionnelles SDA et une ligne\u00a0d\u2019horloge\u00a0de synchronisation bidirectionnelle SCL. Les masses doivent \u00eatre communes.<\/p>\n<p style=\"text-align: justify;\">Comme je ne\u00a0poss\u00e8de\u00a0pas de connecteur NXT, j&rsquo;ai sacrifi\u00e9 un c\u00e2ble en le coupant d&rsquo;un c\u00f4t\u00e9. Le c\u00e2ble contient 6 fils, un vert, un bleu, un jaune, un noir, un blanc et un rouge. Les fils qui m&rsquo;int\u00e9ressent sont les fils bleu (SDA NXT), jaune (SCL NXT), vert (4,3V venant du NXT) et le rouge (GND).<\/p>\n<p><strong><span style=\"text-decoration: underline;\">Plan de cabl\u00e2ge:<\/span><\/strong><\/p>\n<p><a href=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/connecteur.jpg\" rel=\"lightbox\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1064\" data-permalink=\"http:\/\/ubik75.com\/?attachment_id=1064\" data-orig-file=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/connecteur.jpg\" data-orig-size=\"340,245\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;ubik&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1366974051&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"connecteur\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/connecteur-300x216.jpg\" data-large-file=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/connecteur.jpg\" class=\"aligncenter size-medium wp-image-1064\" title=\"connecteur\" src=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/connecteur-300x216.jpg\" alt=\"\" width=\"300\" height=\"216\" srcset=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/connecteur-300x216.jpg 300w, http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/connecteur.jpg 340w\" sizes=\"auto, (max-width: 300px) 85vw, 300px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/photo2.jpg\" rel=\"lightbox\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1067\" data-permalink=\"http:\/\/ubik75.com\/?attachment_id=1067\" data-orig-file=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/photo2.jpg\" data-orig-size=\"1000,750\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;3.3&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;DMC-TZ30&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1366975249&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;4.3&quot;,&quot;iso&quot;:&quot;400&quot;,&quot;shutter_speed&quot;:&quot;0.066666666666667&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"photo2\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/photo2-300x225.jpg\" data-large-file=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/photo2.jpg\" class=\"aligncenter size-medium wp-image-1067\" title=\"photo2\" src=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/photo2-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/photo2-300x225.jpg 300w, http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/photo2-400x300.jpg 400w, http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/photo2.jpg 1000w\" sizes=\"auto, (max-width: 300px) 85vw, 300px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/plancablage1.jpg\" rel=\"lightbox\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1061\" data-permalink=\"http:\/\/ubik75.com\/?attachment_id=1061\" data-orig-file=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/plancablage1.jpg\" data-orig-size=\"608,402\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;ubik&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1366974372&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"plancablage\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/plancablage1-300x198.jpg\" data-large-file=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/plancablage1.jpg\" class=\"aligncenter size-medium wp-image-1061\" title=\"plancablage\" src=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/plancablage1-300x198.jpg\" alt=\"\" width=\"300\" height=\"198\" srcset=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/plancablage1-300x198.jpg 300w, http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/plancablage1-453x300.jpg 453w, http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/plancablage1.jpg 608w\" sizes=\"auto, (max-width: 300px) 85vw, 300px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/photo1.jpg\" rel=\"lightbox\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1068\" data-permalink=\"http:\/\/ubik75.com\/?attachment_id=1068\" data-orig-file=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/photo1.jpg\" data-orig-size=\"1000,750\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;3.3&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;DMC-TZ30&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1366975211&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;4.3&quot;,&quot;iso&quot;:&quot;200&quot;,&quot;shutter_speed&quot;:&quot;0.016666666666667&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"photo1\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/photo1-300x225.jpg\" data-large-file=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/photo1.jpg\" class=\"aligncenter size-medium wp-image-1068\" title=\"photo1\" src=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/photo1-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/photo1-300x225.jpg 300w, http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/photo1-400x300.jpg 400w, http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/photo1.jpg 1000w\" sizes=\"auto, (max-width: 300px) 85vw, 300px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Ne pas oublier de mettre les deux r\u00e9sistances car l&rsquo;I2C sur le NXT n\u00e9cessite des r\u00e9sistances de pull-up. Les valeurs typiques \u00e0 utiliser sont de 82K, mais n&rsquo;en ayant pas sous la main, j&rsquo;ai mis des r\u00e9sistances de 47K. Vous trouverez plus d&rsquo;informations sur le bus I2C \u00e0 cette\u00a0<a href=\"https:\/\/fr.wikipedia.org\/wiki\/I2C\" target=\"_blank\">adresse<\/a>.<\/p>\n<p><strong><span style=\"text-decoration: underline;\">Le programme:<\/span><\/strong><\/p>\n<p style=\"text-align: justify;\">Chaque p\u00e9riph\u00e9rique I2C a une adresse unique, il faut fixer l\u2019adresse de l\u2019esclave connect\u00e9 sur le port S1 du NXT (carte Arduino) \u00e0 0x0A. Petite particularit\u00e9, il existe deux versions du bus I2C, la version 7 bits et la version 8 bits. LEGO a choisi d&rsquo;utiliser la version 7 bits, avec un d\u00e9calage vers la gauche afin de faire appara\u00eetre le dernier bit correspondant \u00e0 l&rsquo;action effectu\u00e9e, lecture (valeur 1) ou \u00e9criture (valeur 0).<\/p>\n<p style=\"text-align: justify;\">Programme Arduino:<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\n\/\/ A4 - SDA\r\n\/\/ A5 - SCL\r\n#include\r\nbyte read_register = 0x00;\r\nString valeur,valeur1;\r\n\r\nvoid setup()\r\n{\r\n Wire.begin(0x0A); \/\/ Adresse carte Arduino\r\n Wire.onRequest(requestEvent); \/\/ Envoi data\r\n Wire.onReceive(receiveI2C); \/\/ Reception data\r\n Serial.begin(9600);\r\n}\r\n\r\nvoid loop()\r\n{\r\n valeur = String(analogRead(A0),DEC); \/\/ conversion entr\u00e9e ana A0 de Int en String\r\n valeur1 = String(analogRead(A1),DEC);\/\/ conversion entr\u00e9e ana A1 de Int en String\r\n delay(100);\r\n}\r\n\r\n\/\/ Demande du NXT la proc\u00e9dure est lanc\u00e9e\r\nvoid receiveI2C(int bytesIn)\r\n{\r\n read_register = bytesIn;\r\n while(1 &lt; Wire.available())\r\n {\r\n read_register = Wire.read();\r\n Serial.print(read_register);\r\n }\r\n int x = Wire.read(); \/\/ Lecture octet du NXT\r\n Serial.println(x); \/\/ Affichage octet du NXT sur moniteur s\u00e9rie\r\n}\r\n\/\/ proc\u00e9dure envoie des valeurs ana A0 ou A1 au NXT pour affichage\r\nvoid requestEvent()\r\n{\r\n if(read_register == 0x01){\r\n int v= analogRead(A0);\r\n Serial.println(v);\r\n char buffer&#x5B;32];\r\n valeur.toCharArray(buffer, 10); \/\/ conversion string en char\r\n Wire.write(buffer); \/\/ envoi de la r\u00e9ponse au NXT pour affichage\r\n }\r\n if(read_register == 0x02){\r\n int v= analogRead(A1);\r\n Serial.println(v);\r\n char buffer&#x5B;32];\r\n valeur1.toCharArray(buffer, 10); \/\/ conversion string en char\r\n Wire.write(buffer); \/\/ envoi de la r\u00e9ponse au NXT pour affichage\r\n }\r\n\r\n}\r\n<\/pre>\n<p style=\"text-align: justify;\">Ligne 9: affectation de l&rsquo;adresse \u00e0 la carte Arduino (esclave), 0x0A qui correspond en binaire \u00e0 0000 1010. Dans le programme RobotC avec le d\u00e9calage vers la gauche et ajout du z\u00e9ro (\u00e9criture au niveau de l&rsquo;esclave) on a l&rsquo;adresse 0x14 correspondant en binaire \u00e0 0001 0100.<\/p>\n<p style=\"text-align: justify;\">Dans la boucle <strong>Loop,<\/strong> je lis les entr\u00e9es analogiques A0 et A1 toutes les 100ms. D\u00e8s que le NXT\u00a0envoie\u00a0une demande, la <strong>proc\u00e9durevoid receiveI2C(int bytesIn)<\/strong> est lanc\u00e9e, elle r\u00e9cup\u00e8re la demande du NXT, ici 0x01 ou 0x02. En fonction de la valeur choisie, la proc\u00e9dure\u00a0<strong>void requestEvent()<\/strong>\u00a0envoie au NXT l&rsquo;information demand\u00e9e.<\/p>\n<p>Programme RobotC:<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\n#pragma config(Sensor, S1,TIR,sensorI2CCustom)\r\n\r\n#define ARDUINO_ADDRESS 0x14 \/\/ adresse carte Arduino\r\n#define ARDUINO_PORT S1\r\n\r\nubyte I2Cmessage&#x5B;22];\r\nchar I2Creply&#x5B;20];\r\nstring str1;\r\nstring str2;\r\nstring str3;\r\nstring strtotal;\r\nint valeur = 0;\r\nint j = 1;\r\n\r\nvoid i2c_read_registers_text(ubyte register_2_read, int message_size, int return_size){\r\n memset(I2Creply, 0, sizeof(I2Creply));\r\n message_size = message_size+3;\r\n\r\nI2Cmessage&#x5B;0] = message_size;\r\n I2Cmessage&#x5B;1] = ARDUINO_ADDRESS;\r\n I2Cmessage&#x5B;2] = register_2_read;\r\n sendI2CMsg(S1, &amp;I2Cmessage&#x5B;0], return_size);\r\n wait1Msec(20);\r\n\r\nreadI2CReply(ARDUINO_PORT, &amp;I2Creply&#x5B;0], return_size);\r\n\r\nint i = 0;\r\n while(true){\r\n writeDebugStream(&quot;%c&quot;, I2Creply&#x5B;i]);\r\n str1 = I2Creply&#x5B;0]; \/\/ Mise en memoire des valeurs pour affichage\r\n str2 = I2Creply&#x5B;1]; \/\/ Mise en memoire des valeurs pour affichage\r\n str3 = I2Creply&#x5B;2]; \/\/ Mise en memoire des valeurs pour affichage\r\n wait1Msec(50);\r\n i++;\r\n\r\nif(I2Creply&#x5B;i] == 0){\r\n if (j == 1){\r\n strtotal = str1 + str2; \/\/ Mise en forme pour affichage\r\n strtotal = strtotal + str3; \/\/ Mise en forme pour affichage\r\n valeur = atoi(strtotal); \/\/ convertion string vers int avec atoi()\r\n nxtDisplayString(2, &quot;Input A0:%3u&quot;, valeur); \/\/ affichage ecran NXT\r\n }\r\n if (j == 2){\r\n strtotal = str1 + str2; \/\/ Mise en forme pour affichage\r\n strtotal = strtotal + str3; \/\/ Mise en forme pour affichage\r\n valeur = atoi(strtotal); \/\/ convertion string vers int avec atoi()\r\n nxtDisplayString(4, &quot;Input A1:%3u &quot;, valeur); \/\/ affichage ecran NXT\r\n }\r\n if (j == 1){\r\n j = 2;\r\n }\r\n else{\r\n j = 1;\r\n }\r\n\r\nbreak;\r\n }\r\n }\r\n writeDebugStreamLine(&quot; &quot;);\r\n}\r\n\r\ntask main()\r\n{\r\n while(true){\r\n if (j == 1){\r\n i2c_read_registers_text(0x01, 0,3); \/\/ Demande valeur input A0 3 octets\r\n wait1Msec(5000);\r\n }\r\n if (j == 2){\r\n i2c_read_registers_text(0x02, 0, 3); \/\/ Demande valeur input A1 3 octets\r\n wait1Msec(5000);\r\n }\r\n }\r\n}\r\n<\/pre>\n<p>En lan\u00e7ant les deux programmes, on obtient:<\/p>\n<p><a href=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/Affichage2.jpg\" rel=\"lightbox\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1057\" data-permalink=\"http:\/\/ubik75.com\/?attachment_id=1057\" data-orig-file=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/Affichage2.jpg\" data-orig-size=\"900,387\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;ubik&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1366968048&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"Affichage2\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/Affichage2-300x129.jpg\" data-large-file=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/Affichage2.jpg\" class=\"aligncenter size-medium wp-image-1057\" title=\"Affichage2\" src=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/Affichage2-300x129.jpg\" alt=\"\" width=\"300\" height=\"129\" srcset=\"http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/Affichage2-300x129.jpg 300w, http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/Affichage2-500x215.jpg 500w, http:\/\/ubik75.com\/wp-content\/uploads\/2013\/04\/Affichage2.jpg 900w\" sizes=\"auto, (max-width: 300px) 85vw, 300px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">De gauche \u00e0 droite, on a le moniteur s\u00e9rie de l&rsquo;IDE Arduino, la fen\u00eatre de debug de RobotC et l&rsquo;affichage sur le NXT. On obtient des valeurs\u00a0coh\u00e9rentes \u00e0 quelques pions pr\u00e8s.<\/p>\n<p style=\"text-align: justify;\">Le test est concluant et est fonctionnel, je vais\u00a0approfondir\u00a0avec l&rsquo;utilisation des sorties num\u00e9riques de la carte Arduino.<\/p>\n<p>Quelques articles int\u00e9ressants sur l&rsquo;I2C du NXT:\u00a0<a href=\"http:\/\/botbench.com\/blog\/2009\/11\/08\/robotc-i2c-howto-part-i\/\" target=\"_blank\">article 1<\/a>\u00a0et\u00a0<a href=\"http:\/\/botbench.com\/blog\/2010\/05\/20\/using-the-robotc-i2c-test-utility\/\" target=\"_blank\">article 2<\/a>.<\/p>\n<p>Version optimis\u00e9e du code Arduino:<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\n\r\n\/\/ A4 - SDA\r\n\/\/ A5 - SCL\r\n#include &lt;Wire.h&gt;\r\nbyte read_register = 0x00;\r\nString valeur,valeur1;\r\nchar buffer&#x5B;32], buffer1&#x5B;32];\r\n\r\nvoid setup()\r\n{\r\nWire.begin(0x0A); \/\/ Adresse carte Arduino\r\nWire.onRequest(requestEvent); \/\/ Envoi data\r\nWire.onReceive(receiveI2C); \/\/ Reception data\r\nSerial.begin(9600);\r\n}\r\n\r\nvoid loop()\r\n{\r\nvaleur = String(analogRead(A0),DEC); \/\/ conversion entr\u00e9e ana A0 de Int en String\r\nvaleur.toCharArray(buffer, 10); \/\/ conversion string en char\r\nvaleur1 = String(analogRead(A1),DEC);\/\/ conversion entr\u00e9e ana A1 de Int en String\r\nvaleur1.toCharArray(buffer1, 10); \/\/ conversion string en char\r\ndelay(100);\r\n}\r\n\r\n\/\/ Demande du NXT la proc\u00e9dure est lanc\u00e9e\r\nvoid receiveI2C(int bytesIn)\r\n{\r\nread_register = bytesIn;\r\nwhile(1 &lt; Wire.available())\r\n{\r\nread_register = Wire.read();\r\n}\r\n}\r\n\/\/ proc\u00e9dure envoie des valeurs ana A0 ou A1 au NXT pour affichage\r\nvoid requestEvent()\r\n{\r\nif(read_register == 0x01){\r\nWire.write(buffer); \/\/ envoi de la r\u00e9ponse au NXT pour affichage\r\n}\r\nif(read_register == 0x02){\r\nWire.write(buffer1); \/\/ envoi de la r\u00e9ponse au NXT pour affichage\r\n}\r\n}\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/ubik75.com\/wp-content\/plugins\/thumbnail-for-excerpts\/tfe_no_thumb.png\" class=\"alignleft wp-post-image tfe\" alt=\"\" title=\"\" \/><p>Le bus I2C est un bus de donn\u00e9es s\u00e9rie synchrone bidirectionnel half-duplex.\u00a0Plusieurs\u00a0\u00e9quipements\u00a0peuvent se connecter au bus I2C. Les \u00e9changes ont toujours lieu entre un seul ma\u00eetre et un ou plusieurs esclaves toujours \u00e0 l&rsquo;initiative du ma\u00eetre. Apr\u00e8s cette d\u00e9finition quelque peu \u00ab\u00a0Wikip\u00e9diaine\u00a0\u00bb et avoir vu quelques\u00a0articles\u00a0sur le net, je me suis d\u00e9cid\u00e9 \u00e0 relier une &hellip; <a href=\"http:\/\/ubik75.com\/?p=1018\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;Bus I2C, liaison NXT carte Arduino, partie 1.&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[3,7,9],"tags":[54,109,131],"class_list":["post-1018","post","type-post","status-publish","format-standard","hentry","category-arduino","category-materiel","category-nxt","tag-arduino-2","tag-i2c","tag-nxt"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2eCSX-gq","jetpack_likes_enabled":true,"_links":{"self":[{"href":"http:\/\/ubik75.com\/index.php?rest_route=\/wp\/v2\/posts\/1018","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/ubik75.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/ubik75.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/ubik75.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/ubik75.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1018"}],"version-history":[{"count":66,"href":"http:\/\/ubik75.com\/index.php?rest_route=\/wp\/v2\/posts\/1018\/revisions"}],"predecessor-version":[{"id":1125,"href":"http:\/\/ubik75.com\/index.php?rest_route=\/wp\/v2\/posts\/1018\/revisions\/1125"}],"wp:attachment":[{"href":"http:\/\/ubik75.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/ubik75.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1018"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/ubik75.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}