{"id":3057,"date":"2025-02-27T16:51:39","date_gmt":"2025-02-27T21:51:39","guid":{"rendered":"https:\/\/ve2cuy.com\/420-1c4\/?page_id=3057"},"modified":"2025-05-03T11:35:56","modified_gmt":"2025-05-03T16:35:56","slug":"2024-es","status":"publish","type":"page","link":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/2024-es\/","title":{"rendered":"2025.ES"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">\u00c9preuve synth\u00e8se Volet A<\/h1>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"433\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/12\/equipe.jpeg\" alt=\"\" class=\"wp-image-2491\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/12\/equipe.jpeg 624w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/12\/equipe-300x208.jpeg 300w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-text-color has-link-color wp-elements-ad8a5cb3f632b85f1dab4106ad47c77c\" style=\"color:#a33434\">\u00c9nonc\u00e9 du projet ESH25 &#8211; Version 1.1.5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#90a0af\" class=\"has-inline-color\">Pond\u00e9ration:<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">30%<\/mark><br><mark style=\"background-color:rgba(0, 0, 0, 0);color:#90a0af\" class=\"has-inline-color\">Remise:<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Partie 1 &#8211; semaine 13<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">&#8211; 27 avril, 16h00<\/mark><\/h3>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-e66e3a3a9e5622f4be2f278e2f395637\">ES-Volet B &#8211; Examen (20%), 15 mai<br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">NOTE<\/mark>: Il faut rendre les kits Arduino pour obtenir une copie d&rsquo;examen.<\/h3>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Le mardi 8 mai<\/mark><\/strong>, pr\u00e9sentation de votre partie 1 \u00e0 l&rsquo;enseignant &#8211; <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">pr\u00e9sence obligatoire<\/mark><\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\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 faut remettre la partie 1 \u00e0 temps sinon les d\u00e9fis ne seront pas corrig\u00e9s.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0);color:#90a0af\" class=\"has-inline-color\">Remise:<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Partie 2 &#8211; semaine 15<\/mark> &#8211; <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">14 mai, 23h59<\/mark><\/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 has-link-color wp-elements-c84412f27679207f2ef4bf54f5914d9d\">R\u00e9sum\u00e9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-b378a39e6312c1772f716acfd433ed83\">Voici un bref r\u00e9sum\u00e9&nbsp;des t\u00e2ches \u00e0 r\u00e9aliser dans ce projet:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Relier physiquement deux Arduino (<strong>UNO:<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">D8.D9<\/mark><\/strong> -&gt; <strong>MEGA:<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">UART2<\/mark><\/strong>) via le protocole UART. <\/li>\n\n\n\n<li>Ajouter des instructions, au projet 01 (TP1), pour la transmission de l&rsquo;\u00e9tat des diff\u00e9rents capteurs vers le MEGA.<\/li>\n\n\n\n<li>Programmer une interface utilisateur sur le MEGA.<\/li>\n\n\n\n<li>Du MEGA, recevoir les donn\u00e9es du UNO pour les traiter et les afficher.<\/li>\n\n\n\n<li>Du MEGA, transmettre les donn\u00e9es vers un service WEB de stockage (<strong>ESPWifi:<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">UART3<\/mark><\/strong>).<\/li>\n\n\n\n<li>En option, activer les fonctions Wifi en utilisant un module d&rsquo;identification par radiofr\u00e9quence&nbsp;(IRF)&nbsp; (<strong>RFID:<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">UART1)<\/mark><\/strong>.<\/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 has-link-color wp-elements-3efe301d30fd6545a664bb408e1ed56a\">1 &#8211; Contexte de r\u00e9alisation<\/h2>\n\n\n\n<h3 class=\"wp-block-heading has-text-color has-link-color wp-elements-8268a952fa05982eed581ed43c9ce981\" style=\"color:#209676\">Consid\u00e9rant,<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Du temps en laboratoire \u00e0 partir de la semaine 10,<\/li>\n\n\n\n<li>Un Arduino Uno (<a href=\"https:\/\/ve2cuy.com\/420-1c4\/index.php\/2025-tp-01\/\" data-type=\"page\" data-id=\"2777\">projet 01 &#8211; compl\u00e9t\u00e9<\/a>),<\/li>\n\n\n\n<li>Un Arduino Mega,<\/li>\n\n\n\n<li>De la compilation conditionnelle pour des messages diagnostiques,\n<ul class=\"wp-block-list\">\n<li>#ifdef &#8230;<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><a href=\"https:\/\/ve2cuy.com\/420-1c4\/index.php\/structures-et-enumeration\/\" data-type=\"page\" data-id=\"3113\">Des structures de donn\u00e9es<\/a>,\n<ul class=\"wp-block-list\">\n<li>Pour la repr\u00e9sentation d&rsquo;un syst\u00e8me,<\/li>\n\n\n\n<li>Pour l&rsquo;envoi et la r\u00e9ception de donn\u00e9es entre les syst\u00e8mes,<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Des \u00e9num\u00e9rations sous C\/C++,\n<ul class=\"wp-block-list\">\n<li>Gestion des messages,<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><a href=\"https:\/\/ve2cuy.com\/420-1c4\/index.php\/ecoute-moi-jaimerais-te-parler\/\" data-type=\"page\" data-id=\"2287\">L&rsquo;envois de messages entre un UNO et un MEGA<\/a>,\n<ul class=\"wp-block-list\">\n<li>Via UART,<\/li>\n\n\n\n<li>En utilisant une validation simple sur la longueur des messages,<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><a href=\"https:\/\/ve2cuy.com\/420-1c4\/index.php\/grove-uart-wifi-v2\/\" data-type=\"page\" data-id=\"2972\">Un module Grove Wifi<\/a>, la librairie WiFiEsp et une API WEB,\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/esh25.ve2cuy.com\">Faire le suivi des syst\u00e8mes en<\/a>,\n<ul class=\"wp-block-list\">\n<li>Envoyant l&rsquo;\u00e9tat du syst\u00e8me, p\u00e9riodiquement, sur un serveur Web,<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><a href=\"https:\/\/ve2cuy.com\/420-1c4\/index.php\/operations-sur-les-bits\/\" data-type=\"page\" data-id=\"2623\">Des op\u00e9rations sur les bits<\/a>,\n<ul class=\"wp-block-list\">\n<li>Pour la gestion de l&rsquo;\u00e9tat des appareils,<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Un code source:\n<ul class=\"wp-block-list\">\n<li>Normalis\u00e9,<\/li>\n\n\n\n<li>Document\u00e9,<\/li>\n\n\n\n<li>Optimis\u00e9 (m\u00e9moire, ressource),<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><a href=\"https:\/\/ve2cuy.com\/420-1c4\/index.php\/operations-non-bloquantes\/\" data-type=\"page\" data-id=\"2941\">L&rsquo;utilisation de m\u00e9thodes non bloquantes<\/a>,\n<ul class=\"wp-block-list\">\n<li>millis(),<\/li>\n\n\n\n<li>Interruptions (bouton de panique) en <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">d\u00e9fi<\/mark>,\n<ul class=\"wp-block-list\">\n<li>Dans ce cas, il faut utiliser la broche D2 pour le bouton et d\u00e9placer la DEL sur D7 et m&rsquo;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">indiquer dans l&rsquo;ent\u00eate du UNO<\/mark> que vous avez relev\u00e9 le d\u00e9fi.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Le respect du devis.<\/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 has-link-color wp-elements-698d4d1853c7ba7fde824418b0f5ac47\">2 &#8211; Description du syst\u00e8me<\/h2>\n\n\n\n<p class=\"has-text-align-left\">Lors du <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">projet 01<\/mark><\/strong>, nous avons impl\u00e9ment\u00e9 la partie &lsquo;<strong>\u00c0 domicile<\/strong>&lsquo; d&rsquo;un syst\u00e8me d&rsquo;alarme permettant de contr\u00f4ler et de mesurer diff\u00e9rents appareils y \u00e9tant connect\u00e9s et d&rsquo;afficher, dans le terminal s\u00e9rie, leurs \u00e9tats ou valeurs.<\/p>\n\n\n\n<p>Par exemple, afficher si un <strong>interrupteur<\/strong>, une <strong>DEL <\/strong>ou un <strong>d\u00e9tecteur de mouvement<\/strong> \u00e9tait activ\u00e9.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"529\" height=\"62\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-14.51.19.png\" alt=\"\" class=\"wp-image-3493\" style=\"width:515px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-14.51.19.png 529w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-14.51.19-300x35.png 300w\" sizes=\"auto, (max-width: 529px) 100vw, 529px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"has-text-align-left\">De plus, des informations tel que, <strong>date<\/strong>, <strong>heure<\/strong>, <strong>temp\u00e9rature<\/strong>, <strong>humidit\u00e9<\/strong>, <strong>temps \u00e9coul\u00e9<\/strong> sont aussi mesur\u00e9es, trait\u00e9es et affich\u00e9es.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"has-text-align-left\">Nous voici maintenant rendu \u00e0 l&rsquo;\u00e9tape 2 (<strong>projet de session<\/strong>) de d\u00e9veloppement du projet: \ud83d\udc49 relier le syst\u00e8me d&rsquo;alarme (le <strong>UNO<\/strong>) \u00e0 une centrale de surveillance (le <strong>MEGA<\/strong>).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"867\" height=\"492\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/UNO_MEGA_UART.jpg\" alt=\"\" class=\"wp-image-3174\" style=\"width:405px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/UNO_MEGA_UART.jpg 867w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/UNO_MEGA_UART-300x170.jpg 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/UNO_MEGA_UART-768x436.jpg 768w\" sizes=\"auto, (max-width: 867px) 100vw, 867px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"has-text-align-left\">Une connexion s\u00e9rie (<strong>UART<\/strong>) sera utilis\u00e9e pour transf\u00e9rer les diff\u00e9rents \u00e9tats et valeurs des appareils du syst\u00e8me d&rsquo;alarme, vers la centrale. <\/p>\n\n\n\n<p class=\"has-text-align-left\">Ce transfert vers la centrale sera r\u00e9alis\u00e9 en boucle, \u00e0 raison d&rsquo;environ <strong>une transmission \u00e0 la seconde<\/strong>.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Une transmission\/r\u00e9ception simple, <strong>avec une  validation<\/strong> sur la longueur du message, sera impl\u00e9ment\u00e9e entre les deux syst\u00e8mes.<\/p>\n\n\n\n<p>Le Mega re\u00e7oit les donn\u00e9es, les valide, les affiche dans le terminal et finalement, transmet, \u00e0 chaque minute, les informations vers une base de donn\u00e9es du Web.<\/p>\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 un produit r\u00e9el, il faudrait d\u00e9velopper un protocole de communication entre les deux syst\u00e8mes, pour assurer l&rsquo;int\u00e9grit\u00e9 des donn\u00e9es. Par contre, ceci d\u00e9borde des objectifs de notre cours.<\/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 has-link-color wp-elements-3fb51f62ba1b55de7e26d24dbc564534\">2.1 Voici une repr\u00e9sentation du syst\u00e8me<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/ESH25.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"335\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/ESH25-1024x335.png\" alt=\"\" class=\"wp-image-3214\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/ESH25-1024x335.png 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/ESH25-300x98.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/ESH25-768x251.png 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/ESH25-1536x503.png 1536w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/ESH25-2048x670.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\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 has-link-color wp-elements-c1f7ea4d7c4b9392cf6964ce7bf707b7\">2.2 D\u00e9monstration vid\u00e9o du projet<\/h2>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"846\" style=\"aspect-ratio: 1908 \/ 846;\" width=\"1908\" autoplay controls loop src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Enregistrement-decran-le-2025-04-02-a-11.45.35.mov\"><\/video><\/figure>\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>: Les \u00e9v\u00e9nements n&rsquo;apparaissent pas automatiquement sur la page Web car elle est recharg\u00e9e aux 10 secondes.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2.5 &#8211; Travail pr\u00e9liminaire &#8211; Actualiser le code UNO<\/h2>\n\n\n\n<h3 class=\"wp-block-heading has-vivid-red-color has-text-color has-link-color wp-elements-c8898bec997164517135e16476a95473\">\u00c0 r\u00e9aliser avant de programmer le MEGA<\/h3>\n\n\n\n<p>\ud83d\udc49 Il faut modifier le projet du <strong>UNO <\/strong>(TP01.P2) pour y ajouter les \u00e9l\u00e9ments permettant de transmettre, \u00e0 chaque seconde, les donn\u00e9es du syst\u00e8me vers la station MEGA.  Voir les informations sur les structures de donn\u00e9es \u00e0 la <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">section 4<\/mark><\/strong>. <\/p>\n\n\n\n<p>De plus, <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">il faut changer la fonctionnalit\u00e9 de lecture du potentiom\u00e8tre <\/mark><\/strong>(valeur entre 1 et 10), qui devient la dur\u00e9e de l&rsquo;alarme lors d&rsquo;une d\u00e9tection de mouvement ou suite \u00e0 l&rsquo;utilisation du bouton de panique<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"566\" height=\"41\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-01-a-16.54.23.png\" alt=\"\" class=\"wp-image-3458\" style=\"width:538px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-01-a-16.54.23.png 566w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-01-a-16.54.23-300x22.png 300w\" sizes=\"auto, (max-width: 566px) 100vw, 566px\" \/><\/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\">Il faut aussi ajouter les sections suivantes:<\/mark><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>un <strong>compteur<\/strong> pour le nombre de messages envoy\u00e9s vers le MEGA, incluant la valeur binaire de l&rsquo;\u00e9tat des appareils (capteurs) &#8211; voir l&rsquo;image ci-dessus,<\/li>\n\n\n\n<li>en option (<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">boni 0.5 point<\/mark>), <strong>impl\u00e9menter une interruption mat\u00e9riel pour le bouton de panique<\/strong>.\n<ul class=\"wp-block-list\">\n<li>Voir le document <a href=\"https:\/\/ve2cuy.com\/420-1c4\/index.php\/operations-non-bloquantes\/\" data-type=\"page\" data-id=\"2941\">suivant<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>en option (<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">boni 1.5 point<\/mark>), utilisation du capteur \u00ab\u00a0<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">BME280<\/mark><\/strong>\u00a0\u00bb au lieu de \u00ab\u00a0<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">SHT31<\/mark><\/strong>\u00a0\u00bb\n<ul class=\"wp-block-list\">\n<li>Ce capteur retourne, en plus de la temp\u00e9rature et l&rsquo;humidit\u00e9, la pression atmosph\u00e9rique et l&rsquo;altitude. <\/li>\n\n\n\n<li><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">IMPORTANT<\/mark>, voir 8.12<\/li>\n\n\n\n<li>Il faut modifier la fonction &lsquo;<em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">preparerRequetePourAPI<\/mark><\/em>&lsquo; pour y ajouter les deux valeurs suivantes:\n<ul class=\"wp-block-list\">\n<li>pre (pour la pression atmosph\u00e9rique)<\/li>\n\n\n\n<li>alt (pour l&rsquo;altitude)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"546\" height=\"81\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-09.39.18.png\" alt=\"\" class=\"wp-image-3468\" style=\"width:578px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-09.39.18.png 546w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-09.39.18-300x45.png 300w\" sizes=\"auto, (max-width: 546px) 100vw, 546px\" \/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Voici l&rsquo;\u00e9cran du UNO, version TP02:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"618\" height=\"557\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-10.46.50.png\" alt=\"\" class=\"wp-image-3469\" style=\"width:512px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-10.46.50.png 618w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-10.46.50-300x270.png 300w\" sizes=\"auto, (max-width: 618px) 100vw, 618px\" \/><\/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>: Les messages au bas de l&rsquo;interface servent de traces diagnostiques et sont facultatifs.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">RAPPEL<\/mark><\/strong>: \ud83d\udc49 Le <strong>UNO <\/strong>ne poss\u00e8de qu&rsquo;un seul port UART. Solution: la librairie &lsquo;<a href=\"https:\/\/ve2cuy.com\/420-1c4\/index.php\/ecoute-moi-jaimerais-te-parler\/\" data-type=\"page\" data-id=\"2287\">SoftwareSerial<\/a>&lsquo; pour la liaison avec le MEGA . <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">IMPORTANT<\/mark><\/strong>, IL FAUT UTILISER LES BROCHES <strong>8 ET 9 du UNO<\/strong> pour la connexion s\u00e9rie, reli\u00e9es au port <strong>UART2 du MEGA<\/strong>. <\/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 lienAvecRecepteur(9, 8); \/\/ RX, TX\n...\nlienAvecRecepteur.begin(57600);  \/\/ 57600 est la vitesse maximum recommand\u00e9e!<\/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-cyan-blue-color has-text-color has-link-color wp-elements-f339a0d1c03b874c711296276b600168\">3 &#8211; Partie 1 &#8211; Station de contr\u00f4le (MEGA)<br><br><mark style=\"background-color:rgba(0, 0, 0, 0);color:#5d6364\" class=\"has-inline-color\">Date de remise:<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Semaine 12-13<\/mark> <br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">NOTE<\/mark>: Cette section sera corrig\u00e9e en m\u00eame temps que la partie 2.  Il n&rsquo;y aura pas de solutionnaire disponible avant la remise finale.<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"has-text-align-left\">La station de contr\u00f4le (Arduino <strong>MEGA<\/strong>), sur r\u00e9ception d&rsquo;un message de longueur valide &#8211; <em>sizeof(Systeme)<\/em> &#8211; du UNO, traitera les donn\u00e9es re\u00e7ues et les affichera dans le format suivant:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"842\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/TP2-Surveillance.png\" alt=\"\" class=\"wp-image-3156\" style=\"width:569px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/TP2-Surveillance.png 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/TP2-Surveillance-300x247.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/TP2-Surveillance-768x632.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\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>: Les symboles \ud83c\udd98,6\ufe0f\u20e3,\u267b\ufe0f, \u2b55, &#8230; sont des caract\u00e8res emojis, accessibles sous Windows via les touches &lsquo;<strong>WIN et ;<\/strong>&lsquo;. Ces caract\u00e8res sont impl\u00e9ment\u00e9s dans le terminal de PlatformIO. Par contre, il est possible qu&rsquo;\u00e0 l&rsquo;occasion le rendu ne soit pas parfait.<\/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>: Dans cette partie du projet, la section en jaune au bas de l&rsquo;\u00e9cran, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"><strong>n&rsquo;est pas \u00e0 faire<\/strong><\/mark>.<\/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 has-link-color wp-elements-bfae152a7d337c1f7a42f0a28a3bd2e4\">4 &#8211; Les structures de donn\u00e9es<\/h2>\n\n\n\n<p class=\"has-text-align-left\">Pour la pr\u00e9paration de l&rsquo;envoi des donn\u00e9es du syst\u00e8me UNO, il faut utiliser les structures de donn\u00e9es suivantes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>EtatAppareils<\/strong>: Une \u00e9num\u00e9ration sur les diff\u00e9rents bits d&rsquo;un entier non sign\u00e9\n<ul class=\"wp-block-list\">\n<li>Seulement les huit premiers seront utilis\u00e9s<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Evenements<\/strong>: Une \u00e9num\u00e9ration des diff\u00e9rents types d&rsquo;\u00e9v\u00e9nements pouvant \u00eatre envoy\u00e9s vers le MEGA<\/li>\n\n\n\n<li><strong>Appareils<\/strong>: Une structure de donn\u00e9es d\u00e9crivant:\n<ul class=\"wp-block-list\">\n<li>L&rsquo;\u00e9tat des appareils du UNO<\/li>\n\n\n\n<li>La temp\u00e9rature<\/li>\n\n\n\n<li>L&rsquo;humidit\u00e9<\/li>\n\n\n\n<li><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">En option<\/mark><\/strong> (d\u00e9fi) la pression atmosph\u00e9rique et l&rsquo;altitude<\/li>\n\n\n\n<li>La dur\u00e9e de l&rsquo;alarme dans le cas d&rsquo;une d\u00e9tection de mouvement<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Systeme<\/strong>: Une structure de donn\u00e9es d\u00e9crivant:\n<ul class=\"wp-block-list\">\n<li>Le nom du syst\u00e8me (Votre matricule pr\u00e9c\u00e9d\u00e9 d&rsquo;un &lsquo;E&rsquo;)\n<ul class=\"wp-block-list\">\n<li>Par exemple: E12345678<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Une variable de type Appareils<\/li>\n\n\n\n<li>Un code de message (Evenements)<\/li>\n\n\n\n<li>L&rsquo;heure du RTC du UNO.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">NOTE IMPORTANTE<\/mark><\/strong>: Le symbole \ud83d\udc49 indique un \u00e9l\u00e9ment prescrit (obligatoire).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udc49 Voici les d\u00e9clarations \u00e0 utiliser dans votre projet:<\/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=\"\">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  APP_UNITE_TEMP           =     0b1 &lt;&lt; 7  \/\/ 1000 0000\n};\n\nenum Evenements {\n  evenement_statut_appareils,         \/\/ 0\n  evenement_temperature_depassee,     \/\/ 1\n  evenement_detection_mouvement,      \/\/ 2\n  evenement_bouton_panique,           \/\/ 3\n  evenement_systeme_enligne,          \/\/ 4\n  evenement_changement_etat,          \/\/ 5\n  evenement_UNO_non_connecte,         \/\/ 6\n  evenement_nb_codes                  \/\/ 7  \n};\n\n#define MAX_CAR_NOM_SYSTEME 10\n\nstruct Appareils{\n    unsigned int  etatAppareils;  \/\/ Traitement sur les bits.  \/\/ 2 octets\n    float         temperature;                                 \/\/ 4 octets\n    float         humidite;                                    \/\/ 4 octets\n    int           dureeAlarme;                                 \/\/ 2 octets \n\n    \/\/ -->> EN OPTION:\n    \/\/ uint32_t      pressionAtmospherique;                    \/\/ 4 octets \n    \/\/ float         altitude;                                 \/\/ 4 octets\n  };\n  \nstruct Systeme {\n    \/\/ ATTENTION de ne pas d\u00e9passer 9 caract\u00e8res pour le nom du syst\u00e8me!!!\n    char        nomSysteme[MAX_CAR_NOM_SYSTEME];  \/\/ 10 octets\n    Evenements  codeMessage;                      \/\/  2 octets NOTE: C\u00f4t\u00e9 UNO, ce contenu n'est pas trait\u00e9.\n    byte        heure;                            \/\/  1 octet\n    byte        minute;                           \/\/  1 octet\n    byte        seconde;                          \/\/  1 octet\n    Appareils   appareils;                        \/\/ 12 octets\n  };  <\/pre>\n\n\n\n<p class=\"has-text-align-left\">\ud83d\udc49 La communication entre les deux microcontr\u00f4leurs sera r\u00e9alis\u00e9e en utilisant les apprentissages du document suivant : <a href=\"https:\/\/ve2cuy.com\/420-1c4\/index.php\/ecoute-moi-jaimerais-te-parler\/\">Communication&nbsp;entre deux&nbsp;Arduino<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Pr\u00e9paration des donn\u00e9es cot\u00e9 UNO<\/h3>\n\n\n\n<p>Pour \u00e9conomiser sur les donn\u00e9es envoy\u00e9es sur le port s\u00e9rie, l&rsquo;\u00e9tat de tous les appareils est stock\u00e9 dans une seule variable enti\u00e8re.<\/p>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">INDICE<\/mark><\/strong>: Voici comment renseigner la variable:<\/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=\"\">  \/\/ Allumer les diff\u00e9rents bits de 'etats' en fonction de l'\u00e9tat des appareils\n  etats |= digitalRead(LED01) ? APP_LED1 : 0;\n  etats |= digitalRead(LED02) ? APP_LED2 : 0;\n  etats |= digitalRead(RELAI) ? APP_RELAI : 0;\n  etats |= mouvementDetecte ? APP_MOUVEMENT : 0;\n  etats |= boutonPanique ? APP_PANIQUE_DECLENCHE : 0;\n  etats |= retroEclairage ? APP_RETRO_LCD : 0;\n  etats |= detecteurDeMouvement  ? APP_MOUVEMENT_ARME : 0;\n  etats |= affichageCelcius  ? APP_UNITE_TEMP : 0;\n\n\/\/ Le r\u00e9sultat sera plac\u00e9 dans la propri\u00e9t\u00e9 'Systeme.appareils.etatAppareils'<\/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-cyan-blue-color has-text-color has-link-color wp-elements-2d9f8ff9c0b71565f44440516e4036cd\">5 &#8211; Explication des \u00e9l\u00e9ments d&rsquo;interface de l&rsquo;\u00e9cran du MEGA<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"549\" height=\"646\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-11.22.04.png\" alt=\"\" class=\"wp-image-3471\" style=\"width:567px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-11.22.04.png 549w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-11.22.04-255x300.png 255w\" sizes=\"auto, (max-width: 549px) 100vw, 549px\" \/><\/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>: Les messages au bas de l&rsquo;interface servent de traces diagnostiques et sont facultatifs.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">5.1 &#8211; La fonction afficherTexteAvecRemplissage()<\/h3>\n\n\n\n<p>\ud83d\udc49 Il faut programmer une fonction qui permet d&rsquo;afficher un texte \u00e0 l&rsquo;\u00e9cran, \u00e0 la position XY et qui compl\u00e8te la ligne, sur une longueur de n, avec un caract\u00e8re.  Si le caract\u00e8re n&rsquo;est pas pr\u00e9cis\u00e9 \u00e0 l&rsquo;appel alors &lsquo;-&lsquo; sera utilis\u00e9.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Voici son prototype et des exemples de son utilisation:<\/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=\"\">void afficherTexteAvecRemplissage(const char* texte, int longueur, int posX, int posY, char caractere = '-');\n\n\/\/ Et des exemples d'utilisation:\nafficherTexteAvecRemplissage(\"LED1\", LONGUEUR_LIGNE_POINT, POS_X, LIGNE_TEXTE_LED1,'=');\nafficherTexteAvecRemplissage(\"LED2\", LONGUEUR_LIGNE_POINT, POS_X,LIGNE_TEXTE_LED2);\nafficherTexteAvecRemplissage(\"RELAI\", LONGUEUR_LIGNE_POINT, POS_X,6,LIGNE_TEXTE_RELAI, '*');\nafficherTexteAvecRemplissage(\"Unit\u00e9 de temp\u00e9rature\", LONGUEUR_LIGNE_POINT, POS_X,LIGNE_TEXTE_TEMP, ' ');\nafficherTexteAvecRemplissage(\"D\u00e9tecteur de mouvement activ\u00e9\", LONGUEUR_LIGNE_POINT, POS_X,LIGNE_TEXTE_MOUVEMENT);<\/pre>\n\n\n\n<p>Ce qui produira le r\u00e9sultat suivant:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"820\" height=\"188\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/afficherTexte.png\" alt=\"\" class=\"wp-image-3228\" style=\"width:643px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/afficherTexte.png 820w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/afficherTexte-300x69.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/afficherTexte-768x176.png 768w\" sizes=\"auto, (max-width: 820px) 100vw, 820px\" \/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">5.2 &#8211; Affichage de la dur\u00e9e de l&rsquo;alarme<\/h3>\n\n\n\n<p>Les \u00e9mojis 1\ufe0f\u20e3 \u00e0 \ud83d\udd1f sont utilis\u00e9s pour l&rsquo;affichage de la dur\u00e9e de l&rsquo;alarme.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"914\" height=\"46\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/duree-alarme.png\" alt=\"\" class=\"wp-image-3230\" style=\"width:638px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/duree-alarme.png 914w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/duree-alarme-300x15.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/duree-alarme-768x39.png 768w\" sizes=\"auto, (max-width: 914px) 100vw, 914px\" \/><\/figure>\n<\/div>\n\n\n<p>ASTUCE:<\/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 char * graphDigits[] = {\"\", \"1\ufe0f\u20e3\", \"2\ufe0f\u20e3\", \"3\ufe0f\u20e3\", \"4\ufe0f\u20e3\", \"5\ufe0f\u20e3\", \"6\ufe0f\u20e3\",\"7\ufe0f\u20e3\", \"8\ufe0f\u20e3\",\"9\ufe0f\u20e3\", \"\ud83d\udd1f\"};<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">5.3 &#8211; Affichages des valeurs et \u00e9tats<\/h3>\n\n\n\n<p>Rappel, les valeurs et \u00e9tats du syst\u00e8me proviennent du UNO.  Nous les avons re\u00e7us via la communication UART.  Ils devraient \u00eatre stock\u00e9s dans un variable de type &lsquo;Systeme&rsquo;.<\/p>\n\n\n\n<p>Pour les appareils de type ON\/OFF, comme les LEDs le relai, le d\u00e9tecteur de mouvements, l&rsquo;unit\u00e9 C\/F, &#8230;, les informations seront stock\u00e9s au niveau des bits de la propri\u00e9t\u00e9 &lsquo;<strong><em>etatAppareils<\/em><\/strong>&lsquo;.<\/p>\n\n\n\n<p>Pour connaitre l&rsquo;\u00e9tat de la LED1, il suffit de v\u00e9rifier si le premier bit de la propri\u00e9t\u00e9 est \u00e0 ON. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Voici un exemple d&rsquo;affichage selon l&rsquo;\u00e9tat d&rsquo;un bit<\/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=\"\">void afficherSymboleSelonEtat(int posX, int posY, bool etat, const char * symboleON, const char * symboleOFF)\n{\n ...\n} \/\/ afficherSymboleSelonEtat\n\n\nvoid actualiserEtatDesAppareils()\n{\n  uint8_t etats = unSysteme.appareils.etatAppareils;\n  afficherSymboleSelonEtat(COLONNE_ETAT,LIGNE_LED1, (unSysteme.appareils.etatAppareils &amp; APP_LED1), _ON , _OFF ); \/\/ Nous testons ici le bit 0\n  afficherSymboleSelonEtat(COLONNE_ETAT,LIGNE_LED2, (unSysteme.appareils.etatAppareils &amp; APP_LED2), _ON , _OFF ); \/\/ Nous testons ici le bit 1\n  ...\n} \/\/ actualiser\u00c9tatDesAppareils\n<\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"736\" height=\"104\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Capture-decran-2025-03-08-092733.png\" alt=\"\" class=\"wp-image-3151\" style=\"width:466px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Capture-decran-2025-03-08-092733.png 736w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Capture-decran-2025-03-08-092733-300x42.png 300w\" sizes=\"auto, (max-width: 736px) 100vw, 736px\" \/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">5.9 &#8211; Voici quelques d\u00e9finitions utiles<\/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=\"\">#define _ON                           \"\u267b\ufe0f\"  \/\/ ou \"\ud83d\udfe2\" Selon votre pr\u00e9f\u00e9rence\n#define _OFF                          \"\u2b55\"  \/\/ ou \"\ud83d\udd34\" Selon votre pr\u00e9f\u00e9rence\n#define FAHRENHEIT                    \"Fahrenheit\"\n#define CELCIUS                       \" Celcius  \"\n#define SOS                           \"\ud83c\udd98\" \/\/ \u00c0 utiliser en cas de panique ou de mouvement, sinon afficher deux espaces '  '\nconst char * etatSysteme[] =         {\"\ud83e\udd75\", \"\u2139\ufe0f\", \"\ud83d\ude21\",\"\ud83d\udc80\", \"\ud83c\udd98\", \"\ud83c\udd97\"}; \/\/ D\u00e9tails \u00e0 suivre ...<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">5.10 &#8211; <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">D\u00e9fi optionnel<\/mark> (1 point boni)<\/h2>\n\n\n\n<p>Animer les lignes &lsquo;Bouton de panique&rsquo; et &lsquo;Mouvement d\u00e9tect\u00e9&rsquo; en cas d&rsquo;activit\u00e9.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"34\" style=\"aspect-ratio: 526 \/ 34;\" width=\"526\" autoplay controls loop src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Enregistrement-decran-le-2025-04-02-a-11.24.04.mov\"><\/video><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Validation des donn\u00e9es re\u00e7ues du UNO<\/h2>\n\n\n\n<p>\ud83d\udc49 Il est primordial de mettre en place une m\u00e9canique de validation des donn\u00e9es re\u00e7ues du UNO avant le traitement et ou l&rsquo;affichage.<\/p>\n\n\n\n<p>Nous assumerons que les donn\u00e9es sont valides seulement si le nombre d&rsquo;octets re\u00e7us est \u00e9gal \u00e0 la taille de la structure &lsquo;Systeme&rsquo;.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color has-link-color wp-elements-419c0e5ac4bc2423ae182d7b4753af80\">Voici un exemple de validation des donn\u00e9es re\u00e7ues du 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=\"\">  \/\/ Validation cot\u00e9 MEGA\n  \/\/ V\u00e9rifier si des donn\u00e9es sont disponibles sur le port du transmetteur\n  if (transmetteur.available() == sizeof(unSysteme)) {  \/\/ NOTE: unSysteme est une variable de type 'Systeme'\n    \/\/ Si le bon nombre d'octets re\u00e7ues, lire les donn\u00e9es\n    transmetteur.readBytes((char*)&amp;unSysteme, sizeof(unSysteme)); \/\/ (char*) indique de traiter 'unSysteme' comme une suite d'octets.\n    \/\/ Afficher\/traiter les donn\u00e9es re\u00e7ues\n    ...\n  } else {\n    \/\/ Sinon, effacer le buffer de r\u00e9ception    \n    while (transmetteur.available()) {\n      transmetteur.read(); \/\/ Lire et ignorer les donn\u00e9es du buffer\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\">Ligne de statut de r\u00e9ception<\/h2>\n\n\n\n<p>Il faut incr\u00e9menter et afficher un compteur \u00e0 chaque r\u00e9ception valid\u00e9e.<br>Par exemple, l&rsquo;image suivante indique que le MEGA a re\u00e7u 4076 transmissions de longueur valide.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"50\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/donnees-valides.png\" alt=\"\" class=\"wp-image-3263\" style=\"width:587px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/donnees-valides.png 1000w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/donnees-valides-300x15.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/donnees-valides-768x38.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1002\" height=\"893\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/WEB-API2.png\" alt=\"\" class=\"wp-image-3238\" style=\"width:435px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/WEB-API2.png 1002w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/WEB-API2-300x267.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/WEB-API2-768x684.png 768w\" sizes=\"auto, (max-width: 1002px) 100vw, 1002px\" \/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Partie 2 &#8211; Transmission des donn\u00e9es vers le Web<br>Date de remise: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Semaine 15<\/mark><\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6<strong> &#8211; <\/strong>DESCRIPTION<\/h2>\n\n\n\n<p class=\"has-text-align-left\">Dans la partie 2 du projet, il faut envoyer les informations re\u00e7us par la station de surveillance (le MEGA) vers une base de donn\u00e9es accessible via le module Grove WiFi et le r\u00e9seau Internet.<\/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>: Nous avons pratiqu\u00e9 cette fonctionnalit\u00e9 dans le laboratoire &lsquo;<a href=\"https:\/\/ve2cuy.com\/420-1c4\/index.php\/grove-uart-wifi-v2\/\" data-type=\"page\" data-id=\"2972\">Le module Wifi<\/a>&lsquo;.<\/p>\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 has-link-color wp-elements-b1d26c5a7e1b7d04bee10572be274f70\"><strong>Directive de branchement<\/strong> du module Wifi<\/p>\n\n\n\n<p>\ud83d\udc49 Le module ESPWifi doit \u00eatre connect\u00e9 au port UART3 du MEGA. <\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>6.1<\/strong> &#8211; Il est possible de consulter le contenu de cette base de donn\u00e9e \u00e0 partir de l&rsquo;URL suivante: <a href=\"http:\/\/esh25.ve2cuy.com\">http:\/\/esh25.ve2cuy.com<\/a> ou bien <a href=\"http:\/\/esh25.ve2cuy.com\/index2.php\">ici<\/a>, pour plus de d\u00e9tails,<\/p>\n\n\n\n<p>Ce qui devrait afficher ceci:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"834\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/TP02-LISTE-SEV-1024x834.png\" alt=\"\" class=\"wp-image-3160\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/TP02-LISTE-SEV-1024x834.png 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/TP02-LISTE-SEV-300x244.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/TP02-LISTE-SEV-768x625.png 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/TP02-LISTE-SEV-1536x1250.png 1536w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/TP02-LISTE-SEV.png 1570w\" 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<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">7 &#8211; Utilisation de l&rsquo;API<\/h2>\n\n\n\n<p>L&rsquo;API est disponible via l&rsquo;URL suivante <a href=\"http:\/\/esh25.ve2cuy.com\/tp2-api.php\">http:\/\/esh25.ve2cuy.com\/tp2-api.php<\/a>.<\/p>\n\n\n\n<p>C&rsquo;est une API simple, qui permet d&rsquo;ajouter des enregistrements \u00e0 une base de donn\u00e9es.<\/p>\n\n\n\n<p>Pour ajouter les informations re\u00e7us par le MEGA \u00e0 cette base de donn\u00e9es, il suffit de construire une adresse Web avec les diff\u00e9rentes informations du syst\u00e8me.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">ASTUCE 1:<\/mark><\/strong> Passer du r\u00e9seau Wifi C\u00e9gep \u00e0 celui de la maison lors de la compilation:<\/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=\"\">#ifdef CEGEP\nchar ssid[] =  \"CSTJ-UBI-D136\";      \nchar pass[] =  \"unMotDePasse\";     \n#else\nchar ssid[] = \"MON-WIFI-MAISON\";\nchar pass[] = \"unMotDePasse\";    \n#endif<\/pre>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">ASTUCE 2<\/mark><\/strong>: Passer du Wifi c\u00e9gep au Wifi maison sans avoir \u00e0 recompiler le programme:<\/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=\"\">char ssid[20];\nchar pass[20];\n\n\/\/ S\u00e9lectionner le r\u00e9seau Wifi \u00e0 utiliser\nchar optionWifi = 0;\nterminal &lt;&lt; \"1) Wifi Cegep, 2) Wifi maison? : \";\n\nwhile (terminal.available() == 0); \/\/ Attendre une touche du clavier ...\n\noptionWifi = terminal.read();\n\nif (optionWifi == '1') {\n strcpy(ssid, \"CSTJ-UBI-D136\");\n strcpy(pass,\"motDePasse\"); \n} else {\n  strcpy(ssid, \"Wifi-Maison\");\n  strcpy(pass,\"motDePasse\"); \n}<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-left\">7.1 &#8211; Fonction pour pr\u00e9parer et encoder l&rsquo;URL de la requ\u00eate GET<\/h3>\n\n\n\n<p>La fonction suivante met en forme correctement les diff\u00e9rents param\u00e8tres \u00e0 soumettre \u00e0 L&rsquo;API.<\/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=\"\">\/\/ -------------------------------------------------------------------------------------------------------\n\/\/ Auteur:      Alain Boudreault\n\/\/ Cible:       Vous pouvez utiliser cette fonction dans votre projet.\n\/\/ Description: Sert \u00e0 construire la requ\u00eate GET qui sera utilis\u00e9e vers L'API web.\n\/\/ ATTENTION:   Ne pas modifier cette fonction sinon l'API va refuser votre requ\u00eate.\n\/\/ -------------------------------------------------------------------------------------------------------\nvoid preparerRequetePourAPI(\n\/\/ -------------------------------------------------------------------------------------------------------\n  char *buffer,           \/\/ Pour recevoir le texte de la requ\u00eate GET vers l'API.\n  int tailleBuffer,       \/\/ Taille du buffer servant \u00e0 recevoir le texte de la requ\u00eate GET vers l'API\n  Systeme unSysteme,      \/\/ Une structure repr\u00e9sentant les donn\u00e9es re\u00e7us du UNO.  Voir 'struct Systeme'.\n  Evenements codeEvent,   \/\/ Code d'\u00e9v\u00e9nement, Voir 'enum Evenements' pour les codes disponibles.\n  const char * uneNote,   \/\/ Un texte quelconque.  Ce texte sera stock\u00e9 dans la base de donn\u00e9es de l'API.\n  const char * adresseIP  \/\/ \u00c0 vous de construire une chaine repr\u00e9sentant l'adresse IP du votre module Wifi.\n)\n\/\/ -------------------------------------------------------------------------------------------------------\n{\n\/\/ Voir WiFi.localIP() pour l'adresse IP du module Wifi.\n \n   snprintf(buffer, tailleBuffer, \n    \"GET \/tp2-api.php?nomSys=%s&amp;ipAdr=%s&amp;note=%s&amp;statut=%d&amp;app=%d&amp;tmp=%d&amp;hum=%d&amp;dur=%d&amp;hr=%02d:%02d:%02d HTTP\/1.1\", \n    unSysteme.nomSysteme, \n    adresseIP,\n    \/\/ urlEncode(messages[code]).c_str(), \n    urlEncode(uneNote).c_str(),                                   \/\/ &amp;note=\n    codeEvent,                                                    \/\/ &amp;statut=       \n    unSysteme.appareils.etatAppareils,                            \/\/ &amp;app=\n    int(round(unSysteme.appareils.temperature)),                  \/\/ &amp;tmp=  NOTE: Conversion en int car snprinf ne supporte pas les float sous Arduino.\n    int(round(unSysteme.appareils.humidite)),                     \/\/ &amp;hum=\n    unSysteme.appareils.dureeAlarme,                              \/\/ &amp;dur=\n    int(unSysteme.heure),                                         \/\/ $hr=00:00:00\n    int(unSysteme.minute),\n    int(unSysteme.seconde)\n    );\n} \/\/ preparerRequetePourAPI\n<\/pre>\n\n\n\n<p>L&rsquo;utilisation de cette fonction pour former l&rsquo;URL vers l&rsquo;API devrait produire une chaine comme:<\/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=\"\">GET \/tp2-api.php?nomSys=E000001&amp;ipAdr=192.168.10.127&amp;note=VE2CUY&amp;statut=4&amp;app=209&amp;tmp=20&amp;hum=45&amp;dur=6&amp;hr=18:36:23 HTTP\/1.1<\/pre>\n\n\n\n<p>\ud83d\udc49 <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">NOTE IMPORTANTE<\/mark><\/strong>:  Si le nom du syst\u00e8me ne correspond pas \u00e0 un num\u00e9ro de matricule valide, pr\u00e9c\u00e9d\u00e9 de &lsquo;E&rsquo;, la requ\u00eate sera rejet\u00e9e par l&rsquo;API.<\/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=\"176\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/refusee-1024x176.png\" alt=\"\" class=\"wp-image-3292\" style=\"width:598px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/refusee-1024x176.png 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/refusee-300x52.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/refusee-768x132.png 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/refusee.png 1172w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>De plus, l&rsquo;API ignore les requ\u00eates qui exc\u00e8des un maximum de <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">20 requ\u00eates en 5 minutes<\/mark><\/strong>. Donc, attention de ne pas envoyer des messages inutilement vers l&rsquo;API.<\/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=\"90\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/depassement-1024x90.png\" alt=\"\" class=\"wp-image-3290\" style=\"width:607px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/depassement-1024x90.png 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/depassement-300x26.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/depassement-768x68.png 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/depassement.png 1204w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>Exemple de validation du nom du syst\u00e8me en php:<\/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=\"\">\/\/ V\u00e9rifier que le nom du syst\u00e8me est valide:\n$nomSysteme= \"A1234567\";\n$tableauMatricules = [\"E0000001\", \"!VE2CUY!\", \"E1010101\", \"...\"];\nif (in_array($nomSysteme, $tableauMatricules)) {\n    echo \"La requ\u00eate est accept\u00e9e\";\n} else {\n    echo \"La requ\u00eate est refus\u00e9e!\";\n}\n\n\/\/ V\u00e9rifier que le maximum de requ\u00eates n'a pas \u00e9t\u00e9 d\u00e9pass\u00e9 en 5 minutes:\n$sql = \"SELECT COUNT(*) as total FROM tbl_sys WHERE nomDuSysteme = ? AND TIMESTAMPDIFF(MINUTE, date, NOW()) &lt;= 5\";\nif ( $total > 20 ) alors grrr ... ;-(<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">7.2 &#8211; <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Rappel <\/mark>&#8211; Postman pour tester les requ\u00eates<\/h2>\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=\"\"># Voici une requ\u00eate valide:\nesh25.ve2cuy.com\/tp2-api.php?nomSys=VE2CUY&amp;ipAdr=254.192.250.127&amp;note=Syst%C3%A8me%20de%20surveillance%20par%20VE2CUY&amp;statut=4&amp;app=84&amp;tmp=18&amp;hum=46&amp;dur=6&amp;hr=13:37:36\n<\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"490\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/TP02-API-1024x490.png\" alt=\"\" class=\"wp-image-3157\" style=\"width:651px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/TP02-API-1024x490.png 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/TP02-API-300x144.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/TP02-API-768x368.png 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/TP02-API-1536x736.png 1536w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/TP02-API-2048x981.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">8 &#8211; Ce qui doit \u00eatre r\u00e9alis\u00e9 dans cette partie<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">8.1 &#8211; evenement_systeme_enligne <\/h3>\n\n\n\n<p>Lorsque le MEGA re\u00e7oit le<strong> premier message<\/strong> du UNO, il doit envoyer une requ\u00eate de type &lsquo;<strong><em>evenement_systeme_enligne<\/em><\/strong>&lsquo; vers l&rsquo;API.  Ce qui devrait afficher la ligne suivante sur la page de consultation des \u00e9v\u00e9nements syst\u00e8mes:<\/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=\"57\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/enligne-1024x57.png\" alt=\"\" class=\"wp-image-3248\" style=\"width:621px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/enligne-1024x57.png 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/enligne-300x17.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/enligne-768x43.png 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/enligne.png 1512w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/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>: Les \u00e9v\u00e9nements sont renseign\u00e9s par le param\u00e8tre &lsquo;Evenements codeEvent&rsquo; de la fonction &lsquo;preparerRequetePourAPI&rsquo;.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">8.2 &#8211; evenement_statut_appareils<\/h3>\n\n\n\n<p>\u00c0 chaque minute, <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">mais pas plus<\/mark><\/strong>, le MEGA doit envoyer une requ\u00eate de type &lsquo;<strong><em>evenement_statut_appareils<\/em><\/strong>&lsquo; vers l&rsquo;API.  Ce qui devrait afficher la ligne suivante sur la page de consultation des \u00e9v\u00e9nements syst\u00e8mes:<\/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=\"41\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/sys-info-1024x41.png\" alt=\"\" class=\"wp-image-3250\" style=\"width:638px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/sys-info-1024x41.png 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/sys-info-300x12.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/sys-info-768x31.png 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/sys-info.png 1508w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>Un clic sur la ligne affichera plus de d\u00e9tails sur le syst\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=\"325\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/api-details-1024x325.png\" alt=\"\" class=\"wp-image-3303\" style=\"width:650px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/api-details-1024x325.png 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/api-details-300x95.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/api-details-768x244.png 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/api-details-1536x487.png 1536w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/api-details.png 1570w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">8.3 &#8211; evenement_changement_etat<\/h3>\n\n\n\n<p>\u00c0 la r\u00e9ception des informations du UNO, il faut v\u00e9rifier s&rsquo;il y a eu un changement sur un des bits de la propri\u00e9t\u00e9 &lsquo;<strong>etatAppareils<\/strong>&lsquo; par rapport \u00e0 la r\u00e9ception pr\u00e9c\u00e9dente. Si c&rsquo;est le cas, le MEGA doit envoyer une requ\u00eate de type &lsquo;<strong><em>evenement_changement_etat<\/em><\/strong>&lsquo; vers l&rsquo;API.  Ce qui devrait afficher la ligne suivante sur la page de consultation des \u00e9v\u00e9nements syst\u00e8mes:<\/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=\"42\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/changement-etat-1024x42.png\" alt=\"\" class=\"wp-image-3252\" style=\"width:618px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/changement-etat-1024x42.png 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/changement-etat-300x12.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/changement-etat-768x32.png 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/changement-etat.png 1504w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>Dans cet exemple, LED1 \u00e9tait \u00e0 OFF \u00e0 la lecture pr\u00e9c\u00e9dente.  Il est pass\u00e9 \u00e0 ON (via le menu 1 du UNO) donc la requ\u00eate &lsquo;<strong><em>evenement_changement_etat<\/em><\/strong>&lsquo; a \u00e9t\u00e9 envoy\u00e9e.<\/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=\"\">\/\/ Par exemple,\nsendInfoTOWebAPI(evenement_changement_etat);<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">8.4 &#8211; evenement_dectection_mouvement<\/h3>\n\n\n\n<p>Si le d\u00e9tecteur de mouvement a \u00e9t\u00e9 d\u00e9clench\u00e9, le MEGA doit envoyer, <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">imm\u00e9diatement<\/mark><\/strong>, une requ\u00eate de type &lsquo;<strong><em>evenement_detection_mouvement<\/em><\/strong>&lsquo; vers l&rsquo;API. Ce qui devrait afficher la ligne suivante sur la page de consultation des \u00e9v\u00e9nements syst\u00e8mes:<\/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=\"45\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/mouvement-1024x45.png\" alt=\"\" class=\"wp-image-3253\" style=\"width:608px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/mouvement-1024x45.png 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/mouvement-300x13.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/mouvement-768x34.png 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/mouvement.png 1498w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/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\">ATTENTION<\/mark><\/strong>, il est <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">IMPORTANT <\/mark><\/strong>de ne pas renvoyer ce message avant que le d\u00e9tecteur de mouvements soit retourn\u00e9 \u00e0 l&rsquo;\u00e9tat OFF au moins une fois. Si votre logique ne fait que v\u00e9rifier si le bit de l&rsquo;appareil mouvement est ON, alors la requ\u00eate risque d&rsquo;\u00eatre envoy\u00e9e \u00e0 chaque r\u00e9ception des donn\u00e9es du UNO (aux secondes) ce qui aura comme cons\u00e9quence de voir vos requ\u00eates bloqu\u00e9es par l&rsquo;API pendant un certain temps.<\/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=\"\">\/\/ Par exemple,\n  static bool messageUrgent = true;\n  \/\/ Envoyer imm\u00e9diatement les donn\u00e9es vers l'API sur d\u00e9tection de mouvements\n  \/\/ NOTE: Il faut envoyer ce message qu'une seule fois pendant la dur\u00e9e de l'\u00e9v\u00e9nement.\n  if ((unSysteme.appareils.etatAppareils &amp; APP_MOUVEMENT)) {\n      if(messageUrgent) {\n        sendInfoTOWebAPI(evenement_detection_mouvement);\n        messageUrgent = false;\n    }\n  } else {\n    messageUrgent = true;\n  }<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">8.5 &#8211; evenement_bouton_panique<\/h3>\n\n\n\n<p>Idem que 8.4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">8.6 &#8211; evenement_temperature_depassee<\/h3>\n\n\n\n<p>Si la valeur de la temp\u00e9rature est &gt;= \u00e0 24c, le MEGA doit envoyer, <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">imm\u00e9diatement<\/mark><\/strong>, une requ\u00eate de type &lsquo;<strong><em>evenement_temperature_depassee<\/em><\/strong>&lsquo; vers l&rsquo;API. Ce qui devrait afficher la ligne suivante sur la page de consultation des \u00e9v\u00e9nements syst\u00e8mes:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"755\" height=\"37\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-13.48.14.png\" alt=\"\" class=\"wp-image-3479\" style=\"width:608px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-13.48.14.png 755w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-13.48.14-300x15.png 300w\" sizes=\"auto, (max-width: 755px) 100vw, 755px\" \/><\/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\">ATTENTION<\/mark><\/strong>, il est <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">IMPORTANT <\/mark><\/strong>de ne pas renvoyer ce message avant que la temp\u00e9rature soit retourn\u00e9e \u00e0 &lt; 24. Si votre logique ne fait que v\u00e9rifier si la temp\u00e9rature est &gt;= 24, alors la requ\u00eate risque d&rsquo;\u00eatre envoy\u00e9e \u00e0 chaque r\u00e9ception des donn\u00e9es du UNO (aux secondes) ce qui aura comme cons\u00e9quence de voir vos requ\u00eates bloqu\u00e9es par l&rsquo;API pendant un certain temps.<\/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=\"\">\/\/ Par exemple,        \nstatic float temperaturtePrecedante = unSysteme.appareils.temperature;\n\nif (unSysteme.appareils.temperature > TEMPERATURE_MAXIMUM &amp;&amp; temperaturtePrecedante &lt;= TEMPERATURE_MAXIMUM ) {\n   sendInfoTOWebAPI(evenement_temperature_depassee);\n   temperaturtePrecedante = unSysteme.appareils.temperature;\n}<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">8.7 &#8211; evenement_UNO_non_connecte<\/h3>\n\n\n\n<p>Si le MEGA ne re\u00e7oit aucun message du UNO pendant <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">5 minutes<\/mark><\/strong>, il faut envoyer une requ\u00eate de type &lsquo;<strong><em>evenement_UNO_non_connecte<\/em><\/strong>&lsquo; vers l&rsquo;API. Ce qui devrait afficher la ligne suivante sur la page de consultation des \u00e9v\u00e9nements syst\u00e8mes:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"754\" height=\"36\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-14.28.40.png\" alt=\"\" class=\"wp-image-3488\" style=\"width:622px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-14.28.40.png 754w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-14.28.40-300x14.png 300w\" sizes=\"auto, (max-width: 754px) 100vw, 754px\" \/><\/figure>\n<\/div>\n\n\n<p>La requ\u00eate sera transmisse \u00e0 chaque p\u00e9riode de 5 minutes, tant que le UNO sera hors ligne.<\/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=\"\">\/\/ Par exemple,\nif (aucune_reception_depuis_5_minutes){\n   sendInfoTOWebAPI(evenement_UNO_non_connecte);\n}<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">8.8 &#8211; 4Digit display<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"486\" height=\"276\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/11\/Enregistrement-decran-le-2022-11-20-a-18.35.10.gif\" alt=\"\" class=\"wp-image-2406\" style=\"width:255px;height:auto\"\/><\/figure>\n<\/div>\n\n\n<p>Connect\u00e9 sur D6 et D7 du Mega, le 4Digit affiche l&rsquo;heure re\u00e7ue du UNO et le symbole &lsquo;:&rsquo; change d&rsquo;\u00e9tat (ON\/OFF) \u00e0 chaque 1\/2 seconde. <\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">8.9 &#8211; NEOPixel<\/h3>\n\n\n\n<p>Connect\u00e9 sur D4 et D5 du Mega, le NEOPixel affiche une animation diff\u00e9rente selon les \u00e9v\u00e9nements suivants:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>evenement_detection_mouvement<\/em>:\n<ul class=\"wp-block-list\">\n<li>r = 255; g = 0; b = 0;<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><em>evenement_changement_etat<\/em>:\n<ul class=\"wp-block-list\">\n<li>r = 255; g = 255; b = 0;<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><em>evenement_statut_appareils<\/em> :\n<ul class=\"wp-block-list\">\n<li>r = 0; g = 0; b = 255;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\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>: L&rsquo;animation doit-\u00eatre de courte dur\u00e9e sinon il y aura perte de donn\u00e9es au niveau de la r\u00e9ception en provenance du UNO.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">8.10* &#8211; RFID (<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">BONI<\/mark>)<\/h3>\n\n\n\n<p>Un capteur RFID, connect\u00e9 sur UART1 du MEGA, permet d&rsquo;activer\/d\u00e9sactiver l&rsquo;envoi de messages vers l&rsquo;API Web. Il y a un document de r\u00e9f\u00e9rence &#8211;&gt; <a href=\"https:\/\/ve2cuy.com\/420-1c4\/index.php\/capteur-rfid\/\" data-type=\"page\" data-id=\"3411\">ici<\/a>.<\/p>\n\n\n\n<p>Pour relever ce d\u00e9fi, il faut emprunter un capteur et une carte.<\/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=\"740\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Grove-125KHz_RFID_Reader-1024x740.jpg\" alt=\"\" class=\"wp-image-3406\" style=\"width:405px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Grove-125KHz_RFID_Reader-1024x740.jpg 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Grove-125KHz_RFID_Reader-300x217.jpg 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Grove-125KHz_RFID_Reader-768x555.jpg 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/Grove-125KHz_RFID_Reader.jpg 1144w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/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>: Le capteur vient avec une cl\u00e9 \u00e0 code unique ayant le format suivant: &lsquo;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">OctetD\u00e9part<\/mark>6900E6C9BBFD<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">OctetFin<\/mark>. Il faut extraire les octets de buffer+1 \u00e0 buffer-1.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"640\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/MIKROE-1475.jpg\" alt=\"\" class=\"wp-image-3408\" style=\"width:146px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/MIKROE-1475.jpg 640w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/MIKROE-1475-300x300.jpg 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/03\/MIKROE-1475-150x150.jpg 150w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/figure>\n<\/div>\n\n\n<p>Le syst\u00e8me doit reconnaitre, comme valide, la cl\u00e9 que vous avez et la mienne qui poss\u00e8de le num\u00e9ro suivant: <strong>6A001BD067C6<\/strong>.<\/p>\n\n\n\n<p>Il faut ajouter la ligne suivante \u00e0 l&rsquo;interface utilisateur de la station MEGA:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"549\" height=\"49\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-14.11.24.png\" alt=\"\" class=\"wp-image-3485\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-14.11.24.png 549w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-14.11.24-300x27.png 300w\" sizes=\"auto, (max-width: 549px) 100vw, 549px\" \/><\/figure>\n\n\n\n<p>Il y a trois valeurs possibles comme \u00e9tat:<\/p>\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-green-cyan-color\">activ\u00e9<\/mark><\/strong><\/li>\n\n\n\n<li><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">d\u00e9sactiv\u00e9<\/mark><\/strong><\/li>\n\n\n\n<li><mark style=\"background-color:#cf2e2e\" class=\"has-inline-color has-white-color\">CARTE INVALIDE<\/mark><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">8.11 &#8211; Statut de transmission vers l&rsquo;API Web<\/h3>\n\n\n\n<p>Il faut ajouter la ligne suivante \u00e0 l&rsquo;interface utilisateur de la station MEGA:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"552\" height=\"44\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-14.10.25.png\" alt=\"\" class=\"wp-image-3484\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-14.10.25.png 552w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-02-a-14.10.25-300x24.png 300w\" sizes=\"auto, (max-width: 552px) 100vw, 552px\" \/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">8.12 &#8211; Envoi de pression\/altitude vers l&rsquo;API (<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">BONI<\/mark>)<\/h3>\n\n\n\n<p>Pour obtenir le point boni pour le traitement de la pression atmosph\u00e9rique et l&rsquo;altitude, il faut que ces informations soient envoy\u00e9es vers l&rsquo;API Web.<\/p>\n\n\n\n<p>Pour ce faire, il faut modifier la fonction &lsquo;<strong><em>preparerRequetePourAPI<\/em><\/strong>&lsquo;, pour y ajouter les deux valeurs suivantes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>pre<\/li>\n\n\n\n<li>alt<\/li>\n<\/ul>\n\n\n\n<p>Voici une URL valide:<\/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=\"\">GET \/tp2-api.php?nomSys=!VE2CUY!&amp;ipAdr=192.168.1.191&amp;note=exemple&amp;statut=4&amp;app=23&amp;tmp=22&amp;hum=42&amp;dur=7&amp;hr=17:10:43&amp;pre=99=&amp;alt=175 HTTP\/1.1<\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"661\" height=\"391\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-03-a-17.28.28.png\" alt=\"\" class=\"wp-image-3522\" style=\"width:519px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-03-a-17.28.28.png 661w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/04\/Capture-decran-le-2025-04-03-a-17.28.28-300x177.png 300w\" sizes=\"auto, (max-width: 661px) 100vw, 661px\" \/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Grille de correction<\/h2>\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>: Les d\u00e9fis doivent-\u00eatre r\u00e9alis\u00e9s sans l&rsquo;aide de l&rsquo;enseignant.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>No.<\/th><th>Description<\/th><th>Note<\/th><th>Boni<\/th><\/tr><\/thead><tbody><tr><td><strong>UNO<\/strong><\/td><td>Ajout des \u00e9l\u00e9ments de la section 2.5 <\/td><td>3<\/td><td><\/td><\/tr><tr><td><\/td><td>Transmission des donn\u00e9es vers la centrale.<\/td><td>2<\/td><td><\/td><\/tr><tr><td><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">D\u00e9fi optionnel<\/mark><\/td><td>Remplacer le capteur de temp\u00e9rature par <a href=\"https:\/\/wiki.seeedstudio.com\/Grove-Barometer_Sensor-BMP280\/\">bmp280<\/a> et ajouter pression et altitude aux donn\u00e9es transmises. <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Important<\/mark><\/strong>, voir 8.12<\/td><td><\/td><td>1.5<\/td><\/tr><tr><td><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">D\u00e9fi optionnel<\/mark><\/td><td>Interruption mat\u00e9riel pour le bouton de panique<br>Dans ce cas, il faut utiliser la broche D2 pour le bouton et d\u00e9placer la DEL sur D7.<\/td><td><\/td><td>0.5<\/td><\/tr><tr><td><strong>Pr\u00e9sentation<\/strong><\/td><td>Pr\u00e9sentation de votre partie 1 &#8211; P\u00e9nalit\u00e9 de 20% en cas d&rsquo;absence<\/td><td><\/td><td><\/td><\/tr><tr><td><strong>MEGA &#8211; P1<\/strong><\/td><td>Fonctionnalit\u00e9, optimisation du code source et documentation<\/td><td>4<\/td><td><\/td><\/tr><tr><td><\/td><td>Aucun message de type &lsquo;Warning&rsquo; \u00e0 la compilation<\/td><td>2<\/td><td><\/td><\/tr><tr><td>5<\/td><td>\u00c9l\u00e9ments d&rsquo;interface<\/td><td>2<\/td><td><\/td><\/tr><tr><td>5.1<\/td><td>fonction afficherLigne<\/td><td>2<\/td><td><\/td><\/tr><tr><td><\/td><td>R\u00e9ception et traitement des donn\u00e9es re\u00e7ues du UNO<\/td><td>2<\/td><td><\/td><\/tr><tr><td>5.10<br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">D\u00e9fi optionnel<\/mark><\/td><td>Animation des lignes &lsquo;Bouton de panique&rsquo; <br>et &lsquo;Mouvement d\u00e9tect\u00e9&rsquo; <\/td><td><\/td><td>1<\/td><\/tr><tr><td>Partie 2<\/td><td><\/td><td><\/td><td><\/td><\/tr><tr><td><\/td><td>Traitement correct de l&rsquo;adresse IP &#8211;&gt; vers API<\/td><td>1<\/td><td><\/td><\/tr><tr><td>8.1<\/td><td>evenement_systeme_enligne &#8211;&gt; vers API<\/td><td>1<\/td><td><\/td><\/tr><tr><td>8.2<\/td><td>evenement_statut_appareils &#8211;&gt; vers API<\/td><td>1<\/td><td><\/td><\/tr><tr><td>8.3<\/td><td>evenement_changement_etat &#8211;&gt; vers API<\/td><td>2<\/td><td><\/td><\/tr><tr><td>8.4<\/td><td>evenement_dectection_mouvement &#8211;&gt; vers API<\/td><td>2<\/td><td><\/td><\/tr><tr><td>8.5<\/td><td>evenement_bouton_panique &#8211;&gt; vers API<\/td><td>1<\/td><td><\/td><\/tr><tr><td>8.6<\/td><td>evenement_temperature_depassee &#8211;&gt; vers API<\/td><td>1<\/td><td><\/td><\/tr><tr><td>8.7<\/td><td>UNO non reli\u00e9 au MEGA &#8211;&gt; vers API<\/td><td>1<\/td><td><\/td><\/tr><tr><td>8.8<\/td><td>Heure sur 4Digit<\/td><td>1<\/td><td><\/td><\/tr><tr><td>8.9<\/td><td>Animation des \u00e9v\u00e9nements sur NEO-Pixel<\/td><td>2<\/td><td><\/td><\/tr><tr><td>8.10<br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Defi optionnel<\/mark><\/td><td>Lecteur de carte magn\u00e9tique RFID activ\u00e9\/d\u00e9sactiv\u00e9 &#8211;&gt; API<\/td><td><\/td><td>1<\/td><\/tr><tr><td>REMISE<\/td><td>Un fichier .zip incluant les deux projets et le fichier workspace de vscode<\/td><td>1<\/td><td><\/td><\/tr><tr><td><\/td><td><\/td><td>30<\/td><td><\/td><\/tr><\/tbody><tfoot><tr><td><\/td><td>Total<\/td><td>30\/30<\/td><td>4<\/td><\/tr><\/tfoot><\/table><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00c9preuve synth\u00e8se Volet A \u00c9nonc\u00e9 du projet ESH25 &#8211; Version 1.1.5 Pond\u00e9ration: 30%Remise: Partie 1 &#8211; semaine 13 &#8211; 27 avril, 16h00 ES-Volet B &#8211; Examen (20%), 15 maiNOTE: Il faut rendre les kits Arduino pour obtenir une copie d&rsquo;examen. Le mardi 8 mai, pr\u00e9sentation de votre partie 1 \u00e0 l&rsquo;enseignant &#8211; pr\u00e9sence obligatoire NOTE: [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ub_ctt_via":"","footnotes":""},"class_list":["post-3057","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\/3057","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\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/comments?post=3057"}],"version-history":[{"count":203,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/3057\/revisions"}],"predecessor-version":[{"id":3585,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/3057\/revisions\/3585"}],"wp:attachment":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/media?parent=3057"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}