{"id":37422,"date":"2019-10-31T22:17:33","date_gmt":"2019-10-31T19:17:33","guid":{"rendered":"https:\/\/prohoster.info\/blog\/shiotiny-uzly-svyazi-i-sobytiya-ili-osobennosti-risovaniya-programm\/"},"modified":"2019-10-31T22:17:33","modified_gmt":"2019-10-31T19:17:33","slug":"shiotiny-uzly-svyazi-i-sobytiya-ili-osobennosti-risovaniya-programm","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/shiotiny-uzly-svyazi-i-sobytiya-ili-osobennosti-risovaniya-programm","title":{"rendered":"ShIoTiny : n\u0153uds, liaisons et \u00e9v\u00e9nements ou caract\u00e9ristiques du dessin de programmes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"ShIoTiny : n\u0153uds, liaisons et \u00e9v\u00e9nements ou caract\u00e9ristiques du dessin de programmes\" src=\"\/wp-content\/uploads\/2019\/08\/e5d6a9f6ca0fc445f705a645e5319c06.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>Les points principaux ou de quoi parle cet article<\/h4>\n<p>\nLe sujet de l'article - la programmation visuelle des PLC <b>ShIoTiny<\/b> pour la maison intelligente, d\u00e9crite ici : <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463107\/\">ShIoTiny : petite automatisation, Internet des objets ou \u00ab six mois avant les vacances \u00bb<\/a><\/noindex>.<\/p>\n<p><b>En r\u00e9sum\u00e9<\/b> sont abord\u00e9s des concepts tels que <b>n\u0153uds<\/b>, <b>liens<\/b>, <b>\u00e9v\u00e9nements<\/b>, ainsi que les sp\u00e9cificit\u00e9s de chargement et d'ex\u00e9cution d'un programme visuel sur <b>ESP8266<\/b>, qui est \u00e0 la base du PLC <b>ShIoTiny<\/b>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Introduction ou quelques questions organisationnelles<\/h4>\n<p>\nDans l'article pr\u00e9c\u00e9dent concernant mon d\u00e9veloppement, j'ai donn\u00e9 un aper\u00e7u des capacit\u00e9s du contr\u00f4leur <b>ShIoTiny<\/b>.<\/p>\n<p>\u00c9tonnamment, le public a manifest\u00e9 un grand int\u00e9r\u00eat et m'a pos\u00e9 beaucoup de questions. Certains amis ont m\u00eame propos\u00e9 d'acheter le contr\u00f4leur sur le champ. Non, je ne suis pas contre l'id\u00e9e de gagner un peu d'argent, mais ma conscience ne me permet pas de vendre un produit encore tr\u00e8s rudimentaire sur le plan logiciel.<\/p>\n<p>C'est pourquoi j'ai publi\u00e9 sur GitHub des binaires du firmware et le sch\u00e9ma de l'appareil : <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shiotiny\/ShIoTinyBin\">firmware + instruction sommaire + sch\u00e9ma + exemples<\/a><\/noindex>.<\/p>\n<p>Maintenant, chacun peut flasher l'ESP-07 et s'amuser avec le firmware. Si quelqu'un d\u00e9sire vraiment une carte comme sur la photo, j'en ai quelques-unes. \u00c9crivez-moi par email <b>shiotiny@yandex.ru<\/b>. Mais, comme le disait l'inoubliable Ogurtsov : \u00ab Je ne suis responsable de rien ! \u00bb.<\/p>\n<p>Alors, allons droit au but : qu'est-ce que \u00ab<b>n\u0153ud<\/b>\u00bb (n\u0153ud) et \u00ab<b>\u00e9v\u00e9nement<\/b>\u00bb ? Comment le programme est-il ex\u00e9cut\u00e9 ?<\/p>\n<p>Comme d'habitude, commen\u00e7ons par le commencement : le chargement du programme.<\/p>\n<h4>Comment le programme est charg\u00e9<\/h4>\n<p>\nCommen\u00e7ons par ce qui se passe lorsque nous appuyons sur le bouton <b>T\u00e9l\u00e9charger<\/b> dans l'\u00e9diteur <b>ElDraw<\/b> et notre sch\u00e9ma-programme, constitu\u00e9 de beaux carr\u00e9s, est envoy\u00e9 \u00e0 l'appareil.<\/p>\n<p>Tout d'abord, une description textuelle de notre sch\u00e9ma est construite sur la base de ce que nous avons dessin\u00e9.<br \/>\nDeuxi\u00e8mement, il est v\u00e9rifi\u00e9 si toutes les entr\u00e9es des n\u0153uds sont connect\u00e9es aux sorties. Il ne doit pas y avoir d'entr\u00e9es \u00ab pendantes \u00bb. Si une telle entr\u00e9e est d\u00e9tect\u00e9e, le sch\u00e9ma ne se chargera pas dans ShIoTiny et l'\u00e9diteur donnera un avertissement appropri\u00e9.<\/p>\n<p>Si tout se passe bien, l'\u00e9diteur envoie \u00e0 ShIoTiny la description textuelle du sch\u00e9ma un n\u0153ud \u00e0 la fois. Bien s\u00fbr, le sch\u00e9ma existant de ShIoTiny est d'abord supprim\u00e9. La description textuelle obtenue est enregistr\u00e9e dans la m\u00e9moire FLASH.<\/p>\n<p>Au fait, si vous souhaitez supprimer le sch\u00e9ma de l'appareil, il vous suffit de charger un sch\u00e9ma vide (ne contenant aucun \u00e9l\u00e9ment-n\u0153ud).<\/p>\n<p>Une fois que tout le sch\u00e9ma-programme est charg\u00e9 dans le PLC ShIoTiny, il commence \u00e0 \u00ab s'ex\u00e9cuter \u00bb. Que cela signifie-t-il ?<\/p>\n<p>Notons que les processus de chargement du sch\u00e9ma depuis la m\u00e9moire FLASH lors de la mise sous tension et lors de la r\u00e9ception du sch\u00e9ma depuis l'\u00e9diteur sont identiques.<\/p>\n<p>La premi\u00e8re \u00e9tape consiste \u00e0 cr\u00e9er des objets-n\u0153uds sur la base de leur description.<br \/>\nEnsuite, des liens sont \u00e9tablis entre les n\u0153uds. C'est-\u00e0-dire que les sorties sont li\u00e9es aux entr\u00e9es et les entr\u00e9es aux sorties.<\/p>\n<p>Et ce n'est qu'apr\u00e8s tout cela que le cycle principal d'ex\u00e9cution du programme est lanc\u00e9.<\/p>\n<p>J'ai \u00e9crit longtemps, mais tout le processus - de \"l'importation\" du sch\u00e9ma depuis la m\u00e9moire FLASH \u00e0 l'activation du cycle principal - ne prend que quelques fractions de seconde pour un sch\u00e9ma de 60 \u00e0 80 n\u0153uds.<\/p>\n<p>Comment fonctionne le cycle principal ? Tr\u00e8s simplement. D'abord, il attend qu'un \u00e9v\u00e9nement se produise <b>\u00e9v\u00e9nements<\/b> dans un n\u0153ud quelconque, puis traite cet \u00e9v\u00e9nement. Et cela sans fin. Ou jusqu'\u00e0 ce qu'un nouveau sch\u00e9ma soit charg\u00e9 dans ShIoTiny.<\/p>\n<p>J'ai d\u00e9j\u00e0 mentionn\u00e9 plusieurs fois des choses comme <b>\u00e9v\u00e9nements<\/b>, <b>n\u0153uds<\/b> et <b>liens<\/b>. Mais qu'est-ce que cela signifie du point de vue logiciel ? C'est ce dont nous allons parler aujourd'hui.<\/p>\n<h4>N\u0153uds, liens et \u00e9v\u00e9nements<\/h4>\n<p>\nIl suffit de regarder des exemples de sch\u00e9mas-programmes pour <b>ShIoTiny<\/b>, pour comprendre qu'un sch\u00e9ma ne se compose que de deux entit\u00e9s : des n\u0153uds (ou \u00e9l\u00e9ments) et des liens entre eux.<\/p>\n<p><b>Noeud<\/b>, <b>n\u0153ud<\/b> ou <b>\u00e9l\u00e9ment de sch\u00e9ma<\/b> \u2014 c'est une repr\u00e9sentation virtuelle d'un <b>des actions<\/b> sur les donn\u00e9es. Cela peut \u00eatre une op\u00e9ration arithm\u00e9tique, une op\u00e9ration logique ou toute autre op\u00e9ration qui nous vient \u00e0 l'esprit. L'essentiel est qu'un n\u0153ud a une entr\u00e9e et une sortie.<\/p>\n<p><b>Connexion<\/b> \u2014 c'est l'endroit o\u00f9 le n\u0153ud re\u00e7oit des donn\u00e9es. Les repr\u00e9sentations des entr\u00e9es sont des points qui se trouvent toujours sur le c\u00f4t\u00e9 gauche du n\u0153ud.<\/p>\n<p><b>Sortie<\/b> \u2014 c'est l'endroit d'o\u00f9 le r\u00e9sultat du travail du n\u0153ud est extrait. Les repr\u00e9sentations des sorties sont des points qui se trouvent toujours sur le c\u00f4t\u00e9 droit du n\u0153ud.<\/p>\n<p>Certains n\u0153uds n'ont pas d'entr\u00e9es. Ces n\u0153uds g\u00e9n\u00e8rent un r\u00e9sultat \u00e0 l'int\u00e9rieur d'eux-m\u00eames. Par exemple un n\u0153ud-constante ou un n\u0153ud-capteur : ils n'ont pas besoin de donn\u00e9es d'autres n\u0153uds pour communiquer un r\u00e9sultat.<\/p>\n<p>\u00c0 l'inverse, d'autres n\u0153uds n'ont pas de sorties. Ce sont des n\u0153uds qui affichent, par exemple, des dispositifs d'ex\u00e9cution (relais ou autres similaires). Ils re\u00e7oivent des donn\u00e9es, mais ne g\u00e9n\u00e8rent pas de r\u00e9sultats de calculs accessibles \u00e0 d'autres n\u0153uds.<\/p>\n<p>De plus, il y a un n\u0153ud-commentaire unique. Il ne fait rien, n'a ni entr\u00e9es ni sorties. Sa fonction est d'\u00eatre une explication dans le sch\u00e9ma.<\/p>\n<p>Qu'est-ce que \"<b>\u00e9v\u00e9nement<\/b>\u00bb? <b>\u00c9v\u00e9nement<\/b> \u2014 c'est l'apparition de nouvelles donn\u00e9es dans un n\u0153ud quelconque. Par exemple, les \u00e9v\u00e9nements incluent : un changement d'\u00e9tat d'une entr\u00e9e (n\u0153ud <b>Input<\/b>), r\u00e9ception des donn\u00e9es d'un autre appareil (n\u0153uds <b>MQTT<\/b> et <b>UDP<\/b>), expiration d'une p\u00e9riode sp\u00e9cifi\u00e9e (n\u0153uds <b>Timer<\/b> et <b>D\u00e9lai<\/b>) et ainsi de suite.<\/p>\n<p>\u00c0 quoi servent les \u00e9v\u00e9nements ? Tout simplement \u00e0 d\u00e9terminer dans quel n\u0153ud de nouvelles donn\u00e9es ont \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9es et quels n\u0153uds doivent changer d'\u00e9tat en raison de la r\u00e9ception de nouvelles donn\u00e9es. Un \u00e9v\u00e9nement \u00ab passe \u00bb le long de la cha\u00eene de n\u0153uds jusqu'\u00e0 ce qu'il ait v\u00e9rifi\u00e9 et modifi\u00e9 tous les n\u0153uds concern\u00e9s.<\/p>\n<p>Tous les n\u0153uds peuvent \u00eatre divis\u00e9s en deux cat\u00e9gories. <br \/>\nLes n\u0153uds capables de g\u00e9n\u00e9rer des \u00e9v\u00e9nements seront appel\u00e9s \u00ab<b>n\u0153uds actifs<\/b>\u00bb.<br \/>\nLes n\u0153uds qui ne peuvent pas g\u00e9n\u00e9rer d'\u00e9v\u00e9nements seront appel\u00e9s \u00ab<b>n\u0153uds passifs<\/b>\u00bb.<\/p>\n<p>Lorsqu'un n\u0153ud g\u00e9n\u00e8re un \u00e9v\u00e9nement (c'est-\u00e0-dire qu'il produit de nouvelles donn\u00e9es), l'\u00e9tat de toute la cha\u00eene de n\u0153uds connect\u00e9s \u00e0 la sortie du n\u0153ud g\u00e9n\u00e9rateur d'\u00e9v\u00e9nements change g\u00e9n\u00e9ralement.<\/p>\n<p>Pour illustrer cela, consid\u00e9rons un exemple sur le diagramme.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny : n\u0153uds, liaisons et \u00e9v\u00e9nements ou caract\u00e9ristiques du dessin de programmes\" src=\"\/wp-content\/uploads\/2019\/08\/41b53ae925e85c3f272adec876ab3151.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLes n\u0153uds actifs ici sont Input1, Input2 et Input3. Les autres n\u0153uds sont passifs. Voyons ce qui se passe lorsque l'un ou l'autre des entr\u00e9es se ferme. Les r\u00e9sultats sont r\u00e9sum\u00e9s dans un tableau pour plus de clart\u00e9.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny : n\u0153uds, liaisons et \u00e9v\u00e9nements ou caract\u00e9ristiques du dessin de programmes\" src=\"\/wp-content\/uploads\/2019\/08\/0a8435184f85e919f763048120e6e780.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComme nous le voyons, lorsqu'un \u00e9v\u00e9nement se produit, une cha\u00eene est construite depuis le n\u0153ud source de l'\u00e9v\u00e9nement jusqu'au n\u0153ud terminal. L'\u00e9tat des n\u0153uds qui ne font pas partie de la cha\u00eene ne change pas.<\/p>\n<p>Une question l\u00e9gitime se pose alors : que se passe-t-il lors de l'apparition de deux \u00e9v\u00e9nements ou m\u00eame plusieurs en m\u00eame temps ?<\/p>\n<p>En tant qu'amateur des \u0153uvres de Gleb Anfilov, j'ai envie d'envoyer ce curieux questionneur vers son livre \u00ab \u00c9vasion des merveilles \u00bb. C'est une sorte de \u00ab th\u00e9orie de la relativit\u00e9 pour les plus jeunes \u00bb, qui explique bien ce que signifie \u00ab en m\u00eame temps \u00bb et comment vivre avec.<\/p>\n<p>Mais sur le plan pratique, tout est beaucoup plus simple : lors de l'apparition de deux \u00e9v\u00e9nements ou m\u00eame plusieurs, toutes les cha\u00eenes sont construites et trait\u00e9es successivement depuis chaque source d'\u00e9v\u00e9nement, dans l'ordre, sans aucune merveille.<\/p>\n<p>Une autre question tout \u00e0 fait l\u00e9gitime que pourrait se poser un lecteur curieux est : que se passera-t-il si les n\u0153uds sont connect\u00e9s en anneau ? Ou, comme aiment \u00e0 le dire certains d'entre vous, introduire une r\u00e9troaction. Cela signifie connecter la sortie d'un des n\u0153uds \u00e0 l'entr\u00e9e du n\u0153ud pr\u00e9c\u00e9dent de mani\u00e8re \u00e0 ce que l'\u00e9tat de la sortie de ce n\u0153ud affecte celui de son entr\u00e9e. Le r\u00e9dacteur ne vous permettra pas de connecter directement la sortie d'un n\u0153ud \u00e0 son entr\u00e9e. <b>ElDraw<\/b>. Mais indirectement, comme sur l'illustration ci-dessous, cela peut \u00eatre r\u00e9alis\u00e9.<\/p>\n<p>Alors, que se passera-t-il dans ce cas ? La r\u00e9ponse sera tr\u00e8s \u00ab pr\u00e9cise \u00bb : cela d\u00e9pend des n\u0153uds. Examinons l'exemple sur l'illustration.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny : n\u0153uds, liaisons et \u00e9v\u00e9nements ou caract\u00e9ristiques du dessin de programmes\" src=\"\/wp-content\/uploads\/2019\/08\/7a640c3abfd4868b87f415bce93e4918.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLorsque les contacts d'entr\u00e9e Input1 sont ouverts sur l'entr\u00e9e sup\u00e9rieure du n\u0153ud A \u2014 0. \u00c0 la sortie du n\u0153ud A, \u00e9galement 0. \u00c0 la sortie du n\u0153ud B \u2014 1. Et enfin, \u00e0 l'entr\u00e9e inf\u00e9rieure du n\u0153ud A \u2014 1. C'est clair. Pour ceux qui ne comprennent pas \u2014 consultez ci-dessous la description du fonctionnement des n\u0153uds \u00ab ET \u00bb et \u00ab NON \u00bb.<\/p>\n<p>Maintenant, fermons les contacts d'entr\u00e9e Input1, c'est-\u00e0-dire que nous allons appliquer 1 \u00e0 l'entr\u00e9e sup\u00e9rieure du n\u0153ud A. Ceux qui connaissent l'\u00e9lectronique savent qu'en fait nous obtiendrons un sch\u00e9ma classique de g\u00e9n\u00e9rateur \u00e0 \u00e9l\u00e9ments logiques. Et, en th\u00e9orie, ce sch\u00e9ma devrait produire ind\u00e9finiment en sortie des n\u0153uds A et B des s\u00e9quences 1-0-1-0-1-0\u2026. et 0-1-0-1-0-1-\u2026. Car l'\u00e9v\u00e9nement doit constamment changer l'\u00e9tat des n\u0153uds A et B, tournant en boucle 2-3-2-3-\u2026 !<\/p>\n<p>Mais en r\u00e9alit\u00e9, cela ne se produit pas. Le sch\u00e9ma tombera dans un \u00e9tat al\u00e9atoire \u2014 soit le relais restera activ\u00e9 soit d\u00e9sactiv\u00e9, ou il peut \u00e9mettre un l\u00e9ger bourdonnement en s'activant et se d\u00e9sactivant plusieurs fois de suite. Tout d\u00e9pend de la m\u00e9t\u00e9o sur le p\u00f4le sud de Mars. Et voil\u00e0 pourquoi cela se produit.<\/p>\n<p>L'\u00e9v\u00e9nement avec le n\u0153ud Input1 modifie l'\u00e9tat du n\u0153ud A, puis du n\u0153ud B, et ainsi de suite en boucle plusieurs fois. Le programme d\u00e9tecte la \u00ab boucle \u00bb de l'\u00e9v\u00e9nement et arr\u00eate de force ce carnaval. Apr\u00e8s cela, la modification des \u00e9tats des n\u0153uds A et B est bloqu\u00e9e jusqu'\u00e0 l'apparition d'un nouvel \u00e9v\u00e9nement. Le moment o\u00f9 le programme d\u00e9cidera \u2014 \u00ab \u00e7a suffit de tourner en rond ! \u00bb \u2014 d\u00e9pend en g\u00e9n\u00e9ral de nombreux facteurs et peut \u00eatre consid\u00e9r\u00e9 comme al\u00e9atoire.<\/p>\n<blockquote><p>Soyez prudent en connectant des n\u0153uds en boucle \u2014 les effets ne seront pas toujours \u00e9vidents ! Ayez une bonne compr\u00e9hension de ce que vous faites et pourquoi !<\/p><\/blockquote>\n<p> Peut-on n\u00e9anmoins construire un g\u00e9n\u00e9rateur avec les n\u0153uds \u00e0 notre disposition ? Oui, c'est possible ! Mais pour cela, un n\u0153ud capable de g\u00e9n\u00e9rer des \u00e9v\u00e9nements est n\u00e9cessaire. Et ce n\u0153ud existe \u2014 c'est la \u00ab ligne de retard \u00bb. Voyons comment fonctionne un g\u00e9n\u00e9rateur avec une p\u00e9riode de 6 secondes sur l'illustration ci-dessous.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny : n\u0153uds, liaisons et \u00e9v\u00e9nements ou caract\u00e9ristiques du dessin de programmes\" src=\"\/wp-content\/uploads\/2019\/08\/7dc1babedec97fb8177b846c760ff44e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nL'\u00e9l\u00e9ment cl\u00e9 du g\u00e9n\u00e9rateur est le noeud A \u2014 la ligne de retard. Si l'on change l'\u00e9tat d'entr\u00e9e de la ligne de retard de 0 \u00e0 1, alors 1 n'appara\u00eetra pas imm\u00e9diatement \u00e0 la sortie, mais seulement apr\u00e8s un certain temps. Dans notre cas, il s'agit de 3 secondes. De la m\u00eame mani\u00e8re, si l'on change l'\u00e9tat d'entr\u00e9e de la ligne de retard de 1 \u00e0 0, alors 0 appara\u00eetra \u00e0 la sortie apr\u00e8s les m\u00eames 3 secondes. Le temps de retard est exprim\u00e9 en dixi\u00e8mes de seconde. Ainsi, une valeur de 30 signifie 3 secondes.<\/p>\n<p>La caract\u00e9ristique de la ligne de retard est qu'elle g\u00e9n\u00e8re un \u00e9v\u00e9nement apr\u00e8s l'expiration du temps de retard.<\/p>\n<p>Supposons qu'initialement la sortie de la ligne de retard \u00e9tait 0. Apr\u00e8s avoir pass\u00e9 par le noeud B \u2014 l'inverseur \u2014 ce 0 se transforme en 1 et arrive \u00e0 l'entr\u00e9e de la ligne de retard. Au d\u00e9but, rien ne se passe. \u00c0 la sortie de la ligne de retard, il reste 0, mais le chronom\u00e8tre du temps de retard commence \u00e0 fonctionner. Trois secondes passent. Et soudain, la ligne de retard g\u00e9n\u00e8re un \u00e9v\u00e9nement. \u00c0 sa sortie, appara\u00eet 1. Ce 1, apr\u00e8s avoir travers\u00e9 le noeud B \u2014 l'inverseur \u2014 se transforme en 0 et arrive \u00e0 l'entr\u00e9e de la ligne de retard. Encore trois secondes passent\u2026 et le processus se r\u00e9p\u00e8te. Cela signifie que toutes les 3 secondes, l'\u00e9tat de la sortie de la ligne de retard change de 0 \u00e0 1 puis de 1 \u00e0 0. Le relais clique. Le g\u00e9n\u00e9rateur fonctionne. La p\u00e9riode des impulsions est de 6 secondes (3 secondes \u00e0 0 et 3 secondes \u00e0 1).<\/p>\n<p>Cependant, dans des sch\u00e9mas r\u00e9els, il n'est g\u00e9n\u00e9ralement pas n\u00e9cessaire d'utiliser cet exemple. Il existe des noeuds-minuteurs sp\u00e9ciaux qui g\u00e9n\u00e8rent de mani\u00e8re autonome et remarquable une s\u00e9quence d'impulsions avec une p\u00e9riode donn\u00e9e. La dur\u00e9e du \u00ab z\u00e9ro \u00bb et de l'\u00ab un \u00bb dans ces impulsions est \u00e9gale \u00e0 la moiti\u00e9 de la p\u00e9riode.<\/p>\n<blockquote><p>Pour d\u00e9finir des actions p\u00e9riodiques, utilisez des noeuds-minuteurs.<\/p><\/blockquote>\n<p> Je note que de tels signaux num\u00e9riques, o\u00f9 la dur\u00e9e du \u00ab z\u00e9ro \u00bb et de l'\u00ab un \u00bb est \u00e9gale, sont appel\u00e9s \u00ab m\u00e9andre \u00bb. <\/p>\n<p>J'esp\u00e8re avoir un peu clarifi\u00e9 la question sur la fa\u00e7on dont la propagation des \u00e9v\u00e9nements entre les noeuds se produit et ce qu'il ne faut pas faire ?<\/p>\n<h4>Conclusion et liens<\/h4>\n<p>\nL'article est court, mais c'est un article-r\u00e9ponse aux questions soulev\u00e9es sur les noeuds et les \u00e9v\u00e9nements.<\/p>\n<p>Au fur et \u00e0 mesure que les firmwares et les nouveaux exemples se d\u00e9veloppent, je vais \u00e9crire sur la fa\u00e7on de programmer <b>ShIoTiny<\/b> de petits articles tant que cela int\u00e9ressera les gens.<\/p>\n<p>Comme auparavant, le sch\u00e9ma, le firmware, les exemples, la description des noeuds et tout le reste ici <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shiotiny\/ShIoTinyBin\">reste ici<\/a><\/noindex>.<\/p>\n<p>Questions, souhaits, critiques \u2014 c'est par ici : <b>shiotiny@yandex.ru<\/b><br \/>\n<br \/>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463285\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0437\u0438\u0441\u044b \u0438\u043b\u0438 \u043e \u0447\u0435\u043c \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0422\u0435\u043c\u0430 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u041f\u041b\u041a ShIoTiny \u0434\u043b\u044f \u0443\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0430, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0443\u0442: ShIoTiny: \u043c\u0430\u043b\u0430\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f, \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0432\u0435\u0449\u0435\u0439 \u0438\u043b\u0438 \u00ab\u0437\u0430 \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u0434\u043e \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u00bb. \u041e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0442\u043a\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f, \u043a\u0430\u043a \u0443\u0437\u043b\u044b, \u0441\u0432\u044f\u0437\u0438, \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 ESP8266, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043e\u0439 \u041f\u041b\u041a ShIoTiny. \u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28078,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37422","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0437\u0438\u0441\u044b \u0438\u043b\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/shiotiny-uzly-svyazi-i-sobytiya-ili-osobennosti-risovaniya-programm\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47ShIoTiny: \u0443\u0437\u043b\u044b, \u0441\u0432\u044f\u0437\u0438 \u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438\u043b\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0437\u0438\u0441\u044b \u0438\u043b\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/shiotiny-uzly-svyazi-i-sobytiya-ili-osobennosti-risovaniya-programm\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:17:33+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:17:33+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47ShIoTiny : n\u0153uds, liens et \u00e9v\u00e9nements ou caract\u00e9ristiques de dessin de programmes | ProHoster","description":"Principaux points ou.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/shiotiny-uzly-svyazi-i-sobytiya-ili-osobennosti-risovaniya-programm","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47ShIoTiny: \u0443\u0437\u043b\u044b, \u0441\u0432\u044f\u0437\u0438 \u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438\u043b\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c | ProHoster","og:description":"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0437\u0438\u0441\u044b \u0438\u043b\u0438.","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/shiotiny-uzly-svyazi-i-sobytiya-ili-osobennosti-risovaniya-programm","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:17:33+00:00","article:modified_time":"2019-10-31T19:17:33+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37422","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 17:45:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:27:24","updated":"2026-01-23 17:45:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/37422","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=37422"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/37422\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/28078"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=37422"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=37422"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=37422"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}