{"id":2287,"date":"2025-03-24T14:36:24","date_gmt":"2025-03-24T19:36:24","guid":{"rendered":"http:\/\/ve2cuy.com\/420-1c4\/?page_id=2287"},"modified":"2025-03-24T16:15:20","modified_gmt":"2025-03-24T21:15:20","slug":"ecoute-moi-jaimerais-te-parler","status":"publish","type":"page","link":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/ecoute-moi-jaimerais-te-parler\/","title":{"rendered":"\u00c9coute-moi, j&rsquo;aimerais te parler"},"content":{"rendered":"\n<h2 class=\"wp-block-heading has-text-align-center has-vivid-green-cyan-color has-text-color\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">Communication<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">entre deux<\/mark> Arduino<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"932\" height=\"700\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/Capture-decran-le-2022-11-11-a-12.51.36.png\" alt=\"\" class=\"wp-image-2291\" style=\"width:473px;height:355px\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/Capture-decran-le-2022-11-11-a-12.51.36.png 932w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/Capture-decran-le-2022-11-11-a-12.51.36-300x225.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/Capture-decran-le-2022-11-11-a-12.51.36-768x577.png 768w\" sizes=\"auto, (max-width: 932px) 100vw, 932px\" \/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">1 &#8211; Mise en situation<\/h2>\n\n\n\n<p>Dans les exemples suivants, nous verrons comment transmettre des informations d&rsquo;un <strong><em>Arduino<\/em><\/strong> vers un autre en utilisant le protocole s\u00e9rie (<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">UART<\/mark><\/strong> \/ <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">RS-232<\/mark><\/strong> \/ <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">COM PORT<\/mark><\/strong>).<\/p>\n\n\n\n<p>Le protocole s\u00e9rie utilise deux broches pour l&rsquo;\u00e9change des donn\u00e9es; une broche pour la r\u00e9ception (<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">RX<\/mark><\/strong>) et une broche pour la transmission (<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">TX<\/mark><\/strong>)<\/p>\n\n\n\n<p>Dans le cas d&rsquo;un Arduino Uno ces broches sont <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">D0 (RX0)<\/mark><\/strong> et <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">D1 (TX0)<\/mark><\/strong>.<\/p>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">L&rsquo;Arduino Uno ne poss\u00e8de qu&rsquo;un seul port s\u00e9rie.<\/mark><\/strong>  <\/p>\n\n\n\n<p>De plus, si nous utilisons la console s\u00e9rie pour y afficher des messages alors le port s\u00e9rie du <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">UNO<\/mark><\/strong> ne sera pas disponible pour le transfert d&rsquo;information vers d&rsquo;autres appareils.<\/p>\n\n\n\n<p><strong>Ce n&rsquo;est pas le cas pour tous les Arduino<\/strong>.  <\/p>\n\n\n\n<p>Par exemple, l&rsquo;<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Arduino Mega<\/mark><\/strong> propose 4 ports s\u00e9ries (UART0-UART3).  <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"521\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/Bluno_Mega_pinout-1024x521.png\" alt=\"\" class=\"wp-image-2297\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/Bluno_Mega_pinout-1024x521.png 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/Bluno_Mega_pinout-300x153.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/Bluno_Mega_pinout-768x391.png 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/Bluno_Mega_pinout.png 1473w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 &#8211; Simulation d&rsquo;un port s\u00e9rie via la librairie SotfwareSerial<\/h3>\n\n\n\n<p>Il est possible d&rsquo;utiliser des broches digitales standards pour reproduire le comportement et les fonctions d&rsquo;un port UART en utilisant la librairie <strong><em>SotfwareSerial<\/em><\/strong>.  Cette librairie est disponible par d\u00e9faut dans l&rsquo;environnement de <strong><em>Arduino IDE<\/em><\/strong>, c-a-d, qu&rsquo;il n&rsquo;est pas n\u00e9cessaire de l&rsquo;installer.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">1.2 &#8211; Connexion de deux appareils pour la communication via UART<\/h3>\n\n\n\n<p>Si nous d\u00e9sirons relier deux appareils ensemble qui utiliseront leur port UART pour la communication, il faut relier la broche RX du premier sur la broche TX du deuxi\u00e8me.  Puis la broche TX du premier sur la broche RX du deuxi\u00e8me.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"594\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/comh_asc-1024x594.jpg\" alt=\"\" class=\"wp-image-2302\" style=\"width:349px;height:204px\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/comh_asc-1024x594.jpg 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/comh_asc-300x174.jpg 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/comh_asc-768x445.jpg 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/comh_asc-1536x891.jpg 1536w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/comh_asc-2048x1188.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>Avec l&rsquo;utilisation du Grove Hat, il sera possible d&rsquo;inverser les broches RX\/TX dans les param\u00e8tres de configurations du port UART logiciel.<\/p>\n\n\n\n<p>Par exemple, deux Arduino UNO reli\u00e9s par un c\u00e2ble sur le port D4 du Hat Grove pourront \u00eatre configur\u00e9s de la fa\u00e7on suivante:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">SoftwareSerial portSerieTransmetteur(4, 5); \/\/ RX, TX\nSoftwareSerial portSerieRecepteur(5, 4);    \/\/ RX, TX<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-luminous-vivid-orange-color has-text-color\">2a &#8211; Communication entre deux Arduino via UART physique<\/h2>\n\n\n\n<p class=\"has-text-align-left\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">NOTE<\/mark><\/strong>: Pour l&rsquo;exemple suivant, il est important d&rsquo;utiliser le c\u00e2ble avec les fils blanc et jaune invers\u00e9s.<\/p>\n\n\n\n<p>Il faut relier le Mega et le Uno de la fa\u00e7on suivante:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Le port UART0 du Uno branch\u00e9 sur<\/li>\n\n\n\n<li>le port UART2 du Mega<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2a.1 &#8211; Le code du transmetteur (UNO)<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n  Relier deux Arduino via le port UART physique\n  Code du transmetteur - sur le UNO\n  NOTE: Il est important d'utiliser le c\u00e2ble avec les fils blanc et jaune invers\u00e9s\n  *\/\n\n#include &lt;Arduino.h>\n#include \"rgb_lcd.h\"\n#include \"Streaming.h\"\n\n#define UART_RX             6\n#define UART_TX             7\n#define UART_VITESSE        9600\n#define MAX_NB_ALEATOIRE    99\n#define UNE_SECONDE         1000\n#define LCD_DEUXIEME_LIGNE  1\n#define LCD_NB_LIGNE        2\n#define LCD_NB_COL          16\n#define transmetteur        Serial\n\nrgb_lcd lcd;\n\n\/\/--------------------------------------------------------\nvoid setup() {\n  \/\/ port natif utilis\u00e9 pour la transmission vers le Mega\n  transmetteur.begin(UART_VITESSE); \n  lcd.begin(LCD_NB_COL,LCD_NB_LIGNE);\n  lcd.print(\"Transmetteur\");\n} \/\/ setup()\n\n\/\/--------------------------------------------------------\nvoid loop() {\n   \/\/ Transmettre un code \u00e0 chaque seconde  \n   \/\/ g\u00e9n\u00e9rer un nombre entre 0 et MAX_NB_ALEATOIRE - 1\n   byte unCode = random(MAX_NB_ALEATOIRE); \n   transmetteur.write(unCode);\n   lcd.setCursor(0, LCD_DEUXIEME_LIGNE);\n   lcd &lt;&lt; \"Envoi de: \" &lt;&lt; unCode;\n   delay(UNE_SECONDE);\n} \/\/ loop()\n\n\/*\n[env:uno]\nplatform = atmelavr\nboard = uno\nframework = arduino\nlib_deps =\n  seeed-studio\/Grove - LCD RGB Backlight @ ^1.0.2\n  mikalhart\/Streaming @ ^1.0.0\n*\/<\/pre>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">NOTE<\/mark><\/strong> <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">&#8212;&gt;<\/mark><\/strong> : Il est pr\u00e9f\u00e9rable que les deux Arduino ne soient pas reli\u00e9s ensemble lors du t\u00e9l\u00e9versement vers le UNO.  Le port &lsquo;<strong><em>Serial0<\/em><\/strong>&lsquo; sert \u00e0 programmer les Arduino. <\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">2a.2 &#8211; Le code du r\u00e9cepteur (MEGA)<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Arduino.h>\n\/*\n Code du r\u00e9cepteur - sur le Mega\n*\/\n\n#define UART_VITESSE        9600\n\/\/ Le RX du UNO doit \u00eatre connect\u00e9 au TX du MEGA et TX -> RX\n\/\/ Utiliser le cable avec les fils jaune et blanc invers\u00e9s\n\/\/ Connecter le UNO sur le port Serial2 du MEGA\n#define recepteur           Serial2 \n\n\/\/--------------------------------------------------------\nvoid setup() {\n  Serial.begin(UART_VITESSE);\n  Serial.println(\"D\u00e9marrage du r\u00e9cepteur...\");\n  recepteur.begin(UART_VITESSE);\n}\n\n\/\/--------------------------------------------------------\nvoid loop() {  \n  byte unCode;\n  if (recepteur.available()) {\n    unCode = recepteur.read();\n    \/\/ afficher la valeur du byte re\u00e7u\n    Serial.print(\"Code recu = \");\n    Serial.println(unCode);\n   } \/\/ si byte disponible sur le UART\n}<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2a.3 &#8211; <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Laboratoire<\/mark><\/h2>\n\n\n\n<p>A &#8211; Il faut modifier le code pr\u00e9c\u00e9dent pour permettre une transmission\/r\u00e9ception de 115200 bauds.<\/p>\n\n\n\n<p>Est-ce que le montage fonctionne \u00e0 cette vitesse?  Si oui, Est-ce que la r\u00e9ception est fid\u00e8le?<\/p>\n\n\n\n<p>B &#8211; Et pour une vitesse de 256000 bauds?<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2b &#8211; Connexion via SoftwareSerial<\/h2>\n\n\n\n<p>Pour le prochain laboratoire, il faut relier un <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">Arduino Mega<\/mark><\/strong> et un <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">Arduino UNO<\/mark><\/strong> en pla\u00e7ant un c\u00e2ble entre les les connecteurs <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">D6 (UNO) et D10 (MEGA)<\/mark><\/strong>.  Nous utiliserons une connexion UART simul\u00e9e par logiciel en utilisant la librairie &lsquo;<em><strong>SoftwareSerial<\/strong><\/em>&lsquo;.<\/p>\n\n\n\n<p>Rappel,  il faut inverser les signaux:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">SoftwareSerial portSerieTransmetteur(6, 7); \/\/ RX, TX\nSoftwareSerial portSerieRecepteur(11, 10);  \/\/ RX, TX<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2b.1 &#8211; Code source du transmetteur &#8211; le UNO<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n  Relier deux Arduino via le port UART physique\n  Code du TRANSMETTEUR - sur le UNO\n*\/\n\n#include &lt;Arduino.h>\n#include \"rgb_lcd.h\"\n#include \"Streaming.h\"\n#include &lt;SoftwareSerial.h>\n\n#define UART_RX             6\n#define UART_TX             7\n\n#define UART_VITESSE        9600\n#define MAX_NB_ALEATOIRE    99\n#define UNE_SECONDE         1000\n#define LCD_DEUXIEME_LIGNE  1\n#define LCD_NB_LIGNE        2\n#define LCD_NB_COL          16\n\nrgb_lcd lcd;\nSoftwareSerial transmetteur(UART_RX, UART_TX); \/\/ RX, TX\n\n\/\/--------------------------------------------------------\nvoid setup() {\n  Serial.begin(UART_VITESSE); \/\/ Disponible pour les traces dans cet exemple!\n  Serial &lt;&lt; \"D\u00e9marrage du transmetteur...\" &lt;&lt; endl;\n\n  transmetteur.begin(UART_VITESSE); \n  lcd.begin(LCD_NB_COL,LCD_NB_LIGNE);\n  lcd.print(\"Transmetteur\");\n} \/\/ setup()\n\n\/\/--------------------------------------------------------\nvoid loop() {\n   \/\/ Transmettre un code \u00e0 chaque seconde  \n   \/\/ g\u00e9n\u00e9rer un nombre entre 0 et MAX_NB_ALEATOIRE - 1\n   byte unCode = random(MAX_NB_ALEATOIRE); \n   Serial &lt;&lt; \"Envoi de: \" &lt;&lt; unCode &lt;&lt; endl;\n   transmetteur.write(unCode);\n   lcd.setCursor(0, LCD_DEUXIEME_LIGNE);\n   lcd &lt;&lt; \"Envoi de: \" &lt;&lt; unCode;\n   delay(UNE_SECONDE);\n} \/\/ loop()<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2b.2 &#8211; Code source du r\u00e9cepteur &#8211; Le Mega<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n Code du RECEPTEUR - sur le Mega\n*\/\n\n#include &lt;Arduino.h>\n#include &lt;SoftwareSerial.h>\n\n#define UART_VITESSE        9600\n\/\/ Le UNO et le MEGA sont reli\u00e9s par les ports D6\/D7 &lt;-> D11\/D10\n\/\/ ATTENTION aux ports disponibles sur le MEGA pour SoftwareSerial  \n#define UART_RX             10 \n#define UART_TX             11\n\nSoftwareSerial recepteur(UART_TX, UART_RX); \/\/ l'inverse du transmetteur\n\n\/\/ --------------------------------------------------------\nvoid setup() {\n  Serial.begin(UART_VITESSE);\n  Serial.println(\"D\u00e9marrage du r\u00e9cepteur...\");\n  recepteur.begin(UART_VITESSE);\n}\n\n\/\/ --------------------------------------------------------\nvoid loop() {  \n  byte unCode;\n  if (recepteur.available()) {\n    unCode = recepteur.read();\n    \/\/ afficher la valeur du byte re\u00e7u\n    Serial.print(\"Code recu = \");\n    Serial.println(unCode);\n   } \/\/ si byte disponible sur le UART\n}<\/pre>\n\n\n\n<p>R\u00e9sultat:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">D\u00e9marrage du r\u00e9cepteur...\nCode recu = 82\nCode recu = 64\nCode recu = 87\n...<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"has-vivid-red-color has-text-color\"><strong>NOTE IMPORTANTE:<\/strong><\/p>\n\n\n\n<p>L&rsquo;<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Arduino MEGA<\/mark><\/strong> ne permet pas d&rsquo;impl\u00e9menter le <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">UART<\/mark><\/strong>, via la librairie <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">SoftwareSerial<\/mark><\/em><\/strong>, en mode r\u00e9ception sur toutes ses broches.  Il faut se limiter aux broches suivantes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\"><strong>10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68) et A15 (69).<\/strong><\/mark><\/li>\n<\/ul>\n\n\n\n<p>Par contre, en mode transmission, il n&rsquo;y a pas cette contrainte.<\/p>\n\n\n\n<p>Il n&rsquo;y pas non plus de contraintes si nous utilisons les ports natifs <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">UART<\/mark><\/strong> du <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">MEGA<\/mark><\/strong>.<\/p>\n\n\n\n<p>De plus, sur certains <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Arduino<\/mark><\/strong>, la vitesse <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">MAXIMUM<\/mark><\/strong> de transmission est limit\u00e9e \u00e0 <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">57600bps<\/mark><\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Documentation de la classe <mark><strong><mark style=\"background-color:#ffffff\" class=\"has-inline-color has-luminous-vivid-amber-color\">::<\/mark><\/strong><\/mark> <a href=\"https:\/\/docs.arduino.cc\/learn\/built-in-libraries\/software-serial\">SoftwareSerial<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-red-color has-text-color\">2.5 &#8211; Laboratoire<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"435\" height=\"250\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/DependentAccomplishedEskimodog-size_restricted.gif\" alt=\"\" class=\"wp-image-2343\"\/><\/figure>\n<\/div>\n\n\n<p>Il faut modifier les vitesses de transmission\/r\u00e9ception de l&rsquo;exemple pr\u00e9c\u00e9dent \u00e0 115 200 bauds et tester le syst\u00e8me.<\/p>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Question<\/mark><\/strong>:  Est-il toujours fonctionnel?<\/p>\n\n\n\n<p>Et pour <strong>57600<\/strong>?<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-red-color has-text-color\">2.6 &#8211; Laboratoire<\/h2>\n\n\n\n<p>Il faut relier les deux Arduino par leur port natif <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">UART<\/mark><\/strong>; 1) Mega sur Serial3 et 2) UNO sur Serial.<\/p>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Note<\/mark><\/strong>: Il ne faut plus afficher dans la console s\u00e9rie du projet UNO, seulement sur l&rsquo;\u00e9cran LCD.<\/p>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Question<\/mark><\/strong>: Est-ce que le syst\u00e8me est toujours fonctionnel?  Si non, il faut expliquer pourquoi.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Exemple d'initialisation du UART no 3 sur le MEGA:\nSerial3.begin(9600);<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-luminous-vivid-amber-color has-text-color\">3 &#8211; Transmission d&rsquo;une chaine de caract\u00e8res <\/h2>\n\n\n\n<p>La m\u00e9thode Serial.print() est utilis\u00e9e pour envoyer une chaine de caract\u00e8res, de la m\u00eame fa\u00e7on que nous affichons dans le terminal s\u00e9rie.<\/p>\n\n\n\n<p>Pour la r\u00e9ception,  nous utiliserons le m\u00e9thode <a href=\"https:\/\/www.arduino.cc\/reference\/fr\/language\/functions\/communication\/serial\/readstring\/\">Serial.readString()<\/a>. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.1 &#8211; Code source du transmetteur (UNO)<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n  Laboratoire 3: R\u00e9ception\/transmission d'une chaine de caract\u00e8res\n  Code du TRANSMETTEUR - sur le UNO\n*\/\n\n#include &lt;Arduino.h>\n#include \"rgb_lcd.h\"\n#include \"Streaming.h\"\n#include &lt;SoftwareSerial.h>\n\n#define UART_RX             6\n#define UART_TX             7\n\n#define UART_VITESSE        9600\n#define UNE_SECONDE         1000\n#define LCD_DEUXIEME_LIGNE  1\n#define LCD_NB_LIGNE        2\n#define LCD_NB_COL          16\n\nrgb_lcd lcd;\nSoftwareSerial transmetteur(UART_RX, UART_TX); \/\/ RX, TX\n\nconst String messages[] = {\n  \"Haddock\", \n  \"Tournesol\", \n  \"Dupond et Dupont\", \n  \"Tintin\",\n  \"Milou\",\n  \"Bachi-bouzouk\",\n  \"Boit-sans-soif\",\n  \"Brontosaure\",\n  \"Calembredaine\",\n  \"Cataplasme\",\n  \"Clysopompe\",\n  \"Cornemuse\",\n  \"Cornichon\",\n  \"Cyclotron\"\n};\n\n\/\/--------------------------------------------------------\nvoid setup() {\n  Serial.begin(UART_VITESSE); \/\/ Disponible pour les traces dans cet exemple!\n  Serial &lt;&lt; \"D\u00e9marrage du transmetteur...\" &lt;&lt; endl;\n  Serial &lt;&lt; \"Il y a \" &lt;&lt; sizeof(messages) \/ sizeof(messages[0]) &lt;&lt; \" messages disponibles.\" &lt;&lt; endl;  \n  transmetteur.begin(UART_VITESSE); \n  lcd.begin(LCD_NB_COL,LCD_NB_LIGNE);\n  lcd.print(\"Transmetteur\");\n} \/\/ setup()\n\n\/\/--------------------------------------------------------\nvoid loop() {\n   \/\/ Envoyer un message al\u00e9atoire \u00e0 toutes les secondes:\n   byte unCode = random(sizeof(messages) \/ sizeof(messages[0]));\n   transmetteur.print(messages[unCode]);\n   Serial &lt;&lt; \"Envoi du message suivant: \" &lt;&lt; messages[unCode] &lt;&lt; endl;\n   lcd.setCursor(0, LCD_DEUXIEME_LIGNE);\n   lcd &lt;&lt; \"Envoi du msg: \" &lt;&lt; unCode &lt;&lt; \" \";\n   delay(UNE_SECONDE * 2);\n} \/\/ loop()<\/pre>\n\n\n\n<p>R\u00e9sultat:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">D\u00e9marrage du transmetteur...\nIl y a 14 messages disponibles.\nEnvoi du message suivant: Brontosaure\nEnvoi du message suivant: Cataplasme\nEnvoi du message suivant: Boit-sans-soif\n...<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.2 &#8211; Code source du r\u00e9cepteur (MEGA)<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n Laboratoire 3: R\u00e9ception\/transmission d'une chaine de caract\u00e8res\n Code du r\u00e9cepteur (MEGA)\n Version chaine de caract\u00e8res\n*\/\n\n#include &lt;SoftwareSerial.h>\n#include \"Streaming.h\"\n\n\/\/ Le RX du UNO doit \u00eatre connect\u00e9 au TX du MEGA et TX -> RX\n\/\/ Il faut donc inverser les signaux:\n#define UART_RX             10\n#define UART_TX             11\n#define UART_VITESSE        9600\n#define UNE_SECONDE         1000\n\nSoftwareSerial recepteur(UART_TX, UART_RX); \/\/ RX, TX\n\n\/\/ --------------------------------------------------------\nvoid setup() {\n  Serial.begin(UART_VITESSE);\n  Serial.println(\"D\u00e9marrage du r\u00e9cepteur...\");\n  \/\/ Initialiser le port serie 'SoftwareSerial'\n  recepteur.begin(UART_VITESSE);\n}\n\n\/\/ --------------------------------------------------------\nvoid loop() {  \n  String unMessage;\n  if (recepteur.available()) {\n    \/\/ delay(50); \/\/ attendre la r\u00e9ception des donn\u00e9es\n    Serial &lt;&lt; \"Il y a \" &lt;&lt; recepteur.available() &lt;&lt; \" octets disponibles.\" &lt;&lt; endl; \n    unMessage = recepteur.readString();\n    \/\/ afficher les donn\u00e9es lues\n    Serial &lt;&lt; \"Message recu = \" &lt;&lt; unMessage &lt;&lt; endl;\n  } \/\/ si donn\u00e9es disponibles sur le UART\n}\n\/\/ Fin du code<\/pre>\n\n\n\n<p>R\u00e9sultat:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">D\u00e9marrage du r\u00e9cepteur...\nIl y a 2 octets disponibles.\nMessage recu = Cornemuse\nIl y a 1 octets disponibles.\nMessage recu = Tournesol\n\n\/\/ Note: Nous allons ins\u00e9rer un petit d\u00e9lai pour permettre au message d'\u00eatre enti\u00e8rement re\u00e7u.\n\n  if (recepteur.available()) {\n    delay(50); \/\/ attendre la r\u00e9ception des donn\u00e9es\n\n\/\/ R\u00e9sultat:\nD\u00e9marrage du r\u00e9cepteur...\nIl y a 7 octets disponibles.\nMessage recu = Haddock\nIl y a 13 octets disponibles.\nMessage recu = Calembredaine<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3.5 &#8211; \ud83d\udca1 Transmission d&rsquo;une structure de donn\u00e9es<\/h2>\n\n\n\n<p>\u00c9tant donn\u00e9 la structure suivante:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">struct lesDonnees {\n  int id;  \/\/ Occupe 2 octets en m\u00e9moire.\n  char ip[16];\n  char description[10];\n};  \/\/ longueur de la structure = 28 octets\n\n\/\/ D\u00e9finir un objet de type structure\nlesDonnees mesDonnees = {1, \"10.10.0.1\", \"E0000001\"};<\/pre>\n\n\n\n<p>Voici un exemple de transmission d&rsquo;une structure de donn\u00e9es entre deux Arduino reli\u00e9s par un port UART (UART2 du MEGA) et un SoftwareSerial (UNO).l<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.5.1 &#8211; Le transmetteur &#8211; (UNO sur SoftwareSerial:D6\/D7)<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n    Arduino UNO \n    Le transmetteur, via SoftwareSerial sur D7 et D6\n*\/\n\n#include &lt;Arduino.h>\n#include &lt;SoftwareSerial.h>\n#include \"Streaming.h\"\n\n#define DELAI_ENTRE_TRANSMISSION  1000\n\n\/\/ D\u00e9finir les pins pour la communication SoftwareSerial\nSoftwareSerial lienAvecRecepteur(7, 6); \/\/ RX, TX\n\n\/\/ ATTENTION: Le buffer de Serial \u00e0 un maximum de 64 octets.\nstruct lesDonnees {\n  int id;\n  char ip[16];\n  char description[10];\n};\n\/\/ D\u00e9finir un objet de type structure\nlesDonnees mesDonnees = {1, \"10.10.0.1\", \"E0000001\"};\n\n\/\/ ----------------------------------------------------------------\nvoid setup() {\n  \/\/ Initialiser la communication s\u00e9rie avec l'ordinateur\n  \/\/ Pour les traces au moniteur\n  Serial.begin(9600);\n  \n  \/\/ Initialiser la communication SoftwareSerial vers le r\u00e9cepteur\n  lienAvecRecepteur.begin(57600);\n  \n  Serial &lt;&lt; \"D\u00e9marrage de la transmission des donn\u00e9es...\\n\";\n} \/\/ setup\n\n\/\/ ----------------------------------------------------------------\nvoid loop() {\n  static int compteur=0;\n  mesDonnees.id = compteur++;\n  Serial &lt;&lt; \"\\nid: \" &lt;&lt; mesDonnees.id &lt;&lt; \"\\nIP: \" &lt;&lt; mesDonnees.ip &lt;&lt; \"\\nDescription: \" &lt;&lt; mesDonnees.description &lt;&lt; endl;\n  \/\/ Envoyer les donn\u00e9es via SoftwareSerial\n  \/\/ (byte*)&amp;mesDonnees -> passe la localisation de la structure en m\u00e9moire,\n  \/\/ et indique de la traiter comme une s\u00e9rie d'octets\n  lienAvecRecepteur.write((byte*)&amp;mesDonnees, sizeof(mesDonnees));\n  Serial &lt;&lt; \"Octets envoy\u00e9s: \" &lt;&lt; sizeof(mesDonnees) &lt;&lt; endl;\n\n  \/\/ \u00c0 l'occasion, simuler une erreur de transmission\n  \/\/ avec une autre transmission sans d\u00e9lai, de mesDonnees-1.\n  if (random(0, 100) &lt; 10) {\n    lienAvecRecepteur.write((byte*)&amp;mesDonnees, sizeof(mesDonnees)-1);\n    Serial &lt;&lt; \"Erreur de transmission: \" &lt;&lt; sizeof(mesDonnees)-1 &lt;&lt; \" octets envoy\u00e9s.\\n\";\n    delay(DELAI_ENTRE_TRANSMISSION); \n  } \/\/ Ce qui va totaliser 55 (27+28) octets cot\u00e9 r\u00e9cepteur, au lieu de 28 octets\n\n  \/\/ Attendre un peu avant de renvoyer les donn\u00e9es\n  \/\/ Si ce d\u00e9lai est trop court, il risque d'avoir une congestion \u00e0 niveau du r\u00e9cepteur.\n  \/\/ Faites des tests de fiabilit\u00e9.\n  delay(DELAI_ENTRE_TRANSMISSION); \/\/ 1 seconde d'attente\n} \/\/ loop\n<\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"198\" height=\"173\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Capture-decran-le-2025-03-03-a-11.58.36.png\" alt=\"\" class=\"wp-image-3103\"\/><\/figure>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Et dans le cas d'une erreur:\nErreur de transmission: 27 octets envoy\u00e9s.<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.5.2 &#8211; Le r\u00e9cepteur (MEGA sur UART2)<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n    Arduino MEGA\n    Le r\u00e9cepteur via UART2 (Serial2)\n*\/\n\n#include &lt;Arduino.h>\n#include \"Streaming.h\"\n#define leTransmetteur Serial2\n\n\/\/ D\u00e9finir la structure des donn\u00e9es\n\/\/ NOTE: tampon maximum en r\u00e9ception UART 64 octets\nstruct lesDonnees {\n  int id;\n  char ip[16];           \/\/ Taille maximale de l'IP en format texte\n  char description[10];  \/\/ Taille maximale de la description\n};\n\nlesDonnees mesDonnees;\n\n\/\/ ----------------------------------------------------------------\nvoid setup() {\n  \/\/ Initialiser la communication s\u00e9rie avec l'ordinateur\n  Serial.begin(9600);\n  \n  \/\/ Initialiser la communication Serial2 (Mega utilise Serial2 pour la communication avec le transmetteur)\n  leTransmetteur.begin(57600);\n\n  Serial &lt;&lt; \"R\u00e9ception des donn\u00e9es...\\n\";\n}\n\n\/\/ ----------------------------------------------------------------\nvoid loop() {\n  if (leTransmetteur.available()) {\n    \/\/ Attendre un peu, pour laisser le temps aux info d'arriver\n    delay(100);\n    Serial &lt;&lt; \"\\nOctets re\u00e7us: \" &lt;&lt; Serial2.available() &lt;&lt; endl;\n \n    \/\/ V\u00e9rifier si des donn\u00e9es sont disponibles sur Serial2\n    if (leTransmetteur.available() == (int) sizeof(mesDonnees)) {\n      \/\/ Lire les donn\u00e9es re\u00e7ues\n      leTransmetteur.readBytes((char*)&amp;mesDonnees, sizeof(mesDonnees));\n\n      \/\/ Afficher les donn\u00e9es re\u00e7ues\n      Serial &lt;&lt; \"\\nID: \" &lt;&lt; mesDonnees.id &lt;&lt; \"\\nIP: \" &lt;&lt; mesDonnees.ip \n            &lt;&lt; \"\\nDescription: \" &lt;&lt; mesDonnees.description &lt;&lt; endl;\n    } else {\n      Serial &lt;&lt; \"Donn\u00e9es incompl\u00e8tes ou erron\u00e9es.\\n\";\n      while(leTransmetteur.available()) {\n        leTransmetteur.read(); \/\/ Vider le tampon de r\u00e9ception\n      } \n    } \/\/ if sizeof(mesDonnees)\n  } \/\/ if available()\n} \/\/ loop()\n<\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"268\" height=\"256\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Capture-decran-le-2025-03-03-a-11.58.58.png\" alt=\"\" class=\"wp-image-3104\" style=\"width:193px;height:auto\"\/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ En cas d'une erreur:\nOctets re\u00e7us: 55\nDonn\u00e9es incompl\u00e8tes ou erron\u00e9es.<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3.6 &#8211; <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Laboratoire important \ud83d\ude09<\/mark> (40 minutes)<\/h2>\n\n\n\n<p>\u00c0 partir des \u00e9l\u00e9ments suivants:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un Arduino UNO : Le transmetteur\n<ul class=\"wp-block-list\">\n<li>avec un module RTC sur I2C<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Un Arduino MEGA : Le r\u00e9cepteur\n<ul class=\"wp-block-list\">\n<li>avec un 4Digit display sur D6<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Le transmetteur envoie vers le r\u00e9cepteur, \u00e0 raison d&rsquo;une fois par 900ms, l&rsquo;heure en utilisant la structure de donn\u00e9es suivante:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">struct Temps {\n  uint8_t heure;\n  uint8_t minute;\n  uint8_t seconde;\n};\n\nstruct lesDonnees {\n  int id;\n  char ip[16];           \/\/ Taille maximale de l'IP en format texte\n  char description[10];  \/\/ Taille maximale de la description\n  Temps heure;\n}; \/\/ 31 octets \n\n\/\/ Exemple d'utilisation\nlesDonnees mesDonnees = {1, \"10.10.0.1\", \"E0000001\", {0, 0, 0}};<\/pre>\n\n\n\n<p class=\"has-text-align-left\">Le r\u00e9cepteur affiche l&rsquo;heure (<strong>HH:MM<\/strong>) re\u00e7ue sur le <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">4digit<\/mark><\/strong> display et les informations suivantes sur le moniteur s\u00e9rie:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Octets re\u00e7us: 31\n\nID: 1363\nIP: 10.10.0.1\nDescription: E0000001\nHeure 22:25:03<\/pre>\n\n\n\n<p>\ud83d\udc49 Le caract\u00e8re &lsquo;<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">:<\/mark><\/strong>&lsquo;, du <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">4Digit<\/mark>,<\/strong> doit clignoter aux <strong>500ms<\/strong>, en traitement <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">non bloquant<\/mark><\/strong>.<\/p>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">NOTE<\/mark><\/strong>: Vous pouvez travailler \u00e0 partir du code source de <strong>3.5<\/strong><\/p>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">ATTENTION<\/mark><\/strong> d&rsquo;afficher correctement la valeur &lsquo;0&rsquo; -> 00:01<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;TM1637V2.h> \n...<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3.7 &#8211; <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Laboratoire<\/mark> (30 minutes)<\/h2>\n\n\n\n<p>Ajout d&rsquo;une propri\u00e9t\u00e9 pour l&rsquo;<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">\u00e9tat des capteurs<\/mark><\/strong> du <strong>UNO<\/strong> et d&rsquo;un d\u00e9lai de <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">5 secondes<\/mark><\/strong> pour la transmission des donn\u00e9es.<\/p>\n\n\n\n<p>\u00c9tant donn\u00e9 les d\u00e9clarations suivantes:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">enum EtatAppareils {\n  APP_LED1                 =     0b1 &lt;&lt; 0, \/\/ 0000 0001\n  APP_LED2                 =     0b1 &lt;&lt; 1, \/\/ 0000 0010\n  APP_RELAI                =     0b1 &lt;&lt; 2, \/\/ 0000 0100\n  APP_MOUVEMENT            =     0b1 &lt;&lt; 3, \/\/ 0000 1000\n  APP_MOUVEMENT_ARME       =     0b1 &lt;&lt; 4, \/\/ 0001 0000\n  APP_BOUTON_PANIQUE       =     0b1 &lt;&lt; 5, \/\/ 0010 0000\n  APP_RETRO_LCD            =     0b1 &lt;&lt; 6, \/\/ 0100 0000\n};\n\nconst char * texteAppareils[] = {\n  \"LED1\",\n  \"LED2\",\n  \"RELAI\",\n  \"Mouvement\",\n  \"Alarme\",\n  \"Panique\",\n  \"R\u00e9tro LCD\"\n};\n\nstruct Appareils{\n  unsigned int  etatAppareils;  \/\/ 2 octets\n};\n\nstruct lesDonnees {\n  int id;\n  char ip[16];           \/\/ Taille maximale de l'IP en format texte\n  char description[10];  \/\/ Taille maximale de la description\n  Temps heure;\n  Appareils etats; \n}; \/\/ 33 octets\n\n\/\/ Et la d\u00e9claration:\nlesDonnees mesDonnees = {1, \"10.10.0.1\", \"E0000001\", {0, 0, 0}, {0b01010101}};<\/pre>\n\n\n\n<p>\ud83d\udc49 Modifier le labo pr\u00e9c\u00e9dent pour produire le r\u00e9sultat suivant au niveau du r\u00e9cepteur:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">R\u00e9ception des donn\u00e9es...\n\n------------------------------------\nID: 134\nIP: 10.10.0.1\nDescription: E0000001\nHeure 00:03:28\nEtat appareils: 1001111\nAppareil: LED1:                 \ud83d\udfe2\nAppareil: LED2:                 \ud83d\udfe2\nAppareil: RELAI:                \ud83d\udfe2\nAppareil: Mouvement:            \ud83d\udfe2\nAppareil: Alarme:               \ud83d\udd34\nAppareil: Panique:              \ud83d\udd34\nAppareil: R\u00e9tro LCD:            \ud83d\udfe2\n\nOctets re\u00e7us: 33<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\udde8 D\u00e9fi suppl\u00e9mentaire pour 3.7<\/h3>\n\n\n\n<p>Au niveau du transmetteur UNO, g\u00e9n\u00e9rer un valeur al\u00e9atoire pour &lsquo;Appareils etats&rsquo; \u00e0 chaque transmission.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color\">4 &#8211; Exemple d&rsquo;un syst\u00e8me d&rsquo;alarme \u00e0 2 Arduino<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"736\" height=\"414\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/10minutes.jpg\" alt=\"\" class=\"wp-image-3383\" style=\"width:476px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/10minutes.jpg 736w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/10minutes-300x169.jpg 300w\" sizes=\"auto, (max-width: 736px) 100vw, 736px\" \/><\/figure>\n<\/div>\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">NOTE<\/mark><\/strong>: Cet exemple est plus ou moins pertinent pour la session <strong>H25<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">4.1 &#8211; Fichier d&rsquo;ent\u00eate<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n    Fichier:  code.alarme.h\n    Auteur:   Alain Boudreault\n    Date:     2021.11.21\n    ---------------------------------------------------------\n    Description:  D\u00e9finir un type enum \u00e0 utiliser pour les\n                  diff\u00e9rents \u00e9tats du syst\u00e8me d'alarme.\n\n                  Note: Inclure ce fichier dans le dossier de\n                        votre projet.\n\n                        Puis, programmer la syntaxe suivante \n                        pour utiliser ce type:\n\n                        codesAlarme code;\n                        ...\n                        code = evenement_systeme_enligne;\n    ---------------------------------------------------------\n    M-A-J: 2022.11.11 A.B. - Ajout de 'evenement_nb_codes'\n    ---------------------------------------------------------\n*\/\n\n\/\/ S'assurer que ce fichier ne sera inclus qu'une seule fois lors de la compilation du projet\n#ifndef LES_CODES_ERREUR_H\n#define LES_CODES_ERREUR_H\nenum codesAlarme {\n  evenement_temperature_depassee,\n  evenement_dectection_mouvement,\n  evenement_code_invalide,\n  evenement_code_valide,\n  evenement_alarme_active,\n  evenement_alarme_inactive,\n  evenement_systeme_enligne,\n  evenement_nb_codes\n};\n\n#endif \/\/ LES_CODES_ERREUR_H_ _<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">4.2 &#8211; Code source du transmetteur <\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n    Simulation d'un syst\u00e8me d'alarme UNO, qui envoie des \u00e9v\u00e9nements\n    \u00e0 une centrale de controle (MEGA) via le protocole UART.\n\n    Le UNO est connect\u00e9 par son port D8 au port UART2 du MEGA.\n\n    \u00c9tant donn\u00e9 que le UNO n'a qu'un seul port UART et qu'il est utilis\u00e9\n    pour d\u00e9boger l'application, la librairie 'SoftwareSerial' est utilis\u00e9e\n    pour simuler un port UART \u00e0 partir d'une GPIO.\n\n*\/\n\n#include &lt;SoftwareSerial.h>\n#include \"code.alarme.h\"\n#include \"rgb_lcd.h\"\n#include \"Streaming.h\"\n\n\nrgb_lcd lcd;\n\n\/\/ Le RX du UNO doit \u00eatre connect\u00e9 au TX du MEGA et TX -> RX\n\/\/ Il faut donc inverser les signaux:\nSoftwareSerial mySerial(5, 4); \/\/ RX, TX\n\ncodesAlarme unCodeAlarme = evenement_systeme_enligne;\n\nvoid setup() {\n  Serial.begin(9600);\n  while (!Serial) {\n    ; \/\/ S'assurer que le port serie est pret.  Ceci n'est pas requis pour un SoftwareSerial.\n  }\n  Serial.println(\"Demarrage du systeme d'alarme...\");\n  lcd.begin(16,2);\n  lcd.print(\"Master\");\n  \/\/ Initialiser le port serie 'SoftwareSerial'\n  mySerial.begin(9600);\n\n  \/\/ Envoyer l'\u00e9tat du syst\u00e8me d'alarme \u00e0 la centrale (Mega)\n  mySerial.write(unCodeAlarme); \/\/ Attention, pour envoyer un seul octet (Byte), il faut utiliser la m\u00e9thode write et non pas print.\n  delay(1000);\n}\n\nvoid loop() {  \n  unCodeAlarme = evenement_dectection_mouvement;\n  \/\/ Envoyer un code de d\u00e9tection du mouvement \u00e0 toutes les secondes:\n    byte i;\n    i = random(evenement_nb_codes); \n   mySerial.write(i);\n   Serial &lt;&lt; \"Envoi du code suivant: \" &lt;&lt; i &lt;&lt; endl;\n   delay(1000);\n\n}<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">4.3 &#8211; Code source du r\u00e9cepteur <\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n    Simulation d'un syst\u00e8me d'alarme UNO, qui envoie des \u00e9v\u00e9nements\n    \u00e0 une centrale de controle (MEGA) via le protocole UART.\n\n    Le UNO est connect\u00e9 par son port D8 au port UART2 du MEGA.\n\n    \u00c9tant donn\u00e9 que le UNO n'a qu'un seul port UART et qu'il est utilis\u00e9\n    pour d\u00e9boger l'application, la librairie 'SoftwareSerial' est utilis\u00e9e\n    pour simuler un port UART \u00e0 partir d'une GPIO.\n\n*\/\n\n#include &lt;SoftwareSerial.h>\n#include \"code.alarme.h\"\n#include \"rgb_lcd.h\"\n#include \"Streaming.h\"\n\nrgb_lcd lcd;\n\n\/\/ Le RX du UNO doit \u00eatre connect\u00e9 au TX du MEGA et TX -> RX\n\/\/ Il faut donc inverser les signaux:\nSoftwareSerial mySerial(5, 6); \/\/ RX, TX\n\ncodesAlarme unCodeAlarme = evenement_systeme_enligne;\n\nvoid setup() {\n  Serial.begin(9600);\n  while (!Serial) {\n    ; \/\/ S'assurer que le port serie est pret.  Ceci n'est pas requis pour un SoftwareSerial.\n  }\n  Serial.println(\"Demarrage du systeme d'alarme...\");\n  lcd.begin(16,2);\n  lcd.print(\"Slave ready\");\n  \/\/ Initialiser le port serie 'SoftwareSerial'\n  mySerial.begin(9600);\n\n  \/\/ Envoyer l'\u00e9tat du syst\u00e8me d'alarme \u00e0 la centrale (Mega)\n  \/\/mySerial.write(unCodeAlarme); \/\/ Attention, pour envoyer un seul octet (Byte), il faut utiliser la m\u00e9thode write et non pas print.\n  delay(1000);\n}\n\nvoid loop() {  \n   codesAlarme code;\n  if (mySerial.available()) {\n    code = mySerial.read();\n    \/\/ afficher la valeur du byte re\u00e7u\n    Serial.print(\"\\nCode = \"); Serial.print(code, DEC); Serial.println(\"\");\n    lcd.setCursor(0, 1);\n    lcd &lt;&lt; \"Code recu: \" &lt;&lt; code;\n    \/\/ Tester les \u00e9v\u00e9nements du syst\u00e8me d'alarme\n    if (code == evenement_systeme_enligne) Serial.print(\"Systeme client en ligne !\");\n    if (code == evenement_dectection_mouvement) Serial.print(\"DANGER: Il y a intrusion ....\");\n    \n  }\n}<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-red-color has-text-color\">5 &#8211; Laboratoire<\/h2>\n\n\n\n<p>Mettre en place un syst\u00e8me de deux Arduino, reli\u00e9s ensemble VIA le protocole UART qui s&rsquo;\u00e9changent des donn\u00e9es.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un d\u00e9tecteur de temp\u00e9rature\/humidit\u00e9  est reli\u00e9 au premier Arduino (UNO).\n<ul class=\"wp-block-list\">\n<li>La temp\u00e9rature et la valeur d&rsquo;humidit\u00e9 sont affich\u00e9es dans la console s\u00e9rie, \u00e0 raison d&rsquo;une mise \u00e0 jour \u00e0 chaque seconde.<\/li>\n\n\n\n<li>La temp\u00e9rature et la valeur d&rsquo;humidit\u00e9 sont transmises au deuxi\u00e8me Arduino \u00e0 chaque deux secondes.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Le deuxi\u00e8me Arduino (MEGA) est reli\u00e9 au premier Arduino via le port UART2.\n<ul class=\"wp-block-list\">\n<li>Le deuxi\u00e8me Arduino affiche, sur un lcd_rgb, les valeurs de temp\u00e9rature sur la ligne 1 et d&rsquo;humidit\u00e9 sur la ligne 2, re\u00e7ues du premier Arduino.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\"><strong>Version de base du labo:<\/strong><\/mark>\n<ul class=\"wp-block-list\">\n<li>traiter les valeurs temp\u00e9rature\/humidit\u00e9 avec des nombres entiers.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Version &lsquo;haut d\u00e9fi&rsquo; du labo&rsquo;: <\/mark><\/strong>\n<ul class=\"wp-block-list\">\n<li>traiter les valeurs temp\u00e9rature\/humidit\u00e9 avec des nombres r\u00e9els.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color\">D\u00e9fi suppl\u00e9mentaire<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un &lsquo;<strong><em>push button<\/em><\/strong>&lsquo; est connect\u00e9 sur le premier Arduino.\n<ul class=\"wp-block-list\">\n<li>S&rsquo;il est appuy\u00e9 plus d&rsquo;une seconde,\n<ul class=\"wp-block-list\">\n<li>Une &lsquo;DEL&rsquo;, reli\u00e9e au deuxi\u00e8me Arduino est activ\u00e9e deux fois pendant une seconde (250ms\/on\/off\/on\/off).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Il faut utiliser un &lsquo;enum&rsquo; pour d\u00e9crire l&rsquo;\u00e9v\u00e9nement &lsquo;<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">urgenceBouton<\/mark><\/strong>&lsquo; et l&rsquo;utiliser dans la transmission du message vers le deuxi\u00e8me Arduino.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-red-color has-text-color\">6 &#8211; Laboratoire<\/h2>\n\n\n\n<p>Il faut relier, correctement, deux Arduino via le protocole UART.<\/p>\n\n\n\n<p>Chaque Arduino poss\u00e8de un \u00e9cran LCD.<\/p>\n\n\n\n<p>Le premier Arduino envoi vers le deuxi\u00e8me, un nombre al\u00e9atoire compris entre 0 et NB_CITATIONS.  Le nombre al\u00e9atoire est affich\u00e9 sur la ligne 1 du LCD du premier Arduino en respectant la forme suivante: <\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>1: Citation no: nn<br>2:<\/p>\n<\/blockquote>\n\n\n\n<p>Le deuxi\u00e8me Arduino re\u00e7oit le nombre al\u00e9atoire et l&rsquo;utilise pour obtenir une citation dans le tableau des citations.  Le nombre al\u00e9atoire est affich\u00e9 sur la ligne no 2 du deuxi\u00e8me Arduino. <\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>1: Arduino no 2<br>2: Envoi de: nn<\/p>\n<\/blockquote>\n\n\n\n<p>La citation obtenue est envoy\u00e9e vers le premier Arduino et affich\u00e9e sur la ligne no 2 de ce dernier.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>1: Citation no: nn<br>2: Texte de la citation<\/p>\n<\/blockquote>\n\n\n\n<p>Voici le tableau des citations:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const String citations[] = {\n  \"Bachi-bouzouk\",\n  \"Boit-sans-soif\",\n  \"Brontosaure\",\n  \"Calembredaine\",\n  \"Catachrese\",\n  \"Coupe-jarret\",\n  \"Doryphore\",\n  \"Dynamiteur\",\n  \"Empoisonneur\",\n  \"Hurluberlu\",\n  \"Cataplasme\",\n  \"Clysopompe\",\n  \"Cornemuse\",\n  \"Cornichon\",\n  \"Cyclotron\"\n};<\/pre>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-vivid-red-color has-text-color\">NOTE IMPORTANTE<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"300\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/evaluation.gif\" alt=\"\" class=\"wp-image-2323\"\/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-vivid-purple-color has-text-color\">Le contenu de ce document pourrait \u00eatre \u00e9valu\u00e9 dans un examen<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h6 class=\"wp-block-heading has-text-align-right\">Version du 2025.03.24.03 <\/h6>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Communication entre deux Arduino 1 &#8211; Mise en situation Dans les exemples suivants, nous verrons comment transmettre des informations d&rsquo;un Arduino vers un autre en utilisant le protocole s\u00e9rie (UART \/ RS-232 \/ COM PORT). Le protocole s\u00e9rie utilise deux broches pour l&rsquo;\u00e9change des donn\u00e9es; une broche pour la r\u00e9ception (RX) et une broche pour [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ub_ctt_via":"","footnotes":""},"class_list":["post-2287","page","type-page","status-publish","hentry"],"featured_image_src":null,"_links":{"self":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/2287","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/comments?post=2287"}],"version-history":[{"count":81,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/2287\/revisions"}],"predecessor-version":[{"id":3404,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/2287\/revisions\/3404"}],"wp:attachment":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/media?parent=2287"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}