{"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\/pt\/blog\/administrirovanie\/shiotiny-uzly-svyazi-i-sobytiya-ili-osobennosti-risovaniya-programm","title":{"rendered":"ShIoTiny: n\u00f3s, conex\u00f5es e eventos ou caracter\u00edsticas do desenho de programas","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"ShIoTiny: n\u00f3s, conex\u00f5es e eventos ou caracter\u00edsticas do desenho de programas\" src=\"\/wp-content\/uploads\/2019\/08\/e5d6a9f6ca0fc445f705a645e5319c06.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>Principais pontos ou sobre o que \u00e9 este artigo<\/h4>\n<p>\nO tema do artigo \u00e9 programa\u00e7\u00e3o visual de PLCs <b>ShIoTiny<\/b> para casas inteligentes, descritas aqui: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463107\/\">ShIoTiny: automa\u00e7\u00e3o simples, Internet das Coisas ou 'seis meses antes das f\u00e9rias'<\/a><\/noindex>.<\/p>\n<p><b>Muito brevemente<\/b> s\u00e3o abordados conceitos como <b>n\u00f3s<\/b>, <b>conex\u00f5es<\/b>, <b>eventos<\/b>, assim como as peculiaridades de carregamento e execu\u00e7\u00e3o de um programa visual em <b>ESP8266<\/b>, que \u00e9 a base do PLC <b>ShIoTiny<\/b>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Introdu\u00e7\u00e3o ou algumas quest\u00f5es organizacionais<\/h4>\n<p>\nNo artigo anterior sobre meu desenvolvimento, fiz uma breve revis\u00e3o das capacidades do controlador <b>ShIoTiny<\/b>.<\/p>\n<p>Estranhamente, o p\u00fablico demonstrou um interesse consider\u00e1vel e me fez muitas perguntas. Alguns at\u00e9 logo sugeriram comprar o controlador. N\u00e3o, eu n\u00e3o me oponho a ganhar um pouco, mas a consci\u00eancia n\u00e3o me permite vender algo que ainda est\u00e1 muito cru em termos de programa\u00e7\u00e3o.<\/p>\n<p>Portanto, eu subi no GitHub os bin\u00e1rios do firmware e o esquema do dispositivo: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shiotiny\/ShIoTinyBin\">firmware+instru\u00e7\u00f5es resumidas+esquema+exemplos<\/a><\/noindex>.<\/p>\n<p>Agora cada um pode gravar no ESP-07 e experimentar o firmware. Se algu\u00e9m realmente quiser uma placa como a da foto \u2014 eu tenho algumas. Escreva para o e-mail <b>shiotiny@yandex.ru<\/b>. Mas, como disse o inesquec\u00edvel Ogurtsov: 'Eu n\u00e3o me responsabilizo por nada!'.<\/p>\n<p>Ent\u00e3o, vamos ao ponto: o que \u00e9 &#171;<b>n\u00f3<\/b>&#187; (n\u00f3) e &#171;<b>evento<\/b>&#171;? Como o programa \u00e9 executado?<\/p>\n<p>Como de costume, come\u00e7aremos pela ordem: com o carregamento do programa.<\/p>\n<h4>Como o programa \u00e9 carregado<\/h4>\n<p>\nComecemos pelo que acontece quando pressionamos o bot\u00e3o <b>Upload<\/b> no editor <b>ElDraw<\/b> e nosso esquema-programa, composto por quadrados bonitos, \u00e9 enviado para o dispositivo.<\/p>\n<p>Primeiro, com base no esquema que desenhamos, \u00e9 constru\u00edda uma descri\u00e7\u00e3o em formato de texto.<br \/>\nEm segundo lugar, verifica-se se todas as entradas dos n\u00f3s est\u00e3o conectadas \u00e0s sa\u00eddas. N\u00e3o deve haver entradas 'flutuantes'. Se uma entrada desse tipo for detectada, o esquema n\u00e3o ser\u00e1 carregado no ShIoTiny, e o editor emitir\u00e1 um aviso correspondente.<\/p>\n<p>Se tudo correr conforme o esperado, o editor envia para o ShIoTiny a descri\u00e7\u00e3o de texto do esquema, um n\u00f3 de cada vez. Naturalmente, o esquema existente no ShIoTiny \u00e9 removido previamente. A descri\u00e7\u00e3o de texto obtida \u00e9 salva na mem\u00f3ria FLASH.<\/p>\n<p>A prop\u00f3sito, se voc\u00ea quiser remover o esquema do dispositivo, basta carregar nele um esquema vazio (que n\u00e3o contenha nenhum elemento-n\u00f3).<\/p>\n<p>Assim que todo o esquema-programa \u00e9 carregado no PLC ShIoTiny, ele come\u00e7a a \"executar-se\". O que isso significa?<\/p>\n<p>Vale ressaltar que os processos de carregamento do esquema da mem\u00f3ria FLASH ao ligar a energia e ao receber o esquema do editor s\u00e3o id\u00eanticos.<\/p>\n<p>Primeiro, s\u00e3o criados objetos-nodes com base em suas descri\u00e7\u00f5es.<br \/>\nEm seguida, s\u00e3o estabelecidas as conex\u00f5es entre os n\u00f3s. Ou seja, s\u00e3o geradas liga\u00e7\u00f5es das sa\u00eddas para as entradas e das entradas para as sa\u00eddas.<\/p>\n<p>E somente ap\u00f3s tudo isso, o ciclo principal do programa \u00e9 iniciado.<\/p>\n<p>Eu escrevi muito, mas todo o processo \u2014 desde o \"carregamento\" do esquema da mem\u00f3ria FLASH at\u00e9 o in\u00edcio do ciclo principal \u2014 leva fra\u00e7\u00f5es de segundo para um esquema de 60-80 n\u00f3s.<\/p>\n<p>Como funciona o ciclo principal? Muito simples. Primeiro, ele aguarda a ocorr\u00eancia de <b>eventos<\/b> em algum n\u00f3, depois processa esse evento. E assim indefinidamente. Ou at\u00e9 que um novo esquema seja carregado no ShIoTiny.<\/p>\n<p>J\u00e1 mencionei algumas vezes coisas como <b>eventos<\/b>, <b>n\u00f3s<\/b> e <b>conex\u00f5es<\/b>. Mas o que s\u00e3o isso do ponto de vista do software? \u00c9 sobre isso que vamos falar hoje.<\/p>\n<h4>N\u00f3s, conex\u00f5es e eventos<\/h4>\n<p>\nBasta olhar para exemplos de esquemas-programas para <b>ShIoTiny<\/b>, para entender que o esquema consiste apenas em duas entidades \u2014 n\u00f3s (ou elementos) e conex\u00f5es entre eles.<\/p>\n<p><b>N\u00f3<\/b>, <b>n\u00f3<\/b> ou <b>elemento do esquema<\/b> \u2014 \u00e9 uma representa\u00e7\u00e3o virtual de alguma <b>a\u00e7\u00e3o<\/b> sobre dados. Isso pode ser uma opera\u00e7\u00e3o aritm\u00e9tica, uma opera\u00e7\u00e3o l\u00f3gica ou qualquer opera\u00e7\u00e3o que nos venha \u00e0 mente. O importante \u00e9 que o n\u00f3 tem uma entrada e uma sa\u00edda.<\/p>\n<p><b>Entrada<\/b> \u2014 \u00e9 o lugar onde o n\u00f3 aceita dados. As representa\u00e7\u00f5es das entradas s\u00e3o pontos que sempre est\u00e3o \u00e0 esquerda do n\u00f3.<\/p>\n<p><b>Sa\u00edda<\/b> \u2014 \u00e9 o lugar de onde o resultado do trabalho do n\u00f3 \u00e9 extra\u00eddo. As representa\u00e7\u00f5es das sa\u00eddas s\u00e3o pontos que sempre est\u00e3o \u00e0 direita do n\u00f3.<\/p>\n<p>Alguns n\u00f3s n\u00e3o t\u00eam entradas. Esses n\u00f3s geram resultado dentro de si mesmos. Por exemplo, um n\u00f3-constante ou um n\u00f3-sensor: eles n\u00e3o precisam de dados de outros n\u00f3s para informar o resultado.<\/p>\n<p>Outros n\u00f3s, ao contr\u00e1rio, n\u00e3o t\u00eam sa\u00eddas. Esses n\u00f3s representam, por exemplo, dispositivos executores (rel\u00e9s ou quaisquer outros semelhantes). Eles recebem dados, mas n\u00e3o geram um resultado de c\u00e1lculos dispon\u00edvel para outros n\u00f3s.<\/p>\n<p>Al\u00e9m disso, h\u00e1 tamb\u00e9m um n\u00f3-coment\u00e1rio \u00fanico. Ele n\u00e3o faz nada, n\u00e3o possui entradas nem sa\u00eddas. Sua finalidade \u00e9 ser uma explica\u00e7\u00e3o no esquema.<\/p>\n<p>O que \u00e9 \"<b>evento<\/b>\u00bb? <b>Evento<\/b> \u2014 \u00e9 o surgimento de novos dados em algum n\u00f3. Por exemplo, os eventos incluem: mudan\u00e7a de estado de entrada (n\u00f3 <b>Input<\/b>), recebendo dados de outro dispositivo (n\u00f3s <b>MQTT<\/b> e <b>UDP<\/b>), expira\u00e7\u00e3o de um intervalo de tempo especificado (n\u00f3s <b>Timer<\/b> e <b>Atraso<\/b>) e assim por diante.<\/p>\n<p>Para que servem os eventos? \u00c9 para determinar \u2014 em qual n\u00f3 surgiram novos dados e quais estados dos n\u00f3s precisam ser alterados devido \u00e0 recep\u00e7\u00e3o de novos dados. O evento \"passa\" por uma cadeia de n\u00f3s at\u00e9 percorrer todos os n\u00f3s cujos estados precisam ser verificados e alterados.<\/p>\n<p>Todos os n\u00f3s podem ser divididos em duas categorias. <br \/>\nN\u00f3s que podem gerar eventos chamaremos de \"<b>n\u00f3s ativos<\/b>\u00bb.<br \/>\nN\u00f3s que n\u00e3o podem gerar eventos chamaremos de \"<b>n\u00f3s passivos<\/b>\u00bb.<\/p>\n<p>Quando um n\u00f3 gera um evento (ou seja, novos dados aparecem na sa\u00edda), geralmente o estado de toda a cadeia de n\u00f3s conectados \u00e0 sa\u00edda do n\u00f3 gerador do evento \u00e9 alterado.<\/p>\n<p>Para ficar claro, vejamos um exemplo na imagem.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: n\u00f3s, conex\u00f5es e eventos ou caracter\u00edsticas do desenho de programas\" src=\"\/wp-content\/uploads\/2019\/08\/41b53ae925e85c3f272adec876ab3151.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOs n\u00f3s ativos aqui s\u00e3o \u2014 Input1, Input2 e Input3. Os outros n\u00f3s s\u00e3o passivos. Vamos ver o que acontece quando um dos entradas \u00e9 fechada. Os resultados s\u00e3o apresentados de forma resumida em uma tabela.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: n\u00f3s, conex\u00f5es e eventos ou caracter\u00edsticas do desenho de programas\" src=\"\/wp-content\/uploads\/2019\/08\/0a8435184f85e919f763048120e6e780.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComo vemos, ao surgir um evento, \u00e9 constru\u00edda uma cadeia do n\u00f3-fonte do evento at\u00e9 o n\u00f3 terminal. O estado dos n\u00f3s que n\u00e3o est\u00e3o na cadeia n\u00e3o \u00e9 alterado.<\/p>\n<p>Surge a pergunta leg\u00edtima, o que acontece quando ocorrem dois ou mesmo v\u00e1rios eventos ao mesmo tempo?<\/p>\n<p>Como amante da criatividade de Gleb Anfilov, sinto-me tentado a encaminhar o curioso questionador ao seu livro \"Fuga das Surpresas\". \u00c9 uma \"teoria da relatividade para os mais pequenos\", na qual \u00e9 bem explicado o que significa \"simultaneamente\" e como viver com isso.<\/p>\n<p>Mas, na pr\u00e1tica, \u00e9 muito mais simples: ao ocorrer dois ou mais eventos, todas as cadeias de cada fonte de evento s\u00e3o constru\u00eddas e processadas em sequ\u00eancia, sem nenhuma m\u00e1gica.<\/p>\n<p>A pr\u00f3xima pergunta leg\u00edtima de um leitor curioso \u00e9: o que acontece se os n\u00f3s forem conectados em um anel? Ou, como \u00e9 comum entre os especialistas, introduzir feedback. Ou seja, conectar a sa\u00edda de um n\u00f3 \u00e0 entrada do n\u00f3 anterior de forma que o estado da sa\u00edda desse n\u00f3 influencie o estado de sua pr\u00f3pria entrada. O editor n\u00e3o permitir\u00e1 que voc\u00ea conecte diretamente a sa\u00edda do n\u00f3 \u00e0 sua pr\u00f3pria entrada. <b>ElDraw<\/b>Mas indiretamente, como mostrado na figura abaixo, isso \u00e9 poss\u00edvel.<\/p>\n<p>Ent\u00e3o, o que acontecer\u00e1 nesse caso? A resposta ser\u00e1 bastante \"definida\": dependendo de quais n\u00f3s. Vamos considerar um exemplo na figura.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: n\u00f3s, conex\u00f5es e eventos ou caracter\u00edsticas do desenho de programas\" src=\"\/wp-content\/uploads\/2019\/08\/7a640c3abfd4868b87f415bce93e4918.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuando os contatos da entrada Input1 est\u00e3o abertos na entrada superior do n\u00f3 A \u2014 0. Na sa\u00edda do n\u00f3 A, tamb\u00e9m 0. Na sa\u00edda do n\u00f3 B \u2014 1. E, finalmente, na entrada inferior do n\u00f3 A \u2014 1. Tudo claro. E para quem n\u00e3o entendeu, veja abaixo a descri\u00e7\u00e3o de como funcionam os n\u00f3s \"E\" e \"N\u00c3O\".<\/p>\n<p>Agora vamos fechar os contatos da entrada Input1, ou seja, aplicar um n\u00edvel alto (1) na entrada superior do n\u00f3 A. Aqueles que est\u00e3o familiarizados com eletr\u00f4nica sabem que, na pr\u00e1tica, obteremos um esquema cl\u00e1ssico de gerador com elementos l\u00f3gicos. E, em teoria, tal esquema deve continuamente produzir nas sa\u00eddas dos elementos A e B sequ\u00eancias 1-0-1-0-1-0\u2026 e 0-1-0-1-0-1\u2026. Afinal, o evento deve alterar constantemente o estado dos n\u00f3s A e B, circulando de 2-3-2-3-\u2026!<\/p>\n<p>Mas, na verdade, isso n\u00e3o acontece. O circuito entrar\u00e1 em um estado aleat\u00f3rio \u2014 ou o rel\u00e9 permanecer\u00e1 ligado ou desligado, ou poder\u00e1 ficar ligeiramente oscilando, ligando e desligando v\u00e1rias vezes consecutivas. Tudo depende do clima no polo sul de Marte. E aqui est\u00e1 o porqu\u00ea disso acontecer.<\/p>\n<p>O evento no n\u00f3 Input1 altera o estado do n\u00f3 A, depois o do n\u00f3 B e assim por diante, v\u00e1rias vezes. O programa detecta o \"looping\" do evento e interrompe for\u00e7osamente esse carnaval. Ap\u00f3s isso, a modifica\u00e7\u00e3o do estado dos n\u00f3s A e B \u00e9 bloqueada at\u00e9 que um novo evento ocorra. O momento em que o programa decide \u2014 \"basta de girar em c\u00edrculos!\" \u2014 geralmente depende de muitos fatores e pode ser considerado aleat\u00f3rio.<\/p>\n<blockquote><p>Tenha cuidado ao conectar n\u00f3s em anel \u2014 os efeitos nem sempre ser\u00e3o \u00f3bvios! Tenha uma boa no\u00e7\u00e3o do que est\u00e1 fazendo e por qu\u00ea!<\/p><\/blockquote>\n<p> \u00c9 poss\u00edvel construir um gerador com os n\u00f3s dispon\u00edveis? Sim, \u00e9 poss\u00edvel! Mas para isso, \u00e9 necess\u00e1rio um n\u00f3 que possa gerar eventos por conta pr\u00f3pria. E esse n\u00f3 existe \u2014 \u00e9 a \"linha de atraso\". Vamos ver como funciona um gerador com um per\u00edodo de 6 segundos na imagem abaixo.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: n\u00f3s, conex\u00f5es e eventos ou caracter\u00edsticas do desenho de programas\" src=\"\/wp-content\/uploads\/2019\/08\/7dc1babedec97fb8177b846c760ff44e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO elemento chave do gerador \u00e9 o n\u00f3 A \u2014 a linha de atraso. Se o estado da entrada da linha de atraso mudar de 0 para 1, o 1 na sa\u00edda n\u00e3o aparecer\u00e1 imediatamente, mas somente ap\u00f3s um tempo determinado. No nosso caso, isso \u00e9 3 segundos. Da mesma forma, se o estado da entrada da linha de atraso mudar de 1 para 0, o 0 na sa\u00edda aparecer\u00e1 ap\u00f3s os mesmos 3 segundos. O tempo de atraso \u00e9 definido em d\u00e9cimos de segundo. Ou seja, o valor 30 significa \u2014 3 segundos.<\/p>\n<p>A caracter\u00edstica da linha de atraso \u00e9 que ela gera um evento ap\u00f3s o t\u00e9rmino do tempo de atraso.<\/p>\n<p>Suponha que inicialmente a sa\u00edda da linha de atraso era 0. Ap\u00f3s passar pelo n\u00f3 B \u2014 o inversor \u2014 esse 0 se transforma em 1 e entra na linha de atraso. Imediatamente, nada acontece. Na sa\u00edda da linha de atraso, continuar\u00e1 a ser 0, mas o contador do tempo de atraso come\u00e7a a contar. Tr\u00eas segundos se passam. E ent\u00e3o a linha de atraso gera um evento. A sa\u00edda passa a ser 1. Esse 1, ap\u00f3s passar pelo n\u00f3 B \u2014 o inversor \u2014 se torna 0 e entra na linha de atraso. Mais 3 segundos se passam... e o processo se repete. Ou seja, a cada 3 segundos, o estado da sa\u00edda da linha de atraso muda de 0 para 1 e depois de 1 para 0. O rel\u00e9 clicar\u00e1. O gerador est\u00e1 funcionando. O per\u00edodo dos pulsos \u00e9 de 6 segundos (3 segundos com sa\u00edda zero e 3 segundos com um).<\/p>\n<p>No entanto, em circuitos reais, geralmente n\u00e3o \u00e9 necess\u00e1rio utilizar este exemplo. Existem n\u00f3s temporizadores especiais que geram magnificamente e sem ajuda externa uma sequ\u00eancia de pulsos com um per\u00edodo definido. A dura\u00e7\u00e3o do \"zero\" e do \"um\" nesses pulsos \u00e9 igual \u00e0 metade do per\u00edodo.<\/p>\n<blockquote><p>Para definir a\u00e7\u00f5es peri\u00f3dicas, utilize n\u00f3s temporizadores.<\/p><\/blockquote>\n<p> Vale ressaltar que sinais digitais, onde a dura\u00e7\u00e3o do \"zero\" e do \"um\" \u00e9 igual, s\u00e3o chamados de \"meandro\". <\/p>\n<p>Espero ter esclarecido um pouco a quest\u00e3o de como ocorre a propaga\u00e7\u00e3o de eventos entre os n\u00f3s e o que n\u00e3o deve ser feito.<\/p>\n<h4>Conclus\u00e3o e refer\u00eancias<\/h4>\n<p>\nO artigo ficou curto, mas \u00e9 uma resposta \u00e0s perguntas surgidas sobre n\u00f3s e eventos.<\/p>\n<p>\u00c0 medida que o firmware evolui e novos exemplos surgem, eu escreverei sobre como programar <b>ShIoTiny<\/b> artigos curtos, enquanto isso for interessante para as pessoas.<\/p>\n<p>Como antes, o esquema, firmware, exemplos, descri\u00e7\u00e3o dos n\u00f3s e tudo <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shiotiny\/ShIoTinyBin\">mais estar\u00e1 aqui<\/a><\/noindex>.<\/p>\n<p>Perguntas, sugest\u00f5es, cr\u00edticas \u2014 envie aqui: <b>shiotiny@yandex.ru<\/b><br \/>\n<br \/>Fonte: <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.3 - 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\/pt\/blog\/administrirovanie\/shiotiny-uzly-svyazi-i-sobytiya-ili-osobennosti-risovaniya-programm\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/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\u00f3s, conex\u00f5es e eventos ou caracter\u00edsticas do desenho de programas | ProHoster","description":"Principais pontos ou.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/shiotiny-uzly-svyazi-i-sobytiya-ili-osobennosti-risovaniya-programm","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/37422","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=37422"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/37422\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/28078"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=37422"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=37422"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=37422"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}