{"id":37423,"date":"2019-10-31T22:17:33","date_gmt":"2019-10-31T19:17:33","guid":{"rendered":"https:\/\/prohoster.info\/blog\/shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer\/"},"modified":"2019-10-31T22:17:33","modified_gmt":"2019-10-31T19:17:33","slug":"shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer","title":{"rendered":"ShIoTiny: ventila\u00e7\u00e3o de ambientes \u00famidos (exemplo de projeto)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u00e7\u00e3o de ambientes \u00famidos (exemplo de projeto)\" src=\"\/wp-content\/uploads\/2019\/08\/a6e9c8239a90c713bd1b3b21891cbc13.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>Principais pontos ou sobre o que \u00e9 este artigo<\/h4>\n<p>\nContinuamos o ciclo de artigos sobre <b>ShIoTiny<\/b> \u2014 controlador program\u00e1vel visual baseado em chip <b>ESP8266<\/b>.<\/p>\n<p>Neste artigo, \u00e9 apresentado um exemplo de projeto de controle de ventila\u00e7\u00e3o em um banheiro ou em outro ambiente com alta umidade, mostrando como \u00e9 constru\u00edda a programa\u00e7\u00e3o para <b>ShIoTiny<\/b>.<\/p>\n<h4>Artigos anteriores da s\u00e9rie.<\/h4>\n<p>\n<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><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463285\/\">ShIoTiny: n\u00f3s, conex\u00f5es e eventos ou caracter\u00edsticas do desenho de programas<\/a><\/noindex><\/p>\n<h4>Links<\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shiotiny\/ShIoTinyBin\">Firmware bin\u00e1rio, diagrama do controlador e documenta\u00e7\u00e3o<\/a><\/noindex> <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shiotiny\/ShIoTinyBin\/blob\/master\/doc\/ShIoT-esp8266-01_obzor.pdf\">Instru\u00e7\u00f5es e descri\u00e7\u00e3o dos m\u00f3dulos<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/esppower.ru\/mqtt-android\/\">Configura\u00e7\u00e3o do broker MQTT cloudmqtt.com<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/393277\/\">Painel de controle MQTT dashboard para Android<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Introdu\u00e7\u00e3o<\/h4>\n<p>\nN\u00e3o h\u00e1 entendimento sem experi\u00eancia. Esta \u00e9 uma verdade comprovada pelo tempo e pelas gera\u00e7\u00f5es. Portanto, n\u00e3o h\u00e1 nada melhor para aprender habilidades pr\u00e1ticas do que tentar fazer algo por conta pr\u00f3pria. Exemplos que mostram o que pode ser feito e o que deve ser evitado s\u00e3o extremamente \u00fateis. Os erros dos outros, \u00e9 claro, n\u00e3o podem prevenir os seus pr\u00f3prios erros, mas podem ajudar a reduzir o n\u00famero destes \u00faltimos.<\/p>\n<p>As perguntas e cartas dos leitores de artigos anteriores me motivaram a criar um pequeno projeto exemplo de controle de ventila\u00e7\u00e3o, a fim de mostrar como os m\u00f3dulos ShIoTiny funcionam.<\/p>\n<p>A ideia original, na qual o controlador se baseou <b>ShIoTiny<\/b> \u2014 esta\u00e7\u00e3o de bombeamento e irriga\u00e7\u00e3o \u2014 pode n\u00e3o ser interessante ou adequada para todos. Por isso, escolhi uma conhecida e \u00fatil para muitos, o sistema de controle de ventila\u00e7\u00e3o, como exemplo.<\/p>\n<p>Posso dizer que a ideia do projeto n\u00e3o \u00e9 minha, mas <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/masterkit\/blog\/385281\/\">eu a tirei daqui<\/a><\/noindex> e depois a adaptei para <b>ShIoTiny<\/b>.<\/p>\n<h4>Primeiro, entenda o que voc\u00ea quer<\/h4>\n<p>\nO processo de aperfei\u00e7oamento \u00e9 infinito. E \u00e9 essa caracter\u00edstica que arruinou muitas boas ideias e projetos. O desenvolvedor, em vez de lan\u00e7ar algo que, embora n\u00e3o ideal, fosse funcional, continuava a aperfei\u00e7o\u00e1-lo. E o aperfei\u00e7oou at\u00e9 que os concorrentes o superassem, lan\u00e7ando uma solu\u00e7\u00e3o, mesmo que n\u00e3o ideal (e muitas vezes claramente grotesca), mas funcional.<\/p>\n<p>Portanto, \u00e9 muito importante saber onde colocar um ponto final no projeto. Ou, em outras palavras, precisamos definir o que queremos obter ao final do projeto com base no que temos no in\u00edcio. Em russo, existe uma palavra curta e concisa, \"plano\", que se refere ao documento que \u00e9 elaborado para descrever o caminho para a cria\u00e7\u00e3o de algo, a qual tradutores mentalmente deficientes e gerentes incompetentes, ultimamente, resolveram chamar de \"roteiro\". Enfim, que Deus os aben\u00e7oe.<\/p>\n<p>O nosso plano ser\u00e1 o seguinte. Suponhamos que exista um espa\u00e7o onde a umidade pode aumentar bastante em determinados momentos. Por exemplo, como um banheiro ou uma cozinha. A umidade \u00e9 algo desagrad\u00e1vel e a forma de combat\u00ea-la \u00e9 t\u00e3o antiga quanto o mundo: ventilar o ambiente. Existem muitas maneiras de ventilar. Mas vamos deixar de lado m\u00e9todos ex\u00f3ticos e antiquados, como escravos com leques, e nos concentrar em um ventilador comum. Ventiladores s\u00e3o mais baratos e mais f\u00e1ceis de encontrar por aqui.<\/p>\n<p>Em resumo, queremos controlar o ventilador: lig\u00e1-lo e, consequentemente, deslig\u00e1-lo. Na verdade, queremos que ele se ligue e desligue automaticamente quando necess\u00e1rio.<\/p>\n<p>Falta definir: em quais condi\u00e7\u00f5es o ventilador deve ser ligado e em quais ele deve ser desligado.<\/p>\n<p>Aqui tudo \u00e9 claro: se a umidade estiver acima de um certo limite definido, o ventilador liga e puxa o ar; se a umidade voltar ao normal, o ventilador desliga.<\/p>\n<p>O leitor atento imediatamente notar\u00e1 a palavra 'definido'. Por quem definido? Como definido?<\/p>\n<p>O limite de umidade pode ser estabelecido de v\u00e1rias maneiras. Vamos considerar duas delas: a primeira \u2014 usando um potenci\u00f4metro e a segunda \u2014 na rede atrav\u00e9s do protocolo MQTT. Cada um desses m\u00e9todos tem suas vantagens e desvantagens, que ser\u00e3o discutidas mais adiante.<\/p>\n<p>Para aqueles que n\u00e3o entenderam, explico que 'umidade limite' \u00e9 o n\u00edvel de umidade, ao ultrapassar o qual \u00e9 necess\u00e1ria a ativa\u00e7\u00e3o do ventilador.<\/p>\n<p>A pr\u00f3xima pergunta \u00e9: devemos dar ao usu\u00e1rio a op\u00e7\u00e3o de ligar o ventilador diretamente? Ou seja, independentemente do n\u00edvel de umidade, ao pressionar um bot\u00e3o? Esta possibilidade ser\u00e1 prevista. Afinal, o ventilador pode ser necess\u00e1rio n\u00e3o apenas em caso de alta umidade, mas tamb\u00e9m para remover do ambiente, por exemplo, odores desagrad\u00e1veis, popularmente conhecidos como 'fedor'.<\/p>\n<p>Portanto, entendemos o que queremos e at\u00e9 um pouco sobre como isso funcionar\u00e1. Vamos listar brevemente todas as fun\u00e7\u00f5es do nosso sistema de controle de ventila\u00e7\u00e3o:<\/p>\n<ul>\n<li> defini\u00e7\u00e3o do n\u00edvel de umidade limite (duas op\u00e7\u00f5es);<\/li>\n<li> medi\u00e7\u00e3o do n\u00edvel de umidade;<\/li>\n<li> ativa\u00e7\u00e3o autom\u00e1tica do ventilador;<\/li>\n<li> desativa\u00e7\u00e3o autom\u00e1tica do ventilador;<\/li>\n<li> ativa\u00e7\u00e3o manual do ventilador (ao pressionar o bot\u00e3o).<\/li>\n<\/ul>\n<p>\nPortanto, o plano est\u00e1 claro. Precisamos implementar todas as fun\u00e7\u00f5es listadas acima em nosso programa. Com base neste \"plano\", procederemos. Para come\u00e7ar, vamos desenhar o esquema estrutural do dispositivo.<\/p>\n<h4>Esquema estrutural do dispositivo<\/h4>\n<p>\nDe fato, teremos dois desses esquemas. O primeiro \u00e9 para a variante em que o n\u00edvel de umidade de limite \u00e9 definido por um resistor vari\u00e1vel. O segundo esquema \u00e9 para a variante em que o n\u00edvel de umidade de limite \u00e9 definido pela rede atrav\u00e9s do protocolo MQTT.<\/p>\n<p>Mas como esses esquemas diferem apenas por um elemento \u2014 o resistor vari\u00e1vel \"ajuste do n\u00edvel de umidade de limite\", vamos desenhar apenas um esquema estrutural. Claro, o esquema estrutural segundo a norma GOST \u00e9 diferente. Mas n\u00f3s n\u00e3o estamos nos orientando para engenheiros veteranos, e sim para a nova gera\u00e7\u00e3o. Portanto, a clareza \u00e9 mais importante.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u00e7\u00e3o de ambientes \u00famidos (exemplo de projeto)\" src=\"\/wp-content\/uploads\/2019\/08\/519f40496a8e459c22d69e7f0eaeee1d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEnt\u00e3o, o que vemos na figura? O ventilador est\u00e1 conectado ao rel\u00e9 <b>Relay1<\/b> do controlador. <b>ShIoTiny<\/b>Eu ressalto que o ventilador \u00e9 um dispositivo que opera em alta tens\u00e3o. Portanto, se algu\u00e9m estiver fazendo isso sozinho \u2014 tenha cuidado. Ou seja, pelo menos, antes de colocar suas m\u00e3os ou dispositivos de medi\u00e7\u00e3o no circuito \u2014 desconecte, no m\u00ednimo, o ventilador. E uma segunda observa\u00e7\u00e3o. Se seu ventilador tiver uma pot\u00eancia maior que <b>250W<\/b>, n\u00e3o deve conect\u00e1-lo diretamente a <b>ShIoTiny<\/b> , apenas atrav\u00e9s de um contator.<\/p>\n<p>A quest\u00e3o do ventilador est\u00e1 clara. Agora, o bot\u00e3o \"ligar manualmente\" o ventilador. Ele est\u00e1 conectado \u00e0 entrada <b>Input1<\/b>. Aqui n\u00e3o h\u00e1 mais nada a explicar.<\/p>\n<p>Sensor de temperatura e umidade <b>DHT-11<\/b> (ou <b>DHT-22<\/b> ou seus equivalentes). Para sua conex\u00e3o, h\u00e1 uma entrada especial no controlador. <b>ShIoTiny<\/b>Como pode ser visto na figura \u2014 conectar esse tipo de sensor tamb\u00e9m n\u00e3o apresenta problemas.<\/p>\n<p>E, finalmente, o resistor vari\u00e1vel que define o n\u00edvel de umidade de limite. Especificamente \u2014 um divisor, composto por resistores vari\u00e1vel e fixo. N\u00e3o h\u00e1 problemas com a sua conex\u00e3o, mas eu explico que o ADC integrado no <b>ESP8266<\/b> \u00e9 projetado para um m\u00e1ximo de 1 volt. Portanto, um divisor de tens\u00e3o de aproximadamente 5 vezes \u00e9 necess\u00e1rio.<\/p>\n<p>E mais uma vez, lembro que esse divisor n\u00e3o \u00e9 necess\u00e1rio se o n\u00edvel de umidade de limite \u00e9 definido pela rede utilizando o protocolo MQTT.<\/p>\n<p>Vamos come\u00e7ar a elaborar o algoritmo de funcionamento do dispositivo no editor ElDraw ShIoTiny. Como acess\u00e1-lo pode ser lido em artigos anteriores ou no guia, cujo link est\u00e1 no in\u00edcio do artigo.<\/p>\n<h4>Primeira op\u00e7\u00e3o, a mais simples<\/h4>\n<p>\nCome\u00e7aremos pelo simples: ativa\u00e7\u00e3o do rel\u00e9 <b>Relay1<\/b> quando o n\u00edvel de umidade atinge o limiar por um tempo determinado.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u00e7\u00e3o de ambientes \u00famidos (exemplo de projeto)\" src=\"\/wp-content\/uploads\/2019\/08\/e9f8d30627cf7cdbebccf863c2b2f808.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComo podemos ver, nada complicado: apenas quatro n\u00f3s, sem contar os n\u00f3s de coment\u00e1rios. <b>DHT11<\/b> \u2014 este \u00e9, de fato, o sensor de temperatura e umidade (pode ser trocado por <b>DHT22<\/b>).<\/p>\n<p>Constante <b>CONST<\/b> \u2014 o n\u00edvel de umidade limiar, em porcentagem.<\/p>\n<p>O comparador \u2014 \u00e9 um n\u00f3 que compara dois n\u00fameros e exibe 1 na sa\u00edda se a condi\u00e7\u00e3o for atendida e 0 se n\u00e3o for.<\/p>\n<p>No nosso caso, essa condi\u00e7\u00e3o ser\u00e1 <b>A&gt;B<\/b>, onde <b>A<\/b> \u2014 n\u00edvel de umidade medido pelo sensor, e <b>B<\/b> \u2014 o n\u00edvel de umidade limiar.<\/p>\n<p>Assim que o n\u00edvel de umidade medido (<b>A<\/b>) ultrapassar o n\u00edvel de umidade limiar (<b>B<\/b>), um 1 aparecer\u00e1 na sa\u00edda do comparador e o rel\u00e9 ser\u00e1 acionado. E, inversamente, assim que o n\u00edvel de umidade retornar ao normal (ou seja, <b>A&gt;B<\/b> A&lt;=B <b>), um 0 surgir\u00e1 e o rel\u00e9 ser\u00e1 desligado.<\/b>), um 1 aparecer\u00e1 na sa\u00edda do comparador e o rel\u00e9 ser\u00e1 acionado. E, inversamente, assim que o n\u00edvel de umidade retornar ao normal (ou seja, <b>A&gt;B<\/b> Tudo claro? Para quem n\u00e3o entendeu muito bem \u2014 leia novamente ou consulte a descri\u00e7\u00e3o do funcionamento dos n\u00f3s no guia.<\/p>\n<p>Vale ressaltar que os dados do sensor<\/p>\n<p>s\u00e3o atualizados aproximadamente uma vez a cada 10 segundos. Portanto, o rel\u00e9 n\u00e3o poder\u00e1 ligar e desligar mais do que uma vez a cada 10 segundos. <b>DHT11<\/b> Isso n\u00e3o seria um problema, mas gostar\u00edamos de definir o n\u00edvel de umidade limiar usando um potenci\u00f4metro. N\u00e3o poderia ser mais simples!<\/p>\n<p>Basta substituir o n\u00f3 constante por um n\u00f3 ADC. Afinal, foi ao ADC que conectamos o divisor de tens\u00e3o com o potenci\u00f4metro.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u00e7\u00e3o de ambientes \u00famidos (exemplo de projeto)\" src=\"\/wp-content\/uploads\/2019\/08\/3042bda4fe16e3fbad2d3f46f0beccb4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA tens\u00e3o na entrada do ADC varia de 0 a 1 Volt. J\u00e1 a umidade na sa\u00edda do sensor varia de 0 a 100%. Como os comparamos? \u00c9 muito simples. O n\u00f3 ADC n\u00e3o apenas mede a tens\u00e3o na entrada, mas tamb\u00e9m \u00e9 capaz de<\/p>\n<p>escalonar e deslocar <b>ShIoTiny<\/b> Ou seja, na sa\u00edda do n\u00f3 ADC1 (ADC) haver\u00e1 um valor <i><b>, calculado pela f\u00f3rmula<\/b><\/i>.<\/p>\n<p>\u2014 tens\u00e3o na entrada do ADC (de 0 a 1V); <b>X<\/b>\u2014 faixa do ADC e <\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u00e7\u00e3o de ambientes \u00famidos (exemplo de projeto)\" src=\"\/wp-content\/uploads\/2019\/08\/d01bc0ff4e6962252fced695d3894d32.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>, onde <img decoding=\"async\" alt=\"ShIoTiny: ventila\u00e7\u00e3o de ambientes \u00famidos (exemplo de projeto)\" src=\"\/wp-content\/uploads\/2019\/08\/ac0bf727edb4c759d12268376ec6ad9b.jpeg\" style=\"display:block;margin: 0 auto;\" \/> -deslocamento do ADC. Assim, se definirmos <b>k<\/b> k=100 <b>b<\/b>b=0 <b>, ent\u00e3o ao variar<\/b> e <b>na faixa de 0 a 1, o valor<\/b>na sa\u00edda do n\u00f3 ADC variar\u00e1 de 0 a 100. Ou seja, numericamente igual \u00e0 faixa de varia\u00e7\u00e3o da umidade de 0 a 100%. <img decoding=\"async\" alt=\"ShIoTiny: ventila\u00e7\u00e3o de ambientes \u00famidos (exemplo de projeto)\" src=\"\/wp-content\/uploads\/2019\/08\/0afbeb2e49d5a107bc54d6bbd87ba23c.jpeg\" style=\"display:block;margin: 0 auto;\" \/> de 0 a 1, valor <b>X<\/b> na sa\u00edda do n\u00f3 ADC variar\u00e1 de 0 a 100. Ou seja, numericamente igual ao intervalo de varia\u00e7\u00e3o da umidade de 0 a 100%.<\/p>\n<p>Ou, de forma simples, girando o motor de resist\u00eancia vari\u00e1vel, voc\u00ea pode definir o n\u00edvel de umidade de 0 a 100. A \u00fanica desvantagem \u00e9 que n\u00e3o h\u00e1 nenhum dispositivo de exibi\u00e7\u00e3o. Mas, na pr\u00e1tica, se voc\u00ea dividir o motor de resist\u00eancia vari\u00e1vel em 6 segmentos 0%, 20%, 40%, 60%, 80%, 100%) \u2014 isso \u00e9 suficiente para ajustar o n\u00edvel de umidade.<\/p>\n<p>Como devemos definir os coeficientes <b>k<\/b> k=100 <b>b<\/b>-deslocamento (offset ADC)? \u00c9 mais f\u00e1cil do que parece! Clique com o mouse no n\u00f3 <b>ADC1<\/b> e imediatamente aparecer\u00e1 uma janela de configura\u00e7\u00e3o. Nela, voc\u00ea pode ajustar tudo o que precisa. Para o nosso caso, ser\u00e1 uma janela como a da imagem.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u00e7\u00e3o de ambientes \u00famidos (exemplo de projeto)\" src=\"\/wp-content\/uploads\/2019\/08\/ff81992b4fe236f5de6d17ca6bf8187c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEnt\u00e3o, temos uma solu\u00e7\u00e3o de trabalho simples. Vamos aprimor\u00e1-la.<br \/>\nPor sinal, a solu\u00e7\u00e3o mais simples tem uma vantagem \u2014 ela n\u00e3o precisa de internet. \u00c9 completamente aut\u00f4noma.<\/p>\n<h4>A segunda op\u00e7\u00e3o, conectamos um bot\u00e3o<\/h4>\n<p>\nTudo funciona e todos est\u00e3o felizes. Mas temos um problema, n\u00e3o podemos ligar a ventila\u00e7\u00e3o manualmente. J\u00e1 hav\u00edamos combinado que \u00e0 entrada <b>Input1<\/b> teremos um bot\u00e3o que ligar\u00e1 e desligar\u00e1 o ventilador manualmente, sem se preocupar com o sensor de umidade.<br \/>\nChegou a hora de processar este bot\u00e3o em nosso esquema-programa.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u00e7\u00e3o de ambientes \u00famidos (exemplo de projeto)\" src=\"\/wp-content\/uploads\/2019\/08\/673c274a5be680ce7c3ef1f9572f93fa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO bloco de processamento do bot\u00e3o pressionado est\u00e1 destacado com uma linha laranja. Ele funciona como um contador de pressionamentos do bot\u00e3o, que \u00e9 reiniciado para zero quando o valor em sua sa\u00edda excede um (linha verde, sa\u00edda do n\u00f3 <b>CT<\/b>).<\/p>\n<p>Funciona aqui da mesma maneira simples que antes: o contador <b>CT<\/b> conta as press\u00f5es do bot\u00e3o conectado \u00e0 entrada <b>Input1<\/b>. Ou seja, o valor na sa\u00edda deste contador aumenta em 1 a cada press\u00e3o do bot\u00e3o.<\/p>\n<p>Assim que esse valor se tornar igual a dois (ou seja, maior que 1), imediatamente haver\u00e1 1 na sa\u00edda do comparador <b>A&gt;B<\/b> . E esse 1 zerar\u00e1 o contador <b>CT<\/b> a zero. Refere-se ao comparador, o inferior no esquema!<\/p>\n<p>Assim, nosso bot\u00e3o tem dois estados \u2014 0 e 1. Se precis\u00e1ssemos de mais estados (3, 4 ou mais) \u2014 seria suficiente mudar a constante <b>CONST<\/b> de um para outro valor.<\/p>\n<p>Portanto, temos duas condi\u00e7\u00f5es para ligar o ventilador: o n\u00edvel de umidade exceder o definido e um \u00fanico pressionar do bot\u00e3o. Quando qualquer uma das condi\u00e7\u00f5es \u00e9 atendida, o ventilador ligar\u00e1. E funcionar\u00e1 at\u00e9 que o bot\u00e3o seja pressionado novamente <b>eu posso usar<\/b> ou at\u00e9 que o n\u00edvel de umidade normalize.<\/p>\n<p>\u00c9 claro que podemos complicar ainda mais o algoritmo, mas n\u00e3o faremos isso \u2014 deixaremos espa\u00e7o para a criatividade dos interessados.<\/p>\n<h4>Op\u00e7\u00e3o tr\u00eas, conecte-se \u00e0 internet.<\/h4>\n<p>\nTudo o que descrevemos \u00e9 perfeitamente funcional. E quanto aos 'pontos'? Qualquer hipster-hacker-cracker espinhento vai rir daquele que gira uma manivela e aperta um bot\u00e3o, em vez de controlar via smartphone! Girar uma manivela \u00e9 'fora de moda'. Mas deslizar o dedo pelo smartphone at\u00e9 sangrar \u2014 isso \u00e9 o auge do desejo do hipster-hacker-cracker (nunca consegui distinguir todos eles \u2014 ent\u00e3o, se errei, desculpe).<\/p>\n<p>Mas vamos ser indulgentes com essas pessoas indicadas. A gest\u00e3o atrav\u00e9s da internet tem suas vantagens reais. Em primeiro lugar, h\u00e1 a visualiza\u00e7\u00e3o. H\u00e1 uma infinidade de aplicativos para todas as plataformas que permitem, com alguns toques, criar um painel de controle bastante utiliz\u00e1vel para nosso controlador-carlson. Em segundo lugar, \u00e9 a possibilidade de monitorar remotamente o estado da umidade no ambiente. E, em terceiro lugar, \u00e9 poss\u00edvel ver n\u00e3o apenas se o ventilador est\u00e1 girando ou n\u00e3o, mas tamb\u00e9m qual \u00e9 o n\u00edvel de umidade limite definido. E se o ventilador ligou automaticamente ou manualmente. No geral, tudo o que voc\u00ea desejar.<\/p>\n<p>Claro, para um ventilador \u00e9 um exagero \u2014 tanto apre\u00e7o. Mas isso \u00e9 apenas um exemplo.<\/p>\n<p>Portanto, para a conex\u00e3o \u00e0 internet, usaremos a tecnologia <b>MQTT<\/b> e o protocolo hom\u00f4nimo.<br \/>\nPara utilizar essa tecnologia, precisamos de <b>um broker MQTT<\/b>. Este \u00e9 um servidor especial que atende os <b>clientes MQTT<\/b>, por exemplo <b>ShIoTIny<\/b> e seu smartphone.<\/p>\n<p>O cerne da tecnologia <b>MQTT<\/b> \u00e9 que qualquer um dos clientes publica no broker MQTT (servidor) dados arbitr\u00e1rios sob um nome espec\u00edfico (chamado de <b>t\u00f3pico<\/b> na terminologia <b>MQTT<\/b>). Outros clientes podem se inscrever nesses dados arbitr\u00e1rios pelo seu nome (<b>t\u00f3pico<\/b>) e receber os dados rec\u00e9m-publicados. Ou seja, toda a troca de dados ocorre no princ\u00edpio cliente-broker-cliente.<\/p>\n<p>Eu <i><b>n\u00e3o irei<\/b><\/i> me aprofundar nos detalhes. H\u00e1 uma infinidade de artigos e tutoriais na internet sobre como funciona <b>MQTT<\/b> e quais programas existem para criar pain\u00e9is de controle. Vou apenas mostrar como podemos receber e publicar dados atrav\u00e9s de <b>ShIoTiny<\/b>.<\/p>\n<p>Usei como broker <noindex><a rel=\"nofollow\" href=\"https:\/\/www.cloudmqtt.com\/\">www.cloudmqtt.com<\/a><\/noindex>, mas o princ\u00edpio \u00e9 o mesmo em todo lugar.<\/p>\n<p>Portanto, vamos assumir que voc\u00ea se registrou no <b>broker MQTT<\/b>. De modo geral, o corretor ir\u00e1 fornecer (ou solicitar que voc\u00ea crie) um nome de usu\u00e1rio e uma senha (para autentica\u00e7\u00e3o), al\u00e9m da porta para conex\u00e3o. Conectar-se <b>ShIoTiny<\/b> para <b>ao broker MQTT<\/b> pode ser feito de duas maneiras \u2014 conex\u00e3o comum e atrav\u00e9s de <b>TLS<\/b> (<b>SSL<\/b>).<\/p>\n<p>Todos esses par\u00e2metros s\u00e3o <b>ShIoTiny<\/b> inseridos na aba <b>Rede<\/b>, se\u00e7\u00e3o <b>Conex\u00e3o MQTT ao servidor<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u00e7\u00e3o de ambientes \u00famidos (exemplo de projeto)\" src=\"\/wp-content\/uploads\/2019\/08\/3a16cbd07a64428568e7c03f178e87ef.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSe o seu <b>um broker MQTT<\/b> n\u00e3o requer autentica\u00e7\u00e3o \u2014 n\u00e3o insira login e senha (deixe esses campos vazios).<\/p>\n<p>Par\u00e2metro <b>Prefixo do t\u00f3pico MQTT<\/b> merece uma explica\u00e7\u00e3o separada.<\/p>\n<p>O prefixo dos par\u00e2metros MQTT \u00e9 uma string adicionada ao nome do t\u00f3pico (<b>t\u00f3pico<\/b>) ao publicar e assinar t\u00f3picos no broker MQTT. Para definir <b>o prefixo MQTT<\/b> para o seu controlador, voc\u00ea deve apenas inseri-lo no campo de entrada \"<b>Prefixo do t\u00f3pico MQTT<\/b>\u00bb (\u00ab<b>Prefixo do t\u00f3pico MQTT<\/b>\". O prefixo sempre come\u00e7a com uma barra (<b>\u00ab\/\u00bb<\/b>)! Se voc\u00ea n\u00e3o inserir a barra no campo de entrada \u2014 ela ser\u00e1 adicionada automaticamente. No prefixo, n\u00e3o \u00e9 permitido usar caracteres <b>\u00ab#\u00bb<\/b> e <b>\u00ab+\u00bb<\/b>. N\u00e3o h\u00e1 outras restri\u00e7\u00f5es.<\/p>\n<p>Por exemplo, se voc\u00ea publica o par\u00e2metro \"<b>status<\/b>\" (ou se inscreve nele), e seu prefixo \u00e9 definido como \"<b>\/shiotiny\/<\/b>\", ent\u00e3o no broker este par\u00e2metro ser\u00e1 publicado sob o nome \"<b>\/shiotiny\/status<\/b>\". Se voc\u00ea tem um prefixo vazio, todos os par\u00e2metros no broker come\u00e7ar\u00e3o com uma barra (<b>\u00ab\/\u00bb<\/b>): \u00ab<b>status<\/b>\" ser\u00e1 publicado como \"<b>\/status<\/b>\u00bb.<\/p>\n<p>Ent\u00e3o, assumindo que voc\u00ea se registrou em <b>broker MQTT<\/b> e obteve login, senha e porta. Em seguida, voc\u00ea registrou esses par\u00e2metros na aba <b>Rede<\/b>, se\u00e7\u00e3o <b>Conex\u00e3o MQTT ao servidor<\/b> do controlador. <b>ShIoTiny<\/b>.<\/p>\n<p>Assumindo que o prefixo foi definido como \"<b>\/room\/<\/b>\u00bb.<\/p>\n<p>Vamos come\u00e7ar publicando o estado de todos os par\u00e2metros principais: rel\u00e9 <b>Rel\u00e91<\/b>, estado de ativa\u00e7\u00e3o manual, estado de ativa\u00e7\u00e3o autom\u00e1tica e, finalmente, n\u00edveis de umidade de limite e atuais. E como um b\u00f4nus \u2014 a temperatura ambiente. Como fazer isso, veja na imagem.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u00e7\u00e3o de ambientes \u00famidos (exemplo de projeto)\" src=\"\/wp-content\/uploads\/2019\/08\/ed016ae37bb0cb1197e2e4fd649a7c4f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComo podemos ver, a \u00fanica diferen\u00e7a em rela\u00e7\u00e3o \u00e0 vers\u00e3o anterior s\u00e3o os n\u00f3s \"<b>Publicar MQTT<\/b>\". Considerando o prefixo, os seguintes par\u00e2metros s\u00e3o publicados:<br \/>\n<img decoding=\"async\" alt=\"ShIoTiny: ventila\u00e7\u00e3o de ambientes \u00famidos (exemplo de projeto)\" src=\"\/wp-content\/uploads\/2019\/08\/34b67dd1932f30de777a680802f71c59.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComo podemos ver, o estado de todo o sistema est\u00e1 completamente vis\u00edvel!<\/p>\n<p>Mas queremos n\u00e3o apenas ver, mas tamb\u00e9m gerenciar. E agora, o que fazer? Muito simples. Vamos desistir de configurar o n\u00edvel de umidade de limite usando <b>ADC<\/b> e um resistor vari\u00e1vel e vamos definir esse mesmo n\u00edvel de umidade de limite diretamente do <b>MQTT<\/b> smartphone!<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventila\u00e7\u00e3o de ambientes \u00famidos (exemplo de projeto)\" src=\"\/wp-content\/uploads\/2019\/08\/c32d9ec2c1a082e0a1ead0b04526eba5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRemova o n\u00f3 ADC do esquema e adicione tr\u00eas novos n\u00f3s: <b>Armazenar FLASH<\/b>, <b>Restaurar FLASH<\/b> e <b>descrever MQTT<\/b>.<\/p>\n<p>A fun\u00e7\u00e3o do n\u00f3 <b>descrever MQTT<\/b> \u00e9 clara: ele recebe o par\u00e2metro <b>\/room\/trigHset<\/b> (n\u00edvel de umidade de limite) do <b>broker MQTT.<\/b>Mas o que ele faz com os dados depois? Simplesmente passa para o n\u00f3 <b>Armazenar FLASH<\/b>, que, por sua vez, armazena esses dados na mem\u00f3ria n\u00e3o vol\u00e1til sob o nome <b>trigH<\/b>. Ap\u00f3s isso, o n\u00f3 <b>Restaurar FLASH<\/b> l\u00ea da mem\u00f3ria n\u00e3o vol\u00e1til os dados sob o nome <b>trigH<\/b> e o que acontece a seguir j\u00e1 sabemos.<\/p>\n<p>Por que tanta complexidade? Por que n\u00e3o passar imediatamente os dados recebidos para o comparador? <\/p>\n<p>Como dizia o camarada S. Holmes \u2014 <i>\u00e9 elementar<\/i>! Ningu\u00e9m garante que, ap\u00f3s ligar seu dispositivo, ele se conectar\u00e1 a <b>ao broker MQTT<\/b>. E \u00e9 necess\u00e1rio medir a umidade. E \u00e9 preciso ligar o ventilador. Mas sem informa\u00e7\u00f5es sobre o n\u00edvel de umidade limite, isso \u00e9 imposs\u00edvel! Portanto, nosso dispositivo, ao ser ligado, extrai da mem\u00f3ria n\u00e3o vol\u00e1til o n\u00edvel de umidade limite previamente armazenado e o utiliza para tomar decis\u00f5es. E quando a conex\u00e3o com <b>o broker MQTT<\/b> e algu\u00e9m publicar um novo valor <b>\/room\/trigHset<\/b>, ent\u00e3o esse novo valor ser\u00e1 utilizado.<\/p>\n<p>A partir da\u00ed, voc\u00ea pode inventar o que quiser. Por exemplo, al\u00e9m da umidade, adicionar tamb\u00e9m o controle da temperatura. Ou incluir controle de ilumina\u00e7\u00e3o \"inteligente\" (ainda temos dois rel\u00e9s e duas entradas n\u00e3o utilizados). Tudo est\u00e1 em suas m\u00e3os!<\/p>\n<h4>Conclus\u00e3o<\/h4>\n<p>\nAssim, analisamos alguns exemplos da implementa\u00e7\u00e3o de um controlador simples na base do ShIoTiny. Pode ser que isso seja \u00fatil para algu\u00e9m.<\/p>\n<p>Como sempre, sugest\u00f5es, pedidos, perguntas, erros de impress\u00e3o e outros \u2014 para o e-mail: <b>shiotiny@yandex.ru<\/b><br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/464485\/\">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 \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439 \u043e ShIoTiny \u2014 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u043e\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0447\u0438\u043f\u0430 ESP8266. \u0412 \u044d\u0442\u043e\u0442 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0446\u0438\u0438 \u0432 \u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u043d\u0430\u0442\u0435 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u0441 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u043e\u0439 \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f ShIoTiny. \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0441\u0435\u0440\u0438\u0438. 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 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28079,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37423","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 \u043e \u0447\u0435\u043c \u044d\u0442\u0430.\" \/>\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-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer\" \/>\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: \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0446\u0438\u044f \u0432\u043b\u0430\u0436\u043d\u043e\u0433\u043e \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u044f (\u043f\u0440\u043e\u0435\u043a\u0442-\u043f\u0440\u0438\u043c\u0435\u0440) | 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 \u043e \u0447\u0435\u043c \u044d\u0442\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer\" \/>\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: ventila\u00e7\u00e3o de ambiente \u00famido (projeto-exemplo) | ProHoster","description":"Principais teses ou sobre o que \u00e9 isto.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer","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: \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0446\u0438\u044f \u0432\u043b\u0430\u0436\u043d\u043e\u0433\u043e \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u044f (\u043f\u0440\u043e\u0435\u043a\u0442-\u043f\u0440\u0438\u043c\u0435\u0440) | ProHoster","og:description":"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0437\u0438\u0441\u044b \u0438\u043b\u0438 \u043e \u0447\u0435\u043c \u044d\u0442\u0430.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer","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":"37423","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\/37423","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=37423"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/37423\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/28079"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=37423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=37423"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=37423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}