Después de varias semanas haciendo algunas pruebas, y siguiendo un poco con la temática de las ultima entradas, quiero presentar un termostato Wi-Fi que controlaremos al 100% con una app de móvil ( NETIO ) como en entradas anteriores.
Este sistema, nos permitirá encender y apagar la calefacción a distancia, y ajustar la temperatura de confort que queramos tener en casa…
En un pequeño display oled de 0,96 pulgadas podremos ver ,el estado de la calefacción ( encendida o apagada ) , el estado de la caldera ( funcionando o parada), la temperatura real y la temperatura objetivo que queremos alcanzar.
Para la alimentación del sistema, vamos a reciclar un cargador de móvil de 5v, y finalmente meteremos todo el sistema en una caja de 70×70 diseñada con 123ddesing, e impresa en plástico ABS.
Para llevar a cabo este proyecto, tendremos que echar mano de las dos entradas anteriores, con la primera, prepararemos la placa ESP8266, para poder cargarle el sketch usando el entorno de Arduino, y con la segunda, añadiremos dos puertos GPIO a la placa ESP8266, ya que necesitaremos 4 puertos, dos para la pantalla oled, uno para conectar el sensor de temperatura y uno para el rele de activación de la caldera.
Una vez terminado el proyecto, podremos controlar la calefacción desde donde queramos usando nuestro móvil o tablet, la única pega es que la app para poder realizar el control el de pago, desde la App Store, o desde Play Store.
El acceso desde el interior lo haremos usando nuestra ip interna, la cual saldrá en la pantalla oled al iniciar el termostato , y si queremos acceder desde el exterior de casa, tendremos que hacer uso de algún servicio de DDNS, como puede ser Dyndns o NOip. Solo tendremos que redireccioinar el puerto 90 a la ip del termostato.
Para empezar, aquí dejo dos esquemas para el montaje, uno de ellos tiene como relé, una shield que ya viene preparada para conectar directamente a la salida del puerto GPIO, y el otro un esquema para usar un relé de 6V con un transistor …(**)
Como podéis observar, la lista de componentes no es muy larga… Ni muy cara…
1x Módulo ESP8266
1x Pantalla OLED i2C de 0,96″
1x Módulo relé de 5v
1x Regulador de 3,3v
3x Resistencia de 4,7K
1x Cargador de móvil ( como alimentador del termostato )
** 1x Relé 6v
**1x Transistor BC547
**1x Resistencia 1K
**1x Diodo 1N4007
Ahora vamos a explicar paso a paso el montaje….
En primer lugar Yo he imprimido la caja que voy usar, de la que AQUI dejo el archivo STL para poder imprimirla
La versión terminada queda mas o menos así..
Lo primero que vamos a hacer, es desmontar el cargador del movil que vamos a usar para alimentar el termostato…
Soldaremos un cable a la entrada de 220V y otro a la salida de 5v para alimentar el circuito… para después meterlo en nuestra caja…
En el diseño de la caja, no están los agujeros para pasar los cables, ya que depende del alimentador que usemos, podremos hacer los agujeros donde mejor nos venga…
Ahora pegaremos la pantalla OLED en su sitio …
Para dejarla fija, he usado un par de gotas de cola caliente…
Seguidamente colocaremos el regulador de 3,3V, y el relé dejando la zona central para el resto de componentes…
He decidido colocar un zócalo para después insertar el módulo ESP8266, en vez de soldarlo directamente, ya que así puedo soltarlo para programarlo de nuevo…
Aquí ya están colocadas las resistencias y el transistor …
Y aqui ya están todos los componentes…
Solo quedan los dos hilos de conexión a la caldera…
No se aprecia en la foto anterior, pero el sensor de temperatura , al ser bastante sensible, lo he sacado por un lateral, para evitar que le afecte la temperatura de la electrónica …
Ya tenemos el termostato montado… Ahora hay que ponerlo a andar, y controlarlo…
El Sketch para programarlo podéis descargarlo con el paquete de archivos desde AQUI
Una vez que los conectamos a la corriente, en la pantalla aparecerá , el SSID de la red a la que estáis conectados junto con la IP …
Esa es la IP que tendremos que poner en la configuración del archivo .json de NetIO
Una vez configurada y cargada en la App podremos controlar nuestro termostato…
El archivo .json podéis descargarlo desde AQUI.
Hay un par de cosas dentro del código que quiero comentar, por si queréis hacer algún cambio…
Primero:
En estas lineas hay que colocar el SSID y el password de vuestra red WiFi:
Segundo:
Si queréis poner IP fija al termostato… hay que descomentar las siguientes lineas…
Tercero :
El margen de temperatura, es decir, lo que tarda en volver a activarse la caldera, desde que alcanzamos la temperatura objetivo, es de 0,2 ºC es decir … si ajustamos la temperatura a 20ºC y ya la hemos alcanzado, la caldera se apagará, y no se encenderá si la temperatura no baja a los 19,80ºC…
Este valor podremos cambiarlo desde la siguiente linea…
Y para finalizar…
Cuarto:
El ajuste de la temperatura.. es decir… una vez montado, lo he colocado junto a otro termostato durante algún tiempo para comprobar la diferencia de temperatura, en mi caso es de 2ºc, podría ser por el calor detectado de la electronica ( o simplemente es mucho mas preciso )… lo podremos ajustar al final del código, en la función de comprobar temperatura…
Espero que lo disfrutes….
Hola Sergio, sigo tus tutoriales y la verdad este está muy bueno, increible. Ahora tengo un problema a ver si me puedes ayudar. No quiero usar la interfaz de NetIo sino de Jquery Mobile. He creado ya la interfaz y los disparadores para la recepción de la información por AJAX. El tema es que tengo un problema con la parte de cambiar la temperatura y más concretamente con encender y apagar el relé.
Por ejemplo en el condicional de recepción de información al recibir X valor pasado por / responde con los datos solicitados. Pero e la hora de mandar un comando al ESP8266 para que haga una acción no llega a realizarla.
Por ejemplo si voy a apagar el relé:
(req.indexOf(«/estado») se supone que sería al ejecutar http://miip:90/estado no? O sea, si lo das cambia de estado a encendido o apagado. El tema es que al mirar por el terminal me devuelve información pero no enciende o apaga el módulo. Alguna idea? Muchas gracias por adelantado
En cuanto al entorno, no puedo ayudarte, no conozco jquery mobile…
Pero en la forma de activarlo, si es así…
Miip:puerto/estado
Ten en cuenta , que él rele solo se activa, si la temperatura objetivo es más baja que la temperatura real detectada…
Por lo de mas.. Has puesto todos los componentes? La pantalla oled, el detector ds18d20?
Se cambia de color el indicador de estado?
No, o sea, lo que he hecho ha sido eliminar el componente de OLED para sólo manejarlo desde la aplicación móvil. El problema podría venir debido a que he omitido el transistor, resistencia y diodo? Aunque trabaja a 3.3V al pasarle una batería con 1.5AMP deja activado por defecto el relé. O sea, el relé lo alimento a 5V pero para el IN1 lo paso al GPIO del ESP que comunica a 3.3V. Crees que por ahí estarían los tiros? Con un convertidor de nivel TXS0108E de 3.3V a 5V del GPIO al IN1 podría ser la solución? O crees que va por otro lado. Este sería el código que he modificado: http://pasted.co/c2678008
Haz la prueba conectando un led con una resistencia de 330 ohm , en vez de el rele.
No se puede conectar una carga tan baja ( el rele ) directamente a el módulo esp8266. Es posible que se queme, un adaptador de nivel te podría servir si es capaz de suministrar la corriente necesaria.
Si has modificado el esquema, imagino que habrás modificado las asignaciones de los pines en el código .
Si, si, modifiqué las asignaciones de código. Voy a hacer la prueba con el LED y si funciona usaré luego el adaptador de nivel. Gracias por adelantado
Pues no lo contigo. He probado con tu código completo igual y sigue sin funcionar. El tema es que cuando «recibo la orden de subir, baja o apagar» realizando la prueba vía ip miip:puerto/accion el navegador me da un ERR_EMPTY_RESPONSE
Hice la prueba con los led y funcionan perfectamente los GPIO, de hecho el 2 es al que tengo asignado el DS y me funciona bien, además en ambos sentidos. El problema es que por alguna razón no me funciona la lógica de subirT, bajarT, estado. No llega a ejecutarse, en cambio al enviar la temperatura, estado caldera, calefacción me retorna la información sin ningún problema.
Las pruebas las haces usando la aplicación que has hecho para el móvil, o usando el navegador ??
Las pruebas las realizo con el navegador claro. Una vez viendo que funcione bien cogería y lo haría con la aplicación. Pero primero debería funcionarme en el navegador. Este es tu código modificado http://pasted.co/c2678008 , el cual estoy usando pero aparentemente está todo bien. De hecho, como tal los GPIO0 y GPIO2 funcionan ya que he realizado la prueba con los led sin problemas. Y de hecho en el GPIO2 estoy usando el sensor de temperatura y este si me arroja sin ningún problema la temperatura. Es más, las peticiones que muestran información (/target, /real, /calefaccion, /1caldera) funcionan de miedo, el problema es cuando quier que actue, no lo hace. No lo hace ni con un led, menos con el relay. Cuando ejecuto un comando, por ejemplo el de estado en la web genera un error ya que no recibe parámetros. Ahí daría igual ya que puede no generar una respuesta pero si generar un trabajo como debería ser, pero tampoco lo hace.
Otra pregunta más. En tu código al realizar una actuación desde el navegador, como /estado /subirT … te funciona?? o sólo lo hace desde la aplicación.
O sea. Si yo pulso http://miip:puerto/estado esto automáticamente debería apagar o endender el relé. Y si yo pulso http://miip:puerto/subirT debería subir en un grado la temperatura de consigna, todo ello aunque no me responda nada el enlace, ya que salvo la respuesta que daría en el monitor «por ejemplo: Serial.println(contador);» en el caso de /subirT no emite respuesta alguna en el navegador. En el monitor si genera respuesta en todos los casos, pero ni subir, n ibaja ni apagar o encender hace que salte «digitalWrite(rele,LOW); o digitalWrite(rele,HIGH);»
Espera….
Acabo de caer en una cosa….
Puse un contador … Por qué la app netio , envía 3 veces la petición, pon a 1 el contador … Creo que ese es el problema…
En las líneas que pone, if (contador==3) … Cambia el 3 por un 1
Hola Sergio, gracias por preocuparte. A ver, he realizado los cambio en los condicionales.., y si, funciona pero a medias jaja. O sea, ya cuando se apaga, cambia el estado de «Apagada Caldera o Encendida Caldera» y también el color rojo o verde para el botón que indica el estado. Además, cuando doy a subirT o bajarT si que baja o sube la temperatura pero el «número» ya que el actuador sigue sin apagarse o encenderse jeje. Al menos ya casi hemos corregido todo, ahora queda lo más importante, que se encienda o apague el actuador jaja. Alguna idea?
Esta sería la versión actualizada y que debería funcioan pero lo no llega a hacerlo, buff, me estoy volviendo loco jeje
http://pasted.co/d892c1a9
Solo se me ocurre que elimines del principio todo lo relacionado con el lcd…
char *dtostrf(double val, signed char width, unsigned char prec, char *s);
char str_temp[6];
char str_target[6];
char target_2[10];
char temperature[10];
dtostrf(temp, 4, 2, str_temp);
sprintf(temperature, «%s»» «, str_temp);
eliminalo y prueba….
Hola Sergio, perdona la demora pero no pude hacer pruebas hasta ahora, muy poco tiempo libre he tenido.
Ya lo probé y funcionó perfectamente. Hice algunos cambios, pero básicamente la única diferencia que hizo que me funcionase o no fue eliminar esas variables y formato. No sé porqué narices fallaba con eso, pero realmente así fue. Te paso Me funcionó perfecto en este instante.
Muchas gracias por todo, de verdad!!
Me alegro de que ya te funcione…
Puedes colgar el código , por si alguien quisiera hacer la misma modificación. El sketch y el control desde el móvil …
si prefieres mándamelo a través del formulario de contacto, y lo posteo modificando el artículo …
ok, perfecto. En un rato preparo el control desde el móvil con los códigos que actúan sobre el sketch y te lo envío para que lo publiques.
Ya te mandé el formulario de contacto con lo dicho.. Un saludo
Ok! Gracias!
Buenas noche.
Muchas gracias por tu tiempo y en compartirlo con los demás.
estoy montando este proyecto y al compilar me da error
error de compilación en tarjeta Generic ESP8266 Module
estoy utilizando Arduino 169.
si compilo y cargo el ejemplo de gpio que tienes todo sin problemas
he puesto las librerías de dallas y OneWire como si fueran de arduino
no se que puede ser el error no me da mucha información.
Muchas gracias.
el código es para un esp8266, no te va a compilar ( creo que las librería del ejemplo son exclusivas para el esp8266)
tendrás que modificarlo, además, esa placa no lleva wifi no?
pon algo del error para hacernos una idea…
La tarjeta que tengo es la esp8266 y le he cargado el FW en que directorio se colocan las librerías como si fueran de Arduino ??
si compilo tu ejemplo para 2 gpio funciona bien es al compilar el termostato supongo que es porque no encuentra las librería.
Gracias.
Acabo de probar y da error la librería wire….
No sé que puede ser…. lo revisaré …
Solucionado:
problema de colocar las librerías, en su sitio adecuado en el directorio de arduino
Gracias.
Es cierto da un error, ya encuentra las librerias, pero en la de ONEwire da error
ATENCION: Categoría » en Librería OneWire no es válida. configurando a ‘Uncategorized’
Versión de Arduino 1.6.9
Un saludo
y muchas Gracias por tu tiempo.
Perfecto, me alegro de que funcione,
Buenas tardes.
solucionado el problema en compilación con librería OneWired.
Versión de arduino 1.6.9
S.O. Windows 10
He descargado la libreria de :
https://github.com/PaulStoffregen/OneWire
la he instalado en el directorio de librerias de arduino.
He compilado y sin problemas.
Me falta probara el circuito completo.
Un saludo.
Y muchas Gracias
Perfecto!
hola, para esto hace falta algun arduino específico? con el arduino uno vale o tiene que ser el yun?
gracias
Como dice el titulo y se ve en el esquema, hay que usar un modulo esp8266 programado usando el ide de arduino
hola he seguido tu proyecto, me funciona todo menos en la aplicación que no me deja subir ni bajar la temperatura, solo me muestra la temperatura real y objetivo, puedes echarme una mano??. Gracias
Si no esta encendido , no puedes ajustar la temperatura…
Se enciende y se apaga…??
no el rele esta apagado siempre, la pantalla marca la temperatura real y la de objetivo al igual que en la aplicación, es aquí donde no me deja activar el rele ni subir n bajar la temperatura, solo se pone de un gris diferente
Eso es que falla la conexion entre el esp8266 y el movil
pero en el móvil me da el mismo valor que en la pantalla.
Hola, el enlace de descarga no funciona, puedes actualizarlo porfa.
Gracias por compartir tus prouectos.
Están en la repo de github…
Enlace arriba a la derecha…
Que guapo el proyecto, yo he hecho algo parecido y con una app creada con app inventor 2 gestiono el encendido/apagado de la caldera y la temperatura, a la vez que monitorizo humedad y temperatura usando el código JSON que saco de thingspeak. Luego mediante noip.com redirecciono la ip y así lo tengo desde el móvil todo. El tema de sacar dos puertos más al ESP8266 me es imposible con el soldador que tengo, menos con el pulso, jaja….
Ahora estoy teniendo problemas con la patilla con la que muevo el relé, puesto que se me desconecta, creo que es tema de alimentación, voy a seguir investigando. Pero lo dicho, tu proyecto muy chulo…
Una sugerencia, yo el sensor de temperatura lo he colocado abajo, así el calor que genera, sobre todo el ESP8266 no afectará al sensor.
Siempre se puede usar un esp8266 03, que dispone de mas pines, la forma de grabarlo es la misma… como pongo en
Oye disculpa, pero el proyecto te es estable??, a mi el ESP8266 me da bastantes problemas, se reinicia con bastante frecuencia…y he probado con varios módulos….
A mi me funcionó de forma correcta ( ahora ya no lo tengo conectado)
Comprueba que lee los datos de forma correcta, y se comunica bien con la app que has hecho,
Hola. Estoy haciendo este proyecto, pero no puedo descargarme el codigo.
Podrias mandarmelo? Gracias!
Seccion de descargas
buenas noches , consulta como hago para programar el modulo esp8266? sin usar la placa arduinooo?
Usando un programador ftdi…
En el blog tienes una entrada que explica como se programa
Yo estoy intentando hacerlo con el modelo que tiene el relé de 5V en montura keyes, pero no me entra en la caja que he imprimido… 😦
Creo que esa placa es un poco grande…
Hola!
Necesito ayuda con mi proyecto, es para un termo solar, necesito que arranque la bomba de retroalimentación a 60°C a 65°C y apague a los 50°C y en caso de subir mucho la temperatura que haga parada de emergencia. También debe controlar la temperatura media durante el día y sí no supera esa media que encienda el termo eléctrico durante media hora o así.
Saludos y muchas gracias
Hola sergio,decir que muy buen proyecto y lo estoy haciendo pero tengo problemas,
lo estoy montando con mcu node 8266 las conexiones estan correctas con la pantalla oled me da todo correcto pero con la aplicacion Netio.. no hay manera de que enlace,me da alguna lectura de temperatura pero se corta y se queda clavada.
Con el monitor serie de arduino empieza a mandar comandos pero se queda anclado y no envia ni recibe,He cambiado baudios 9600,115200 ect pero nada.
me tiene loco.
Alguna idea……..gracias.
Buenas noches, nos gustaría saber si hay forma de obtener la programación del termostato, ya que cuando queremos acceder esta caído
Sección de descargas
Hola , una pregunta, tus archivos de codigo no me abren, tenes otro link? saludos
Sección de descargas