{"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\/es\/blog\/administrirovanie\/shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer","title":{"rendered":"ShIoTiny: ventilaci\u00f3n de ambientes h\u00famedos (proyecto ejemplo).","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"ShIoTiny: ventilaci\u00f3n de ambientes h\u00famedos (proyecto ejemplo).\" src=\"\/wp-content\/uploads\/2019\/08\/a6e9c8239a90c713bd1b3b21891cbc13.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>Puntos principales o de qu\u00e9 trata este art\u00edculo<\/h4>\n<p>\nContinuamos con la serie de art\u00edculos sobre <b>ShIoTiny<\/b> \u2014 un controlador programable visualmente basado en el chip <b>ESP8266<\/b>.<\/p>\n<p>En este art\u00edculo se explica, a trav\u00e9s del ejemplo de un proyecto de control de ventilaci\u00f3n en un ba\u00f1o o en otra habitaci\u00f3n con alta humedad, c\u00f3mo se construye un programa para <b>ShIoTiny<\/b>.<\/p>\n<h4>Art\u00edculos anteriores de la serie.<\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463107\/\">ShIoTiny: automatizaci\u00f3n peque\u00f1a, Internet de las cosas o 'seis meses antes de las vacaciones'<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463285\/\">ShIoTiny: nodos, conexiones y eventos, o caracter\u00edsticas del dibujo de programas.<\/a><\/noindex><\/p>\n<h4>Enlaces<\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shiotiny\/ShIoTinyBin\">Firmas binarias, esquema del controlador y documentaci\u00f3n<\/a><\/noindex> <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shiotiny\/ShIoTinyBin\/blob\/master\/doc\/ShIoT-esp8266-01_obzor.pdf\">Instrucciones y descripci\u00f3n de los nodos<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/esppower.ru\/mqtt-android\/\">Configuraci\u00f3n del broker MQTT cloudmqtt.com<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/393277\/\">Panel de control MQTT dashboard para Android<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Introducci\u00f3n<\/h4>\n<p>\nLa comprensi\u00f3n no existe sin experiencia. Esta es una verdad probada por el tiempo y las generaciones. Por lo tanto, no hay nada mejor para aprender habilidades pr\u00e1cticas que intentar hacer algo por uno mismo. Y los ejemplos que muestran lo que se puede hacer y lo que no se debe intentar son muy \u00fatiles aqu\u00ed. Los errores de otros, por supuesto, no pueden prevenir la aparici\u00f3n de los propios, pero pueden ayudar a reducir su n\u00famero.<\/p>\n<p>Las preguntas y cartas de los lectores de los art\u00edculos anteriores me impulsaron a hacer un peque\u00f1o proyecto de ejemplo sobre el control de la ventilaci\u00f3n para mostrar c\u00f3mo funcionan los nodos ShIoTiny.<\/p>\n<p>La idea original, en la que se basa el controlador <b>ShIoTiny<\/b> \u2014 una estaci\u00f3n de bombeo e irrigaci\u00f3n \u2014 no es adecuada ni interesante para todos. Por eso tom\u00e9 un sistema de control de ventilaci\u00f3n, claro para todos y \u00fatil para muchos, como ejemplo.<\/p>\n<p>Debo decir que la idea del proyecto no es m\u00eda, sino que <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/masterkit\/blog\/385281\/\">la obtuve de aqu\u00ed<\/a><\/noindex> y luego la adapt\u00e9 a <b>ShIoTiny<\/b>.<\/p>\n<h4>Primero entiende lo que quieres<\/h4>\n<p>\nEl proceso de perfeccionamiento es interminable. Y precisamente esta caracter\u00edstica ha arruinado muchas buenas ideas y proyectos. El desarrollador, en lugar de lanzar algo que aunque no sea perfecto, s\u00ed funcione, continuaba perfeccion\u00e1ndolo. Y lo mejor\u00f3 hasta que los competidores lo superaron, lanzando soluciones que aunque no eran perfectas (y a menudo simplemente malas), funcionaban.<\/p>\n<p>Por lo tanto, es muy importante saber d\u00f3nde poner el punto final en un proyecto. O, en otras palabras, necesitamos definir qu\u00e9 queremos obtener al final del proyecto a partir de lo que tenemos al principio. En espa\u00f1ol, existe una palabra corta y concisa, 'plan', que se utiliza para describir el documento que tiene como objetivo detallar el camino para crear algo, pero que, por alguna raz\u00f3n, traductores mentalmente limitados y gerentes defectuosos han comenzado a llamar 'hoja de ruta'. Pero eso ya es problema suyo.<\/p>\n<p>Nuestro plan ser\u00e1 el siguiente. Supongamos que tenemos un espacio cuya humedad puede aumentar considerablemente de vez en cuando. Por ejemplo, un ba\u00f1o o una cocina. La humedad es algo desagradable y la forma de combatirla es tan antigua como el mundo: ventilar el espacio. Hay muchas formas de ventilaci\u00f3n. Sin embargo, dejaremos de lado m\u00e9todos ex\u00f3ticos y pasados de moda, como usar negros con abanicos, y nos centraremos en un ventilador convencional. Los ventiladores son m\u00e1s baratos y m\u00e1s f\u00e1ciles de encontrar en nuestras tierras.<\/p>\n<p>En resumen, queremos controlar el ventilador: encenderlo y, por supuesto, apagarlo. M\u00e1s precisamente, queremos que se encienda y apague autom\u00e1ticamente cuando sea necesario.<\/p>\n<p>Solo queda definir: bajo qu\u00e9 condiciones debe encenderse el ventilador y bajo qu\u00e9 condiciones debe apagarse.<\/p>\n<p>Esto es bastante obvio: si la humedad supera cierto l\u00edmite predeterminado, el ventilador se enciende y extrae el aire; cuando la humedad vuelve a la normalidad, el ventilador se apaga.<\/p>\n<p>El lector atento se fijar\u00e1 de inmediato en la palabra 'predeterminado'. \u00bfPor qui\u00e9n lo ha establecido? \u00bfC\u00f3mo ha sido establecido?<\/p>\n<p>El umbral de humedad se puede establecer de varias maneras. Vamos a considerar dos de ellas: la primera, utilizando una resistencia variable, y la segunda, a trav\u00e9s de la red mediante el protocolo MQTT. Cada uno de estos m\u00e9todos tiene sus ventajas y desventajas, que se discutir\u00e1n m\u00e1s adelante.<\/p>\n<p>Para aquellos que no lo han entendido, aclaro que el 'umbral de humedad' es el nivel de humedad que, al ser superado, requiere que se encienda el ventilador.<\/p>\n<p>Siguiente pregunta: \u00bfdarle al usuario el derecho de encender el ventilador directamente? Es decir, independientemente del nivel de humedad, al presionar un bot\u00f3n. Esta opci\u00f3n la contemplamos. Despu\u00e9s de todo, el ventilador puede ser necesario no solo en condiciones de alta humedad, sino tambi\u00e9n para eliminar del ambiente, por ejemplo, olores desagradables conocidos popularmente como \"hedor\".<\/p>\n<p>As\u00ed que ya entendemos lo que queremos y, adem\u00e1s, un poco de c\u00f3mo funcionar\u00e1. Enumeremos brevemente todas las funciones de nuestro sistema de control de ventilaci\u00f3n:<\/p>\n<ul>\n<li> establecimiento del nivel umbral de humedad (dos opciones);<\/li>\n<li> medici\u00f3n del nivel de humedad;<\/li>\n<li> activaci\u00f3n autom\u00e1tica del ventilador;<\/li>\n<li> desactivaci\u00f3n autom\u00e1tica del ventilador;<\/li>\n<li> activaci\u00f3n manual del ventilador (al presionar un bot\u00f3n).<\/li>\n<\/ul>\n<p>\nAs\u00ed que, el plan est\u00e1 claro. Es necesario implementar todas las funciones mencionadas anteriormente en nuestro programa. Actuaremos bas\u00e1ndonos en este \"plan\". Para empezar, dibujaremos un esquema estructural del dispositivo.<\/p>\n<h4>Esquema estructural del dispositivo<\/h4>\n<p>\nHablando en t\u00e9rminos generales, tendremos dos de estos esquemas. El primero es para la opci\u00f3n en la que el nivel umbral de humedad se establece mediante un potenci\u00f3metro. El segundo esquema es para la opci\u00f3n en la que el nivel umbral de humedad se establece a trav\u00e9s de la red mediante el protocolo MQTT.<\/p>\n<p>Pero dado que estos esquemas solo diferir\u00e1n en un elemento: el potenci\u00f3metro \"establecimiento del nivel umbral de humedad\", dibujaremos solo un esquema estructural. Por supuesto, el esquema estructural de acuerdo con las normas GOST se ve diferente. Pero no nos dirigimos a ingenieros veteranos, sino a la nueva generaci\u00f3n. Por lo tanto, la claridad es m\u00e1s importante.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilaci\u00f3n de ambientes h\u00famedos (proyecto ejemplo).\" src=\"\/wp-content\/uploads\/2019\/08\/519f40496a8e459c22d69e7f0eaeee1d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAs\u00ed que, \u00bfqu\u00e9 vemos en el dibujo? El ventilador est\u00e1 conectado a un rel\u00e9 <b>Relay1<\/b> del controlador. <b>ShIoTiny<\/b>Me gustar\u00eda se\u00f1alar que el ventilador es un dispositivo que opera a alta tensi\u00f3n. Por lo tanto, si alguien va a hacer esto por s\u00ed mismo, tenga cuidado. Es decir, como m\u00ednimo, antes de meter sus dedos o instrumentos de medici\u00f3n en el circuito, desconecte al menos el ventilador. Y un segundo comentario. Si su ventilador es m\u00e1s potente que <b>250W<\/b>, no debe conectarlo directamente a <b>ShIoTiny<\/b> \u2014 solo a trav\u00e9s de un contactor.<\/p>\n<p>Ya entendimos lo del ventilador. Ahora, el bot\u00f3n de \"activaci\u00f3n manual\" del ventilador. Est\u00e1 conectado a la entrada <b>Input1<\/b>. Aqu\u00ed no hay m\u00e1s que explicar.<\/p>\n<p>Sensor de temperatura y nivel de humedad <b>DHT-11<\/b> (o <b>DHT-22<\/b> o sus equivalentes). Para su conexi\u00f3n, hay una entrada especial en el controlador <b>ShIoTiny<\/b>. Como se puede ver en la imagen, conectar este sensor tampoco representa ning\u00fan problema.<\/p>\n<p>Y, por \u00faltimo, la resistencia variable que establece el umbral de humedad. M\u00e1s precisamente, es un divisor, compuesto de resistencias variables y fijas. No hay problemas para conectarlo, pero aclaro que el ADC integrado est\u00e1 <b>ESP8266<\/b> dise\u00f1ado para un m\u00e1ximo de 1 Voltio. Por eso se necesita un divisor de voltaje de aproximadamente 5 veces.<\/p>\n<p>Y una vez m\u00e1s recuerdo que este divisor no es necesario si el umbral de humedad se establece a trav\u00e9s de la red mediante el protocolo MQTT.<\/p>\n<p>Comencemos a elaborar el algoritmo de funcionamiento del dispositivo en el editor ElDraw ShIoTiny. C\u00f3mo acceder a este editor se puede leer en art\u00edculos anteriores o en las instrucciones, cuyo enlace se encuentra al inicio del art\u00edculo.<\/p>\n<h4>Opci\u00f3n uno, la m\u00e1s sencilla<\/h4>\n<p>\nEmpecemos con lo b\u00e1sico: encender el rel\u00e9 <b>Relay1<\/b> cuando se supere el umbral de humedad durante un tiempo determinado.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilaci\u00f3n de ambientes h\u00famedos (proyecto ejemplo).\" src=\"\/wp-content\/uploads\/2019\/08\/e9f8d30627cf7cdbebccf863c2b2f808.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComo podemos ver, no hay nada complicado: solo cuatro nodos, sin contar los nodos de comentarios. <b>DHT11<\/b> \u2014 es el propio sensor de temperatura y humedad (se puede cambiar por <b>DHT22<\/b>).<\/p>\n<p>Constante <b>CONST<\/b> \u2014 el nivel umbral de humedad, en porcentaje.<\/p>\n<p>El comparador es un nodo que compara dos n\u00fameros y da como salida 1 si se cumple la condici\u00f3n dada y 0 si no se cumple.<\/p>\n<p>En nuestro caso, dicha condici\u00f3n ser\u00e1 <b>A&gt;B<\/b>, donde <b>A<\/b> \u2014 el nivel de humedad medido por el sensor, y <b>B<\/b> \u2014 el nivel umbral de la misma humedad.<\/p>\n<p>En cuanto el nivel de humedad medido (<b>A<\/b>) supere el umbral de humedad (<b>B<\/b>), inmediatamente en la salida del comparador <b>A&gt;B<\/b> aparecer\u00e1 1 y el rel\u00e9 se encender\u00e1. Y viceversa, tan pronto como el nivel de humedad vuelva a la normalidad (es decir, <b>A&lt;=B<\/b>), inmediatamente en la salida del comparador <b>A&gt;B<\/b> aparecer\u00e1 0 y el rel\u00e9 se apagar\u00e1.<\/p>\n<p>\u00bfTodo claro? A quienes no les queda claro, leerlo de nuevo o mirar la descripci\u00f3n del funcionamiento de los nodos en las instrucciones.<\/p>\n<p>Cabe mencionar que los datos del sensor <b>DHT11<\/b> se actualizan aproximadamente una vez cada 10 segundos. Por lo tanto, el rel\u00e9 no podr\u00e1 encenderse y apagarse m\u00e1s de una vez cada 10 segundos.<\/p>\n<p>Todo estar\u00eda bien, pero nos gustar\u00eda establecer el umbral de humedad mediante una resistencia variable. \u00a1No hay nada m\u00e1s sencillo!<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilaci\u00f3n de ambientes h\u00famedos (proyecto ejemplo).\" src=\"\/wp-content\/uploads\/2019\/08\/3042bda4fe16e3fbad2d3f46f0beccb4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSimplemente reemplazaremos el nodo constante por un nodo ADC. Despu\u00e9s de todo, fue al ADC donde conectamos el divisor de voltaje con la resistencia variable.<\/p>\n<p>La tensi\u00f3n en la entrada del ADC var\u00eda de 0 a 1 Voltio. La humedad en la salida del sensor var\u00eda de 0 a 100%. \u00bfC\u00f3mo los comparamos? Muy simple. El nodo ADC en <b>ShIoTiny<\/b> no solo mide la tensi\u00f3n en la entrada, sino que tambi\u00e9n puede <i><b>escalarla y desplazarla.<\/b><\/i>.<\/p>\n<p>Es decir, en la salida del nodo ADC1 habr\u00e1 un valor <b>X<\/b>, calculado a partir de la f\u00f3rmula <\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilaci\u00f3n de ambientes h\u00famedos (proyecto ejemplo).\" src=\"\/wp-content\/uploads\/2019\/08\/d01bc0ff4e6962252fced695d3894d32.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>, donde <img decoding=\"async\" alt=\"ShIoTiny: ventilaci\u00f3n de ambientes h\u00famedos (proyecto ejemplo).\" src=\"\/wp-content\/uploads\/2019\/08\/ac0bf727edb4c759d12268376ec6ad9b.jpeg\" style=\"display:block;margin: 0 auto;\" \/> \u2014 tensi\u00f3n en la entrada del ADC (de 0 a 1V); <b>k<\/b> \u2014 rango del ADC y <b>b<\/b>-desplazamiento del ADC. As\u00ed, si establecemos <b>k=100,<\/b> y <b>b=0,<\/b>, cuando var\u00ede <img decoding=\"async\" alt=\"ShIoTiny: ventilaci\u00f3n de ambientes h\u00famedos (proyecto ejemplo).\" src=\"\/wp-content\/uploads\/2019\/08\/0afbeb2e49d5a107bc54d6bbd87ba23c.jpeg\" style=\"display:block;margin: 0 auto;\" \/> en el rango de 0 a 1, el valor <b>X<\/b> en la salida del nodo ADC variar\u00e1 en un rango de 0 a 100. Es decir, num\u00e9ricamente igual al rango de cambio de humedad de 0 a 100%.<\/p>\n<p>O, dicho de manera simple, al girar el potenci\u00f3metro, se puede establecer un umbral de humedad de 0 a 100. La \u00fanica desventaja es que no hay dispositivos de visualizaci\u00f3n. Pero en la pr\u00e1ctica, si se hacen 6 divisiones en el potenci\u00f3metro 0%, 20%, 40%, 60%, 80%, 100%) \u2014 esto es suficiente para establecer el umbral de humedad.<\/p>\n<p>\u00bfC\u00f3mo establecemos los coeficientes <b>k<\/b> \u2014 rango del ADC y <b>b<\/b>-desplazamiento del ADC? \u00a1Es tan f\u00e1cil como un pastel! Simplemente haga clic con el rat\u00f3n en el nodo <b>ADC1<\/b> y aparecer\u00e1 de inmediato una ventana de configuraci\u00f3n. En ella puedes establecer todo lo que necesites. Para nuestro caso, ser\u00e1 una ventana como la de la imagen.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilaci\u00f3n de ambientes h\u00famedos (proyecto ejemplo).\" src=\"\/wp-content\/uploads\/2019\/08\/ff81992b4fe236f5de6d17ca6bf8187c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAs\u00ed que tenemos una soluci\u00f3n de trabajo b\u00e1sica. Comencemos a perfeccionarla.<br \/>\nPor cierto, la soluci\u00f3n m\u00e1s simple tiene una ventaja: no necesita internet. Es totalmente aut\u00f3noma.<\/p>\n<h4>Opci\u00f3n dos, conectamos un bot\u00f3n.<\/h4>\n<p>\nTodo funciona y todos est\u00e1n contentos. Pero hay un problema, no podemos encender la ventilaci\u00f3n de forma forzada. Ya hemos acordado que a la entrada <b>Input1<\/b> tendremos conectado un bot\u00f3n, que encender\u00e1 y apagar\u00e1 el ventilador de forma forzada, sin tener en cuenta el sensor de humedad.<br \/>\nEs hora de procesar este bot\u00f3n en nuestro esquema-programa.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilaci\u00f3n de ambientes h\u00famedos (proyecto ejemplo).\" src=\"\/wp-content\/uploads\/2019\/08\/673c274a5be680ce7c3ef1f9572f93fa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEl bloque de procesamiento del bot\u00f3n est\u00e1 resaltado con una l\u00ednea naranja. Es un contador de pulsaciones del bot\u00f3n, que se restablece a cero cuando su salida supera uno (l\u00ednea verde, salida del nodo <b>CT.<\/b>).<\/p>\n<p>Todo funciona por aqu\u00ed de manera sencilla, como antes: el contador <b>CT.<\/b> cuenta las pulsaciones del bot\u00f3n conectado a la entrada. <b>Input1<\/b>Es decir, el valor en la salida de este contador aumenta en 1 con cada pulsaci\u00f3n del bot\u00f3n.<\/p>\n<p>Tan pronto como este valor sea igual a dos (es decir, mayor que 1), inmediatamente en la salida del comparador. <b>A&gt;B<\/b> aparecer\u00e1 1. Y este 1 reiniciar\u00e1 el contador <b>CT.<\/b> a cero. Se refiere al comparador, el m\u00e1s bajo seg\u00fan el esquema.<\/p>\n<p>Por lo tanto, nuestro bot\u00f3n tiene dos estados: 0 y 1. Si necesit\u00e1ramos m\u00e1s estados (3 o 4 o m\u00e1s) ser\u00eda suficiente con cambiar la constante <b>CONST<\/b> de 1 a otro valor.<\/p>\n<p>As\u00ed que tenemos dos condiciones para encender el ventilador: superar un nivel de humedad establecido y presionar el bot\u00f3n una vez. Al cumplirse cualquiera de las condiciones, el ventilador se encender\u00e1. Y funcionar\u00e1 hasta que se presione el bot\u00f3n nuevamente <b>Y<\/b> o hasta que el nivel de humedad vuelva a la normalidad.<\/p>\n<p>Por supuesto, se podr\u00eda complicar a\u00fan m\u00e1s el algoritmo, pero no lo haremos, dejaremos espacio para la creatividad de los interesados.<\/p>\n<h4>Tercer opci\u00f3n, conect\u00e1ndonos a Internet<\/h4>\n<p>\nTodo lo que hemos descrito es perfectamente funcional. \u00bfY qu\u00e9 pasa con los 'puntos'? Cualquier hipster hacker que se respete se burlar\u00e1 de quien gira perillas y presiona botones, en lugar de controlar desde el smartphone. Girar perillas no est\u00e1 'de moda'. Pero deslizar el dedo por el smartphone, hasta hacer que se te sangre, eso es el pico del deseo del hipster hacker (nunca he podido distinguir a todos ellos \u2014 as\u00ed que si me equivoqu\u00e9, perd\u00f3n).<\/p>\n<p>Pero seamos ben\u00e9volos con estas personalidades mencionadas. Controlar a trav\u00e9s de Internet tiene beneficios reales. Primero, es visual. Hay un mont\u00f3n de aplicaciones para todas las plataformas que permiten, con un par de toques, crear un panel de control bastante \u00fatil para nuestro controlador Carlson. En segundo lugar, es posible monitorear remotamente el estado de la humedad en el ambiente. Y, en tercer lugar, puedes ver no solo lo que hace el ventilador \u2014 si gira o no, sino tambi\u00e9n cu\u00e1l es el nivel de humedad umbral establecido. Y si el ventilador se encendi\u00f3 autom\u00e1ticamente o manualmente. En general, todo lo que desees.<\/p>\n<p>Por supuesto, para un ventilador, es demasiado honor \u2014 tanta atenci\u00f3n. Pero esto es solo un ejemplo.<\/p>\n<p>As\u00ed que, para conectarnos a Internet, utilizaremos la tecnolog\u00eda <b>MQTT<\/b> y el protocolo del mismo nombre.<br \/>\nPara utilizar esta tecnolog\u00eda, necesitamos un <b>broker MQTT.<\/b>Es un servidor especial que atiende <b>clientes MQTT<\/b>, por ejemplo <b>ShIoTIny<\/b> y tu smartphone.<\/p>\n<p>La esencia de la tecnolog\u00eda <b>MQTT<\/b> consiste en que cualquiera de los clientes publica en el broker MQTT (servidor) datos arbitrarios bajo un nombre determinado (denominado <b>tema<\/b> en terminolog\u00eda <b>MQTT<\/b>). Otros clientes pueden suscribirse a datos arbitrarios bajo su nombre (<b>tema<\/b>) y recibir nuevos datos publicados. Es decir, todo el intercambio de datos funciona bajo el principio cliente-corredor-cliente.<\/p>\n<p>Yo <i><b>no lo har\u00e9<\/b><\/i> detenerme en los detalles. Hay muchas art\u00edculos y tutoriales en internet sobre c\u00f3mo funciona <b>MQTT<\/b> y qu\u00e9 programas existen para crear paneles de control. Simplemente mostrar\u00e9 c\u00f3mo podemos recibir y publicar datos usando <b>ShIoTiny<\/b>.<\/p>\n<p>Como corredor, utilic\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.cloudmqtt.com\/\">www.cloudmqtt.com<\/a><\/noindex>, pero el principio es el mismo en todas partes.<\/p>\n<p>As\u00ed que asumiremos que te has registrado en un <b>corredor MQTT<\/b>. En general, el corredor te proporcionar\u00e1 (o requerir\u00e1 que crees) un nombre de usuario y una contrase\u00f1a (para la autorizaci\u00f3n), as\u00ed como un puerto de conexi\u00f3n. Conectar <b>ShIoTiny<\/b> a <b>al corredor MQTT<\/b> se puede hacer de dos maneras: conexi\u00f3n normal y por <b>TLS<\/b> (<b>SSL<\/b>).<\/p>\n<p>Todos estos par\u00e1metros se <b>ShIoTiny<\/b> introducen en la pesta\u00f1a <b>Redes<\/b>, secci\u00f3n <b>Conexi\u00f3n MQTT al servidor<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilaci\u00f3n de ambientes h\u00famedos (proyecto ejemplo).\" src=\"\/wp-content\/uploads\/2019\/08\/3a16cbd07a64428568e7c03f178e87ef.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSi tu <b>broker MQTT.<\/b> no requiere autorizaci\u00f3n, no introduzcas nombre de usuario y contrase\u00f1a (deja estos campos vac\u00edos).<\/p>\n<p>Par\u00e1metro <b>Prefijo del tema MQTT<\/b> requiere una explicaci\u00f3n aparte.<\/p>\n<p>El prefijo de par\u00e1metros MQTT es una cadena que se a\u00f1ade al nombre del tema (<b>tema<\/b>) al publicar y suscribirse en el corredor MQTT. Para establecer <b>el prefijo MQTT<\/b> para tu controlador, simplemente debes introducirlo en el campo de entrada \u00ab<b>Prefijo del tema MQTT<\/b>\u00bb (\u00ab<b>Prefijo del tema MQTT<\/b>\u00bb). El prefijo siempre comienza con una barra (<b>\u00ab\/\u00bb<\/b>)! Si no introduces una barra en el campo de entrada, se a\u00f1adir\u00e1 autom\u00e1ticamente. En el prefijo no se pueden usar s\u00edmbolos <b>\u00ab#\u00bb<\/b> y <b>\u00ab+\u00bb<\/b>. No hay otras restricciones.<\/p>\n<p>Por ejemplo, si publicas el par\u00e1metro \u00ab<b>status<\/b>\u00bb (o te suscribes a \u00e9l), y tu prefijo est\u00e1 definido como \u00ab<b>\/shiotiny\/<\/b>\u00bb, entonces en el corredor este par\u00e1metro se publicar\u00e1 bajo el nombre \u00ab<b>\/shiotiny\/status<\/b>\u00bb. Si tienes definido un prefijo vac\u00edo, todos los par\u00e1metros en el corredor comenzar\u00e1n con una barra (<b>\u00ab\/\u00bb<\/b>): \u00ab<b>status<\/b>\u00bb se publicar\u00e1 como \u00ab<b>\/status<\/b>\u00bb.<\/p>\n<p>As\u00ed que asumimos que te has registrado en <b>corredor MQTT<\/b> y has recibido nombre de usuario, contrase\u00f1a y puerto. Luego, has configurado estos par\u00e1metros en la pesta\u00f1a <b>Redes<\/b>, secci\u00f3n <b>Conexi\u00f3n MQTT al servidor<\/b> del controlador. <b>ShIoTiny<\/b>.<\/p>\n<p>Asumimos que el prefijo se ha establecido en \u00ab<b>\/room\/<\/b>\u00bb.<\/p>\n<p>Empecemos por publicar el estado de todos los par\u00e1metros clave: rel\u00e9 <b>Rel\u00e91<\/b>, estado de encendido manual, estado de encendido autom\u00e1tico y, por \u00faltimo, los niveles de humedad umbral y actual. Y como extra, la temperatura en la habitaci\u00f3n. C\u00f3mo hacerlo, lo puedes ver en la imagen.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilaci\u00f3n de ambientes h\u00famedos (proyecto ejemplo).\" src=\"\/wp-content\/uploads\/2019\/08\/ed016ae37bb0cb1197e2e4fd649a7c4f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComo vemos, la \u00fanica diferencia con la versi\u00f3n anterior son los nodos \u00ab<b>Publicar MQTT<\/b>\u00bb. Teniendo en cuenta el prefijo, se publican los siguientes par\u00e1metros:<br \/>\n<img decoding=\"async\" alt=\"ShIoTiny: ventilaci\u00f3n de ambientes h\u00famedos (proyecto ejemplo).\" src=\"\/wp-content\/uploads\/2019\/08\/34b67dd1932f30de777a680802f71c59.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComo podemos ver, \u00a1todo el estado del sistema est\u00e1 a la vista!<\/p>\n<p>Pero queremos no solo ver, sino tambi\u00e9n gestionar. \u00bfQu\u00e9 hacer? Muy sencillo. Renunciaremos a establecer un nivel de humedad umbral mediante <b>ADC<\/b> y un potenci\u00f3metro, y estableceremos este nivel de humedad umbral a trav\u00e9s de <b>MQTT<\/b> directamente desde el smartphone!<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: ventilaci\u00f3n de ambientes h\u00famedos (proyecto ejemplo).\" src=\"\/wp-content\/uploads\/2019\/08\/c32d9ec2c1a082e0a1ead0b04526eba5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEliminamos el nodo ADC del esquema y conectamos tres nuevos nodos: <b>almacenamiento FLASH<\/b>, <b>restaurar FLASH<\/b> y <b>describir MQTT<\/b>.<\/p>\n<p>La funci\u00f3n del nodo <b>describir MQTT<\/b> es obvia: recibe el par\u00e1metro <b>\/room\/trigHset<\/b> (nivel de humedad umbral) del <b>br\u00f3ker MQTT<\/b>. Pero, \u00bfqu\u00e9 hace con los datos despu\u00e9s? Simplemente los entrega al nodo <b>almacenamiento FLASH<\/b>, que, a su vez, guarda estos datos en la memoria no vol\u00e1til bajo el nombre de <b>trigH<\/b>. Despu\u00e9s de eso, el nodo <b>restaurar FLASH<\/b> lee de la memoria no vol\u00e1til los datos llamados <b>trigH<\/b> y lo que sucede despu\u00e9s ya lo sabemos.<\/p>\n<p>\u00bfPor qu\u00e9 complicar tanto las cosas? \u00bfPor qu\u00e9 no simplemente entregar los datos obtenidos a la entrada del comparador? <\/p>\n<p>Como dec\u00eda el compa\u00f1ero S. Holmes \u2014 <i>\u00a1es elemental!<\/i>\u00a1Nadie garantiza que, tras encender su dispositivo, se conecte a <b>al corredor MQTT<\/b>. Y se debe medir la humedad. Adem\u00e1s, hay que encender el ventilador. Pero sin informaci\u00f3n sobre el nivel de humedad umbral, \u00a1eso es imposible! Por lo tanto, nuestro dispositivo al encenderse extrae el nivel de humedad umbral previamente guardado de la memoria no vol\u00e1til y lo utiliza para tomar decisiones. Y cuando se establezca la conexi\u00f3n con <b>el br\u00f3ker MQTT<\/b> y alguien publique un nuevo valor <b>\/room\/trigHset<\/b>, entonces se utilizar\u00e1 este nuevo valor.<\/p>\n<p>A partir de aqu\u00ed, pueden imaginar cualquier cosa que deseen. Por ejemplo, adem\u00e1s de la humedad, introducir tambi\u00e9n el control de la temperatura. O agregar un control \u201cinteligente\u201d de la iluminaci\u00f3n (nos quedan dos rel\u00e9s y dos entradas sin usar). \u00a1Todo est\u00e1 en sus manos!<\/p>\n<h4>Conclusi\u00f3n<\/h4>\n<p>\nAs\u00ed que hemos revisado algunos ejemplos de implementaci\u00f3n de un controlador sencillo basado en ShIoTiny. Puede que esto sea \u00fatil para alguien.<\/p>\n<p>Como siempre, sugerencias, deseos, preguntas, errores tipogr\u00e1ficos y otros \u2014 al correo: <b>shiotiny@yandex.ru<\/b><br \/>\n<br \/>Fuente: <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.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0437\u0438\u0441\u044b \u0438\u043b\u0438 \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\/es\/blog\/administrirovanie\/shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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: ventilaci\u00f3n de un espacio h\u00famedo (proyecto de ejemplo) | ProHoster","description":"Tesis principales o de qu\u00e9 trata esto.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/shiotiny-ventilyatsiya-vlazhnogo-pomeshheniya-proekt-primer","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/37423","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=37423"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/37423\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/28079"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=37423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=37423"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=37423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}