{"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\/it\/blog\/administrirovanie\/shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer","title":{"rendered":"ShIoTiny: ventilazione di un ambiente umido (progetto di esempio)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"ShIoTiny: ventilazione di un ambiente umido (progetto di esempio)\" src=\"\/wp-content\/uploads\/2019\/08\/a6e9c8239a90c713bd1b3b21891cbc13.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>Principali tesi o di cosa tratta questo articolo<\/h4>\n<p>\nContinuiamo il ciclo di articoli su <b>ShIoTiny<\/b> \u2014 un controller visivamente programmabile basato su chip <b>ESP8266<\/b>.<\/p>\n<p>In questo articolo, si parla del progetto di gestione della ventilazione in un bagno o in un'altra stanza con elevata umidit\u00e0, mostrando come costruire un programma per <b>ShIoTiny<\/b>.<\/p>\n<h4>Articoli precedenti della serie.<\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463107\/\">ShIoTiny: automazione leggera, internet delle cose o \u00absei mesi prima delle vacanze\u00bb<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463285\/\">ShIoTiny: nodi, connessioni ed eventi o caratteristiche del disegno dei programmi<\/a><\/noindex><\/p>\n<h4>Link<\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shiotiny\/ShIoTinyBin\">Firmware binari, schema del controller e documentazione<\/a><\/noindex> <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shiotiny\/ShIoTinyBin\/blob\/master\/doc\/ShIoT-esp8266-01_obzor.pdf\">Manuale e descrizione dei moduli<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/esppower.ru\/mqtt-android\/\">Configurazione del broker MQTT cloudmqtt.com<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/393277\/\">Pannello di controllo MQTT dashboard per Android<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Introduzione<\/h4>\n<p>\nNon esiste comprensione al di fuori dell'esperienza. Questa \u00e8 una verit\u00e0 collaudata dal tempo e dalle generazioni. Quindi, non c'\u00e8 nulla di meglio per imparare abilit\u00e0 pratiche che cercare di fare qualcosa da soli. E esempi che mostrano cosa si pu\u00f2 fare e cosa \u00e8 meglio evitare saranno estremamente utili. Gli errori altrui, ovviamente, non possono prevenire i propri errori, ma possono aiutare a ridurre il numero di questi ultimi.<\/p>\n<p>Le domande e le lettere dei lettori degli articoli precedenti mi hanno spinto a realizzare un piccolo progetto esemplificativo per gestire la ventilazione, per dimostrare come funzionano i moduli ShIoTiny.<\/p>\n<p>L'idea originale su cui si basa il controller <b>ShIoTiny<\/b> \u2014 una stazione di pompaggio e irrigazione \u2014 non \u00e8 adatta e interessante per tutti. Quindi ho preso un sistema di gestione della ventilazione, comprensibile a tutti e utile a molti, come esempio.<\/p>\n<p>Dico che l'idea del progetto non \u00e8 mia, ma <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/masterkit\/blog\/385281\/\">l'ho presa da qui<\/a><\/noindex> e poi l'ho adattata a <b>ShIoTiny<\/b>.<\/p>\n<h4>Prima di tutto, capisci cosa vuoi<\/h4>\n<p>\nIl processo di perfezionamento \u00e8 infinito. E questa caratteristica ha distrutto molte buone idee e progetti. Lo sviluppatore, invece di rilasciare qualcosa di funzionante anche se non perfetto, continuava a perfezionarla. E la perfezionava finch\u00e9 i concorrenti non lo superavano, rilasciando soluzioni magari non perfette (spesso addirittura scadenti), ma funzionanti.<\/p>\n<p>Perci\u00f2 \u00e8 molto importante sapere dove mettere un punto nel progetto. In altre parole, dobbiamo definire cosa vogliamo ottenere alla fine del progetto da ci\u00f2 che abbiamo all'inizio. Nella lingua russa, per un documento che viene redatto proprio con l'intento di descrivere il percorso di creazione di qualcosa, c'\u00e8 una parola breve e concisa: 'piano', che traducono erroneamente come 'roadmap' traduttori poco abili e manager difettosi.<\/p>\n<p>Il nostro piano sar\u00e0 il seguente. Supponiamo che ci sia un ambiente in cui l'umidit\u00e0 pu\u00f2 aumentare notevolmente. Ad esempio, come un bagno o una cucina. L'umidit\u00e0 \u00e8 un problema sgradevole e il metodo per combatterla \u00e8 antico quanto il mondo: areare l'ambiente. Ci sono diversi modi per farlo. Ma, probabilmente, rinunceremo a metodi esotici e antiquati come gli schiavetti con i ventagli e ci fermeremo su un normale ventilatore. I ventilatori sono pi\u00f9 economici e pi\u00f9 facili da trovare da noi.<\/p>\n<p>In breve, vogliamo controllare il ventilatore: accenderlo e, di conseguenza, spegnerlo. Piuttosto, vogliamo che si accenda e si spenga da solo quando necessario.<\/p>\n<p>Resta da determinare: in quali condizioni il ventilatore deve accendersi e in quali deve spegnersi.<\/p>\n<p>Qui tutto \u00e8 ovvio: se l'umidit\u00e0 \u00e8 superiore a una certa soglia prefissata, il ventilatore si accende e aspira l'aria; l'umidit\u00e0 torna alla normalit\u00e0, il ventilatore si spegne.<\/p>\n<p>Un lettore attento si soffermer\u00e0 subito sulla parola \u00abprefissata\u00bb. Da chi \u00e8 stata stabilita? In che modo \u00e8 stata stabilita?<\/p>\n<p>La soglia di umidit\u00e0 pu\u00f2 essere impostata in diversi modi. Esamineremo due di essi: il primo tramite un resistore variabile e il secondo tramite rete attraverso il protocollo MQTT. Ognuno di questi metodi ha vantaggi e svantaggi, che saranno analizzati in seguito.<\/p>\n<p>Per coloro che non l'hanno compreso, spiegher\u00f2 che la \u00absoglia di umidit\u00e0\u00bb \u00e8 il livello di umidit\u00e0 oltre il quale \u00e8 necessario accendere il ventilatore.<\/p>\n<p>La prossima domanda \u00e8: fornire all'utente il diritto di accendere il ventilatore direttamente? Cio\u00e8, indipendentemente dal livello di umidit\u00e0, premendo un pulsante? Prevederemo questa possibilit\u00e0. Infatti, il ventilatore potrebbe essere necessario non solo in caso di umidit\u00e0 elevata, ma anche per rimuovere dall'ambiente, ad esempio, un cattivo odore, comunemente chiamato 'puzza'.<\/p>\n<p>Quindi, abbiamo compreso cosa vogliamo e anche un po' come funzioner\u00e0. Elenchiamo brevemente tutte le funzioni del nostro sistema di controllo della ventilazione:<\/p>\n<ul>\n<li> impostazione della soglia di umidit\u00e0 (due opzioni);<\/li>\n<li> misurazione del livello di umidit\u00e0;<\/li>\n<li> accensione automatica del ventilatore;<\/li>\n<li> spegnimento automatico del ventilatore;<\/li>\n<li> accensione manuale del ventilatore (premendo un pulsante).<\/li>\n<\/ul>\n<p>\nQuindi, il piano \u00e8 chiaro. \u00c8 necessario implementare tutte le funzioni sopra elencate nel nostro programma. Agiremo in base a questo \"piano\". Iniziamo disegnando il diagramma strutturale del dispositivo.<\/p>\n<h4>Diagramma strutturale del dispositivo<\/h4>\n<p>\nIn realt\u00e0, avremo due di questi schemi. Il primo \u00e8 per l'opzione in cui il livello di umidit\u00e0 viene impostato tramite una resistenza variabile. Il secondo schema \u00e8 per l'opzione in cui il livello di umidit\u00e0 \u00e8 impostato tramite rete utilizzando il protocollo MQTT.<\/p>\n<p>Ma poich\u00e9 questi schemi differiranno solo per un elemento - il \"resistore variabile per la regolazione del livello di umidit\u00e0\" - disegneremo solo un diagramma strutturale. Certamente, il diagramma strutturale secondo GOST appare diverso. Ma ci rivolgiamo non agli ingegneri esperti, ma alle nuove generazioni. Pertanto, la chiarezza \u00e8 pi\u00f9 importante.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilazione di un ambiente umido (progetto di esempio)\" src=\"\/wp-content\/uploads\/2019\/08\/519f40496a8e459c22d69e7f0eaeee1d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuindi, cosa vediamo nell'immagine? Il ventilatore \u00e8 collegato al rel\u00e8 <b>Relay1<\/b> del controller. <b>ShIoTiny<\/b>Faccio notare che il ventilatore \u00e8 un dispositivo che opera ad alta tensione. Quindi, se qualcuno decider\u00e0 di costruirne uno da solo, prestate attenzione. In altre parole, prima di inserire le dita o strumenti di misura nello schema, disattivate almeno il ventilatore. E un'altra osservazione. Se il vostro ventilatore ha una potenza superiore a <b>250W<\/b>, non collegatelo direttamente a <b>ShIoTiny<\/b> \u2014 solo tramite un avviatore.<\/p>\n<p>Abbiamo capito il funzionamento del ventilatore. Ora il pulsante \"accensione manuale\" del ventilatore. \u00c8 collegato all'ingresso <b>Input1<\/b>. Qui non c'\u00e8 nulla da spiegare ulteriormente.<\/p>\n<p>Sensore di temperatura e umidit\u00e0 <b>DHT-11<\/b> (o <b>DHT-22<\/b> o i loro analoghi). Per il suo collegamento \u00e8 previsto un ingresso speciale sul controller. <b>ShIoTiny<\/b>Come si pu\u00f2 vedere dall'immagine, collegare tale sensore non presenta problemi.<\/p>\n<p>Infine, una resistenza variabile per impostare il livello di umidit\u00e0. Pi\u00f9 precisamente, un partitore composto da resistenze variabile e fissa. Non ci sono problemi di collegamento, ma spiego che l'AD convertitore integrato nel <b>ESP8266<\/b> \u00e8 progettato per un massimo di 1 Volt. Ecco perch\u00e9 \u00e8 necessario un partitore di tensione che riduca di circa 5 volte.<\/p>\n<p>E ricordo ancora una volta che questo partitore non \u00e8 necessario se il livello di umidit\u00e0 \u00e8 impostato tramite rete utilizzando il protocollo MQTT.<\/p>\n<p>Iniziamo a creare l'algoritmo di funzionamento del dispositivo nell'editor ElDraw ShIoTiny. Puoi leggere come accedere a questo editor negli articoli precedenti o nel manuale, il cui link si trova all'inizio dell'articolo.<\/p>\n<h4>Primo esempio, il pi\u00f9 semplice<\/h4>\n<p>\nIniziamo con una semplice attivazione del rel\u00e8 <b>Relay1<\/b> al superamento della soglia di umidit\u00e0 per un tempo prestabilito.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilazione di un ambiente umido (progetto di esempio)\" src=\"\/wp-content\/uploads\/2019\/08\/e9f8d30627cf7cdbebccf863c2b2f808.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCome vediamo, nulla di complicato: ci sono solo quattro nodi, senza contare i nodi di commento. <b>DHT11<\/b> \u00e8 propriamente il sensore di temperatura e umidit\u00e0 (pu\u00f2 essere sostituito con <b>DHT22<\/b>).<\/p>\n<p>Costante <b>CONST<\/b> \u00e8 la soglia di umidit\u00e0, in percentuale.<\/p>\n<p>Il comparatore \u00e8 un nodo che confronta due numeri e genera un'uscita di 1 se la condizione \u00e8 soddisfatta e 0 se non lo \u00e8.<\/p>\n<p>Nel nostro caso, tale condizione sar\u00e0 <b>A&gt;B<\/b>, dove <b>A<\/b> il livello di umidit\u00e0 misurato dal sensore, e <b>B<\/b> la soglia di umidit\u00e0.<\/p>\n<p>Non appena il livello di umidit\u00e0 misurato (<b>A<\/b>) supera la soglia di umidit\u00e0 (<b>B<\/b>), l'uscita del comparatore <b>A&gt;B<\/b> diventer\u00e0 1 e il rel\u00e8 si attiver\u00e0. Al contrario, non appena il livello di umidit\u00e0 torna alla normalit\u00e0 (cio\u00e8 <b>A&lt;=B<\/b>), l'uscita del comparatore <b>A&gt;B<\/b> uscir\u00e0 0 e il rel\u00e8 si disattiver\u00e0.<\/p>\n<p>Tutto chiaro? Se non lo \u00e8 \u2014 leggilo di nuovo o fai riferimento alla descrizione del funzionamento dei nodi nel manuale.<\/p>\n<p>Nota che i dati dal sensore <b>DHT11<\/b> vengono aggiornati circa ogni 10 secondi. Quindi il rel\u00e8 non potr\u00e0 attivarsi e disattivarsi pi\u00f9 di una volta ogni 10 secondi.<\/p>\n<p>Niente di problematico, ma vorremmo impostare la soglia di umidit\u00e0 usando un resistore variabile. Nulla di pi\u00f9 semplice!<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilazione di un ambiente umido (progetto di esempio)\" src=\"\/wp-content\/uploads\/2019\/08\/3042bda4fe16e3fbad2d3f46f0beccb4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSostituiamo semplicemente il nodo costante con un nodo ADC. Infatti, \u00e8 proprio al ADC che abbiamo collegato il divisore di tensione con il resistore variabile.<\/p>\n<p>La tensione in ingresso all'ADC varia da 0 a 1 Volt. Mentre l'umidit\u00e0 in uscita dal sensore varia da 0 a 100%. Come facciamo a confrontarli? \u00c8 semplice. Il nodo ADC1 (ADC) non solo misura la tensione in ingresso, ma pu\u00f2 anche <b>ShIoTiny<\/b> scalare e spostare <i><b>In altre parole, l'uscita del nodo ADC1 avr\u00e0 un valore<\/b><\/i>.<\/p>\n<p>, calcolato secondo la formula <b>X<\/b>\u2014 tensione in ingresso all'ADC (da 0 a 1V); <\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilazione di un ambiente umido (progetto di esempio)\" src=\"\/wp-content\/uploads\/2019\/08\/d01bc0ff4e6962252fced695d3894d32.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>, dove <img decoding=\"async\" alt=\"ShIoTiny: ventilazione di un ambiente umido (progetto di esempio)\" src=\"\/wp-content\/uploads\/2019\/08\/ac0bf727edb4c759d12268376ec6ad9b.jpeg\" style=\"display:block;margin: 0 auto;\" \/> \u2014 intervallo (range ADC) e <b>k<\/b> \u2014 offset (offset ADC). Quindi, se impostiamo <b>b<\/b>k=100 <b>b=0<\/b> e <b>, al variare di<\/b>nell'intervallo da 0 a 1, il valore <img decoding=\"async\" alt=\"ShIoTiny: ventilazione di un ambiente umido (progetto di esempio)\" src=\"\/wp-content\/uploads\/2019\/08\/0afbeb2e49d5a107bc54d6bbd87ba23c.jpeg\" style=\"display:block;margin: 0 auto;\" \/> all'uscita del nodo ADC varier\u00e0 nell'intervallo da 0 a 100. Vale a dire, numericamente uguale all'intervallo di variazione dell'umidit\u00e0 dal 0 al 100%. <b>X<\/b> L'uscita del nodo ADC varier\u00e0 da 0 a 100. In altre parole, corrisponde all'intervallo di variazione dell'umidit\u00e0 dal 0 al 100%.<\/p>\n<p>In altre parole, ruotando il motore di resistenza variabile, puoi impostare il livello soglia di umidit\u00e0 da 0 a 100. L'unico inconveniente \u00e8 che non ci sono dispositivi di visualizzazione. Ma in pratica, se al motore di resistenza variabile fai 6 suddivisioni 0%, 20%, 40%, 60%, 80%, 100%) \u2014 questo \u00e8 sufficiente per impostare il livello soglia di umidit\u00e0.<\/p>\n<p>Come impostare i coefficienti <b>k<\/b> \u2014 offset (offset ADC). Quindi, se impostiamo <b>b<\/b>- offset ADC? \u00c8 pi\u00f9 facile che bere un bicchier d'acqua! Clicca con il cursore del mouse sul nodo <b>ADC1<\/b> e si aprir\u00e0 immediatamente una finestra di configurazione. Qui puoi impostare tutto ci\u00f2 di cui hai bisogno. Per il nostro caso sar\u00e0 una finestra come quella nell'immagine.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilazione di un ambiente umido (progetto di esempio)\" src=\"\/wp-content\/uploads\/2019\/08\/ff81992b4fe236f5de6d17ca6bf8187c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuindi, abbiamo una soluzione lavorativa semplice. Iniziamo a migliorarla.<br \/>\nA proposito, la soluzione pi\u00f9 semplice ha un vantaggio: non ha bisogno di internet. \u00c8 completamente autonoma.<\/p>\n<h4>Seconda opzione, colleremo un pulsante<\/h4>\n<p>\nTutto funziona e tutti sono contenti. Ma ecco il problema, non possiamo attivare la ventilazione forzata. Abbiamo gi\u00e0 concordato che all'ingresso <b>Input1<\/b> avremo un pulsante collegato, che accender\u00e0 e spegner\u00e0 il ventilatore forzatamente, senza prestare attenzione al sensore di umidit\u00e0.<br \/>\n\u00c8 giunto il momento di elaborare questo pulsante nel nostro schema-programma.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilazione di un ambiente umido (progetto di esempio)\" src=\"\/wp-content\/uploads\/2019\/08\/673c274a5be680ce7c3ef1f9572f93fa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl blocco di elaborazione della pressione del pulsante \u00e8 evidenziato con una linea arancione. Si tratta di un contatore di pressioni del pulsante, che si azzera quando il valore alla sua uscita supera uno (linea verde, uscita del nodo <b>CT<\/b>).<\/p>\n<p>Funziona tutto qui in modo semplice come prima: il contatore <b>CT<\/b> conta le pressioni del pulsante collegato all'ingresso <b>Input1<\/b>. Quindi il valore all'uscita di questo contatore aumenta di 1 con ogni pressione del pulsante.<\/p>\n<p>Non appena questo valore diventa uguale a due (cio\u00e8 maggiore di 1), immediatamente all'uscita del comparatore <b>A&gt;B<\/b> apparir\u00e0 1. E questo 1 azzerer\u00e0 il contatore <b>CT<\/b> a zero. Si intende il comparatore, quello inferiore nello schema!<\/p>\n<p>Cos\u00ec, il nostro pulsante ha due stati \u2014 0 e 1. Se avessimo bisogno di pi\u00f9 stati (3 o 4 o ancora di pi\u00f9) \u2014 ci basterebbe cambiare la costante <b>CONST<\/b> da uno a un altro valore.<\/p>\n<p>Quindi, abbiamo due condizioni per accendere il ventilatore: superamento del livello di umidit\u00e0 impostato e pressione singola del pulsante. Al verificarsi di una qualsiasi delle condizioni, il ventilatore si accender\u00e0. E funzioner\u00e0 finch\u00e9 non verr\u00e0 premuto nuovamente il pulsante <b>E<\/b> fino a quando il livello di umidit\u00e0 non si normalizza.<\/p>\n<p>Certo, possiamo complicare ulteriormente l'algoritmo, ma non lo faremo: lasciamo spazio alla creativit\u00e0 di chi lo desidera.<\/p>\n<h4>Terza opzione, connettiamoci a Internet.<\/h4>\n<p>\nTutto ci\u00f2 che abbiamo descritto \u00e8 perfettamente funzionante. E cosa dire della moda? Qualsiasi hipster hacker che si rispetti rider\u00e0 di chi gira manopole e preme pulsanti invece di controllare il tutto dallo smartphone! Girare una manopola non \u00e8 'cool'. Ma far scorrere il dito sullo smartphone, riducendo il dito in carne viva, ecco il picco dei desideri di un hipster hacker (non sono mai riuscito a distinguerli tutti \u2014 quindi se sbaglio, perdonatemi).<\/p>\n<p>Ma siatene indulgenti con le suddette persone. La gestione tramite Internet ha anche vantaggi reali. Primo, \u00e8 pratico. Ci sono molte applicazioni per tutte le piattaforme che consentono, con un paio di clic, di creare un pannello di controllo per il nostro controller. Secondo, offre la possibilit\u00e0 di monitorare da remoto l'umidit\u00e0 nell'ambiente. E, terzo, si pu\u00f2 vedere non solo se il ventilatore gira o meno, ma anche qual \u00e8 il livello di umidit\u00e0 impostato. E se il ventilatore \u00e8 stato attivato automaticamente o manualmente. Insomma, tutto ci\u00f2 che desiderate.<\/p>\n<p>Certamente, per un semplice ventilatore \u00e8 davvero troppo onore ricevere cos\u00ec tanta attenzione. Ma \u00e8 solo un esempio.<\/p>\n<p>Quindi, per connetterci a Internet utilizzeremo la tecnologia <b>MQTT<\/b> e il relativo protocollo.<br \/>\nPer utilizzare questa tecnologia, abbiamo bisogno di <b>un broker MQTT<\/b>. Questo \u00e8 un server speciale che gestisce <b>client MQTT<\/b>, ad esempio <b>ShIoTIny<\/b> e il tuo smartphone.<\/p>\n<p>La sostanza della tecnologia <b>MQTT<\/b> sta nel fatto che ciascun cliente pubblica sul broker MQTT (server) dati a piacere sotto un determinato nome (denominato <b>topic<\/b> in terminologia <b>MQTT<\/b>). Altri clienti possono iscriversi ai dati sotto quel nome (<b>topic<\/b>) e ricevere i dati appena pubblicati. Quindi tutto lo scambio di dati avviene secondo il principio client-broker-client.<\/p>\n<p>Io <i><b>Non mi soffermer\u00f2<\/b><\/i> sui dettagli. Ci sono moltissimi articoli e tutorial su come funziona <b>MQTT<\/b> e quali programmi esistono per creare pannelli di controllo. Mostrer\u00f2 semplicemente come ricevere e pubblicare dati tramite <b>ShIoTiny<\/b>.<\/p>\n<p>Come broker ho utilizzato <noindex><a rel=\"nofollow\" href=\"https:\/\/www.cloudmqtt.com\/\">www.cloudmqtt.com<\/a><\/noindex>, ma il principio \u00e8 lo stesso ovunque.<\/p>\n<p>Quindi, consideriamo che vi siate registrati su <b>un broker MQTT.<\/b>. In general, the broker will provide you with (or require you to create) a username and password (for authentication), as well as a port for connection. Connect <b>ShIoTiny<\/b> al <b>to the MQTT broker<\/b> in two ways \u2014 standard connection and <b>TLS<\/b> (<b>SSL<\/b>).<\/p>\n<p>All these parameters are <b>ShIoTiny<\/b> entered on the tab <b>Networking<\/b>, section <b>MQTT Connection to server<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilazione di un ambiente umido (progetto di esempio)\" src=\"\/wp-content\/uploads\/2019\/08\/3a16cbd07a64428568e7c03f178e87ef.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIf your <b>un broker MQTT<\/b> does not require authentication \u2014 do not enter a username and password (leave these fields blank).<\/p>\n<p>Parametro <b>MQTT topic prefix<\/b> requires separate explanation.<\/p>\n<p>The MQTT parameter prefix is a string added to the topic name (<b>topic<\/b>) when publishing and subscribing to the MQTT broker. To set the <b>MQTT prefix<\/b> for your controller, you just need to enter it in the field \u2018<b>MQTT Topic Prefix<\/b>\u00bb (\u00ab<b>MQTT topic prefix<\/b>\u2019). The prefix always starts with a slash (<b>\u00ab\/\u00bb<\/b>)! If you do not enter a slash in the input field \u2014 it will be added automatically. The prefix cannot contain characters <b>\u00ab#\u00bb<\/b> e <b>\u00ab+\u00bb<\/b>. There are no other restrictions.<\/p>\n<p>For example, if you are publishing the parameter \u2018<b>stato<\/b>\u2019 (or subscribing to it), and your prefix is set as \u2018<b>\/shiotiny\/<\/b>\u2019, then on the broker this parameter will be published under the name \u2018<b>\/shiotiny\/status<\/b>\u2019. If you have an empty prefix, then all parameters on the broker will start with a slash (<b>\u00ab\/\u00bb<\/b>): \u00ab<b>stato<\/b>\u2019 will be published as \u2018<b>\/status<\/b>\u00bb.<\/p>\n<p>So, let\u2019s assume you registered with <b>un broker MQTT.<\/b> and received a username, password, and port. Then you entered these parameters on the tab <b>Networking<\/b>, section <b>MQTT Connection to server<\/b> del controller. <b>ShIoTiny<\/b>.<\/p>\n<p>Let\u2019s assume the prefix is set to \u2018<b>\/room\/<\/b>\u00bb.<\/p>\n<p>Let\u2019s start by publishing the state of all key parameters: relay <b>Realay1<\/b>, the state of manual activation, the state of automatic activation, and finally, the threshold and current humidity levels. And as a bonus \u2014 the temperature in the room. How to do this, see the diagram.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilazione di un ambiente umido (progetto di esempio)\" src=\"\/wp-content\/uploads\/2019\/08\/ed016ae37bb0cb1197e2e4fd649a7c4f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAs we can see, the only difference from the previous option is the \u2018<b>MQTT Publish<\/b>\u2019 nodes. Considering the prefix, the following parameters are published:<br \/>\n<img decoding=\"async\" alt=\"ShIoTiny: ventilazione di un ambiente umido (progetto di esempio)\" src=\"\/wp-content\/uploads\/2019\/08\/34b67dd1932f30de777a680802f71c59.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAs we can see, all system states are at our fingertips!<\/p>\n<p>But we want not only to see but also to control. What to do? Very simple. We will abandon setting the threshold humidity level with the help of <b>ADC<\/b> and a variable resistor and will set this very threshold humidity level directly from <b>MQTT<\/b> the smartphone!<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilazione di un ambiente umido (progetto di esempio)\" src=\"\/wp-content\/uploads\/2019\/08\/c32d9ec2c1a082e0a1ead0b04526eba5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWe remove the ADC node from the scheme and include three new nodes there: <b>FLASH store<\/b>, <b>FLASH restore<\/b> e <b>MQTT describe<\/b>.<\/p>\n<p>The function of the node <b>MQTT describe<\/b> is obvious: it receives the parameter <b>\/room\/trigHset<\/b> (threshold humidity level) from <b>the MQTT broker.<\/b>But what does it do with the data next? It simply passes it to the node. <b>FLASH store<\/b>, che a sua volta memorizza questi dati nella memoria non volatile con il nome <b>trigH<\/b>. Dopo di che, il nodo <b>FLASH restore<\/b> legge dalla memoria non volatile i dati con il nome <b>trigH<\/b> e ci\u00f2 che accade dopo gi\u00e0 lo sappiamo.<\/p>\n<p>Perch\u00e9 tutte queste complessit\u00e0? Perch\u00e9 non restituire direttamente i dati ricevuti all'ingresso del comparatore? <\/p>\n<p>Come diceva il compagno S. Holmes \u2014 <i>\u00e8 elementare<\/i>! Nessuno garantisce che, dopo l'accensione del tuo dispositivo, esso si connetter\u00e0 a <b>to the MQTT broker<\/b>. E bisogna misurare l'umidit\u00e0. E bisogna accendere il ventilatore. Ma senza informazioni sul livello di soglia di umidit\u00e0, questo \u00e8 impossibile! Pertanto, il nostro dispositivo, all'accensione, estrae il livello di soglia di umidit\u00e0 precedentemente memorizzato dalla memoria non volatile e lo utilizza per prendere decisioni. E quando si stabilisce la connessione con <b>il broker MQTT<\/b> e qualcuno pubblica un nuovo valore <b>\/room\/trigHset<\/b>, allora verr\u00e0 utilizzato questo nuovo valore.<\/p>\n<p>Poi puoi inventare tutto ci\u00f2 che vuoi. Ad esempio, oltre all'umidit\u00e0, introdurre anche la misurazione della temperatura. O aggiungere un controllo \u201cintelligente\u201d dell'illuminazione (abbiamo ancora due rel\u00e8 e due ingressi non utilizzati). \u00c8 tutto nelle tue mani!<\/p>\n<h4>Conclusione<\/h4>\n<p>\nEcco, abbiamo esaminato alcuni esempi di realizzazione di un controller, che in sostanza \u00e8 molto semplice, basato su ShIoTiny. Potrebbe essere utile a qualcuno.<\/p>\n<p>Come sempre, suggerimenti, desideri, domande, errori di battitura e altro \u2014 scrivere a: <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.1.1 - 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\/it\/blog\/administrirovanie\/shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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: ventilazione di ambienti umidi (progetto-esempio) | ProHoster","description":"Punti principali o di cosa si tratta.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/37423","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=37423"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/37423\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/28079"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=37423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=37423"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=37423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}