{"id":1804,"date":"2018-11-13T18:20:05","date_gmt":"2018-11-13T23:20:05","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/edelros\/?p=1804"},"modified":"2026-08-04T21:59:11","modified_gmt":"2026-08-05T02:59:11","slug":"wifi-puerta-ventana-archivo-ino","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/girni\/wifi-puerta-ventana-archivo-ino\/","title":{"rendered":"WiFi - Puerta-Ventana: Archivo.ino"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">1. Instrucciones en Arduino IDE<\/h2>\n\n\n\n<p>Como la versi\u00f3n del ESP8266-01 no dispone de muchos pines de trabajo, se define el uso de los pines como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>monitor de operaci\u00f3n del dispositivo: LED interno, GPIO1 (TXD)<\/li>\n\n\n\n<li>lectura de sensor en GPIO3, pin 7, mismo que es configurado como RXD en modo PROG.<\/li>\n<\/ul>\n\n\n\n<p>Por el uso en operaci\u00f3n de los pines de comunicaci\u00f3n Serial (GPIO1 y GPIO3) se descartan las lineas Serial.print() convirti\u00e9ndolas en comentarios \/\/. La instrucci\u00f3n para encender el LED de monitor tambi\u00e9n activa para TXD, por lo que de tener conectado la comunicaci\u00f3n serial podr\u00eda mostrar caracteres ilegibles.<\/p>\n\n\n\n<p>El dise\u00f1o realizado permite conectar un m\u00f3dulo USB-TTL a la placa PCB. Revise la configuraci\u00f3n de las botoneras Reset, PROG y los Jumpers para realizar la carga del <strong><em>archivo.ino<\/em><\/strong>. Si la subida del archivo.ino al m\u00f3dulo ESP01&nbsp; se realiza fuera de la placa PCB revise nuevamente la configuraci\u00f3n de PCB para que trabaje en modo \"Ejecutar\" luego de insertar el m\u00f3dulo ESP01.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2. Funciones repetitivas<\/h4>\n\n\n\n<p>Para las acciones repetitivas como la conexi\u00f3n a WIFI y comunicaci\u00f3n por MQTT se realizan en funciones para simplificar las instrucciones en la configuraci\u00f3n inicial (setup) y la ejecuci\u00f3n principal (loop).<\/p>\n\n\n\n<p>Al inicio se definen las librer\u00edas y los valores para la conexi\u00f3n WIFI y los datos para comunicarse con el servidor MQTT-Mosquitto implementado en el Raspberry. Revisar de ser necesario al secci\u00f3n Broker.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\n\/* ESP8266 Sensor de Puerta. edelros@espol.edu.ec\n * \u00a0Para usar, actualice las secciones de:\n * \u00a0- WIFI:Router, MQTT:Servidor, MQTT:Dispositivo\n * \u00a0ESP-01 al usar GPIO1 y GPIO3,(Tx,Rx), NO USE Serial.print()\n*\/\n#include &lt;ESP8266WiFi.h&gt;\n#include &lt;PubSubClient.h&gt;\n\n\/\/ WIFI: conexi\u00f3n a Router\nchar* ssid = &quot;xxxx&quot;;\nchar* password = &quot;xxxx&quot;;\n\n\/\/ MQTT: Servidor\nchar* MQTT_IP = &quot;192.168.xx.xx&quot;;\nuint16_t MQTT_puerto = 1883;\nchar* MQTT_usuario = &quot;usuarioprueba&quot;;\nchar* MQTT_contrasena = &quot;usuarioclave&quot;;\n\n\/\/ MQTT: Dispositivo Interruptor\nchar* MQTT_ID = &quot;oficina_puerta1&quot;;\nchar* MQTT_TOPIC = &quot;oficina\/puerta1\/estado&quot;;\nchar MQTT_SensorEstado&#x5B;10] = &quot;OFF&quot;;\nvolatile boolean mqtt_desconectado = true;\nchar* sensor_ON \u00a0= &quot;ON&quot;;\nchar* sensor_OFF = &quot;OFF&quot;;\n\n\/\/ Sensor Interruptor\nconst uint8_t sensor_pin = 1;\nvolatile boolean sensor_estado = false;\nvolatile boolean sensor_bandera = true;\n\n\/\/ Actuador LED\nvolatile boolean actuador_estado = false;\nconst uint8_t LED_actuador = 2;\n\n\/\/ LED monitor \/\/interno: ESP01-pin=1, ESP07-pin=2\nconst uint8_t LED_pin=0;\n\n\/\/ Clientes WiFi y MQTT\nWiFiClient wifiClient;\nPubSubClient mqttclient(wifiClient);\n\nvoid setup() {\n \u00a0\/\/ SENSOR Interruptor\n \u00a0pinMode(sensor_pin, INPUT);\n \u00a0attachInterrupt(digitalPinToInterrupt(sensor_pin),sensorActivado,CHANGE);\n \u00a0\n \u00a0\/\/ ACTUADOR LED\n \u00a0pinMode(LED_actuador, OUTPUT);\n \u00a0\/\/ LED monitor, Enciende en LOW\n \u00a0pinMode(LED_pin, OUTPUT);\n\n \u00a0\/\/ conexi\u00f3n WIFI y MQTT\n \u00a0inicia_wifi();\n \u00a0if (WiFi.status() == WL_CONNECTED){\n \u00a0\u00a0\u00a0inicia_mqtt();\n \u00a0\u00a0\u00a0}\n \u00a0}\n\nvoid loop() {\n \u00a0\/\/ Revisa cambios en interruptor\n \u00a0if (sensor_bandera){\n \u00a0\u00a0\u00a0\u00a0\u00a0delay(10);\n \u00a0\u00a0\u00a0\u00a0\u00a0sensor_estado = digitalRead(sensor_pin);\n \u00a0\u00a0\u00a0if (sensor_estado==LOW){\n \u00a0\u00a0\u00a0\u00a0\u00a0actuador_estado = true;\n \u00a0\u00a0\u00a0\u00a0\u00a0}\n \u00a0\u00a0\u00a0if (sensor_estado ==HIGH){\n \u00a0\u00a0\u00a0\u00a0\u00a0actuador_estado = false;\n \u00a0\u00a0\u00a0\u00a0\u00a0}\n \u00a0\u00a0\u00a0ACTUADORactivaestado();\n \u00a0\u00a0\u00a0publica_estado();\n \u00a0\u00a0\u00a0sensor_bandera = false;\n \u00a0\u00a0\u00a0}\n \u00a0yield(); \/\/ procesa wifi\n \u00a0\n \u00a0if (WiFi.status() != WL_CONNECTED){\n \u00a0\u00a0\u00a0inicia_wifi();\n \u00a0\u00a0\u00a0}else{\n \u00a0\u00a0\u00a0if (mqttclient.connected()==false){\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mqtt_desconectado = true;\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0inicia_mqtt(); \/\/ reintento\n \u00a0\u00a0\u00a0\u00a0\u00a0}\n \u00a0\u00a0\u00a0if (mqttclient.connected()==true){\n \u00a0\u00a0\u00a0\u00a0\u00a0if (mqtt_desconectado==true){\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0publica_estado();\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mqtt_desconectado=false;\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n \u00a0\u00a0\u00a0\u00a0\u00a0mqttclient.loop();\n \u00a0\u00a0\u00a0\u00a0\u00a0}\n \u00a0\u00a0\u00a0}\n \u00a0yield(); \/\/ procesa wifi\n}\n\n\/\/ ISR interrupci\u00f3n activada\nICACHE_RAM_ATTR void sensorActivado(){\n \u00a0sensor_bandera = true;\n \u00a0}\n\n\/\/ Actuador activar estado\nvoid ACTUADORactivaestado(){\n \u00a0if (actuador_estado){\n \u00a0\u00a0\u00a0\u00a0\u00a0\/\/ LED actuador ilumina en apagado\n \u00a0\u00a0\u00a0\u00a0\u00a0digitalWrite(LED_actuador, HIGH);\n \u00a0\u00a0\u00a0}else{\n \u00a0\u00a0\u00a0\u00a0\u00a0digitalWrite(LED_actuador, LOW);\n \u00a0\u00a0\u00a0}\n\n \u00a0}\n\n\/\/ Publicar el estado del dispositivo\nvoid publica_estado() {\n \u00a0\u00a0\u00a0if (actuador_estado){\n \u00a0\u00a0\u00a0\u00a0\u00a0snprintf (MQTT_SensorEstado,10, sensor_ON);\n \u00a0\u00a0\u00a0}else{\n \u00a0\u00a0\u00a0\u00a0\u00a0snprintf (MQTT_SensorEstado,10, sensor_OFF);\n \u00a0\u00a0\u00a0}\n \u00a0\u00a0\u00a0if (mqttclient.connected()==true){\n \u00a0\u00a0\u00a0\u00a0\u00a0mqttclient.publish(MQTT_TOPIC,MQTT_SensorEstado,true);\n \u00a0\u00a0\u00a0}else{\n \u00a0\u00a0\u00a0\u00a0\u00a0mqtt_desconectado = true;\n \u00a0\u00a0\u00a0}\n}\n\nvoid inicia_wifi(){\n \u00a0int intentos = 10;\n \u00a0int cuenta = 0;\n \u00a0WiFi.mode(WIFI_STA);\n \u00a0WiFi.begin(ssid, password);\n \u00a0\n \u00a0while ((WiFi.status() != WL_CONNECTED) &amp;&amp; (cuenta&lt;intentos)){\n \u00a0\u00a0\u00a0cuenta = cuenta+1;\n \u00a0\u00a0\u00a0\/\/ Parpadeo de Monitor enciende en LOW\n \u00a0\u00a0\u00a0digitalWrite(LED_pin, LOW);\n \u00a0\u00a0\u00a0delay(300);\n \u00a0\u00a0\u00a0digitalWrite(LED_pin, HIGH);\n \u00a0\u00a0\u00a0delay(200);\n \u00a0\u00a0\u00a0}\n \u00a0}\n\nvoid inicia_mqtt(){\n \u00a0int intentos = 2;\n \u00a0int cuenta = 0;\n \u00a0\n \u00a0mqttclient.setServer(MQTT_IP, MQTT_puerto);\n \u00a0mqttclient.connect(MQTT_ID, MQTT_usuario, MQTT_contrasena);\n \u00a0\n \u00a0while (!mqttclient.connected() &amp;&amp; (cuenta&lt;intentos)) {\n \u00a0\u00a0\u00a0cuenta = cuenta + 1;\n \u00a0\u00a0\u00a0\/\/ Parpadeo de Monitor enciende en LOW\n \u00a0\u00a0\u00a0digitalWrite(LED_pin, LOW);\n \u00a0\u00a0\u00a0delay(200);\n \u00a0\u00a0\u00a0digitalWrite(LED_pin, HIGH);\n \u00a0\u00a0\u00a0delay(200);\n \u00a0\u00a0\u00a0}\n \u00a0publica_estado();\n \u00a0}\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>1. Instrucciones en Arduino IDE Como la versi\u00f3n del ESP8266-01 no dispone de muchos pines de trabajo, se define el uso de los pines como: Por el uso en operaci\u00f3n de los pines de comunicaci\u00f3n Serial (GPIO1 y GPIO3) se descartan las lineas Serial.print() convirti\u00e9ndolas en comentarios \/\/. La instrucci\u00f3n para encender el LED de [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1429788],"tags":[1457944],"class_list":["post-1804","post","type-post","status-publish","format-standard","hentry","category-wifi-puerta-ventana","tag-iot-wifi"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/1804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/comments?post=1804"}],"version-history":[{"count":7,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/1804\/revisions"}],"predecessor-version":[{"id":4868,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/1804\/revisions\/4868"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/media?parent=1804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/categories?post=1804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/tags?post=1804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}