proyecto de la instalación domótica de una vivienda

132
Proyecto de la instalación domótica de una vivienda unifamiliar con raspberry pi situada en el término municipal de Onteniente (Valencia) MEMORIA PRESENTADA POR: Sergio Bodí Pastor Convocatoria de defensa: [septiembre 2020] GRADO DE [INGENIERÍA ELÉCTRICA]

Upload: others

Post on 16-Nov-2021

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Proyecto de la instalación domótica de una vivienda

Proyecto de la instalación

domótica de una vivienda

unifamiliar con raspberry pi

situada en el término municipal de

Onteniente (Valencia)

MEMORIA PRESENTADA POR: Sergio Bodí Pastor

Convocatoria de defensa: [septiembre 2020]

GRADO DE [INGENIERÍA ELÉCTRICA]

Page 2: Proyecto de la instalación domótica de una vivienda

Resumen

Este proyecto de fin de grado (TFG) del grado en ingeniería eléctrica trata sobre la automatización de una casa domótica mediante el protocolo MQTT, utilizando una Raspberry Pi como broker MQTT y una serie de microcontroladores llamados ESP32 distribuidos por la casa que actuarían como clientes del anteriormente mencionado protocolo. En la Raspberry Pi se ejecuta en segundo plano el bróker MQTT Mosquitto usado para la comunicación con los diferentes microcontroladores donde se adquiere las señales de los diferentes sensores conectados a estos y Node-RED para enlazar y programar las acciones.

Palabras clave

Las palabras clave son las siguientes: MQTT, ESP32, Raspberry Pi, Node-RED, IoT, Microcontrolador.

Abstract This thesis of the bachelor degree of electrical engineering is about the home automation based in the MQTT protocol, using a Raspberry Pi as a broker MQTT and a set of microcontrollers called ESP32, distributed around the house, as clients of the previously called MQTT protocol. In the Raspberry Pi is executed on the background the MQTT broker Mosquitto used for the communication with the microcontrollers, where the microcontrollers get the signals of the diferents sensors connected to them and Node-RED to link and program the actions.

Key words The key words are the following ones: MQTT, ESP32, Raspberry Pi, Node-RED, IoT, Microcontroller.

Page 3: Proyecto de la instalación domótica de una vivienda

Contenido 1. Introducción .............................................................................................................................. 5

1.1 Antecedentes y justificación del proyecto .......................................................................... 5

1.2 Objetivos del proyecto ........................................................................................................ 6

2. Aspectos previos ....................................................................................................................... 7

2.1 MQTT ................................................................................................................................... 7

2.1.1 Introducción a MQTT ................................................................................................... 7

2.1.2 Por qué MQTT .............................................................................................................. 8

2.1.3 Cliente MQTT.............................................................................................................. 10

2.1.4 Bróker MQTT .............................................................................................................. 10

2.1.5 Establecimiento de la conexión ................................................................................. 10

2.1.6 Topic ........................................................................................................................... 12

2.2 Mosquitto .......................................................................................................................... 13

3. Software .................................................................................................................................. 14

3.1 Raspberry Pi OS ................................................................................................................. 14

3.2 Mosquitto .......................................................................................................................... 21

3.2.1 Instalación de mosquitto ............................................................................................ 21

3.2.2 Estructura de topics ................................................................................................... 26

3.3 Node-RED .......................................................................................................................... 28

3.3.1 Programación Node-RED Entrada/Recibidor ............................................................. 29

3.3.2 Programación Node-RED Habitación 1 ...................................................................... 30

3.3.3 Programación Node-RED Baño1................................................................................. 31

3.3.4 Programación Node-RED Habitación 2 ...................................................................... 32

3.3.5 Programación Node-RED Comedor ............................................................................ 33

3.3.6 Programación Node-RED Patio y Baño2 ..................................................................... 35

3.3.6 Programación Node-RED Cocina ................................................................................ 37

3.4 ESP32 ................................................................................................................................. 38

3.4.1 Programación ESP32 Entrada/Recibidor .................................................................... 38

3.4.2 Programación ESP32 Habitación1 .............................................................................. 44

3.4.3 Programación ESP32 Baño1 ....................................................................................... 49

3.4.4 Programación ESP32 Habitación2 .............................................................................. 54

3.4.5 Programación ESP32 Comedor .................................................................................. 59

3.4.6 Programación ESP32 Patio ......................................................................................... 68

3.4.7 Programación ESP32 Cocina/Baño2 ........................................................................... 72

4. Hardware ................................................................................................................................. 78

4.1 Circuitos de acondicionamiento ........................................................................................ 78

Page 4: Proyecto de la instalación domótica de una vivienda

4.1.1 Sensor PIR ................................................................................................................... 78

4.1.2 Sensor de gas MQ2 ..................................................................................................... 80

4.1.3 Sensor de temperatura LM35 .................................................................................... 83

4.1.4 Dimmer ....................................................................................................................... 87

4.1.5 Actuador todo-nada ................................................................................................... 89

5.Presupuesto ............................................................................................................................. 91

6.Planos y esquemas ................................................................................................................... 92

Page 5: Proyecto de la instalación domótica de una vivienda

1. Introducción 1.1 Antecedentes y justificación del proyecto El internet de las cosas (Internet of Things o IOT) es un concepto que se refiere a una interconexión digital de objetos cotidianos con internet. Es, en definitiva, la conexión de internet más con objetos que con personas. Constituye un cambio radical en la calidad de vida de las personas en la sociedad, ofrece una gran cantidad de nuevas oportunidades de acceso a datos, servicios específicos en la educación, seguridad, asistencia sanitaria y en el transporte, entre otros campos. El término internet de las cosas se usa con una denotación de conexión avanzada de dispositivos, sistemas y servicios que van más allá del tradicional M2M (máquina a máquina) y abarca una amplia variedad de protocolos, dominios y aplicaciones. La capacidad de conectar dispositivos embebidos con capacidades limitadas de CPU, memoria y energía significa que IoT puede tener aplicaciones en casi cualquier área. Estos sistemas podrían encargarse de recolectar información en diferentes entornos: desde ecosistemas naturales hasta edificios y fábricas, por lo que podrían utilizarse para monitoreo ambiental y planeamiento urbanístico. El sistema tiene una arquitectura orientada a eventos, construida de abajo a arriba (basada en el contexto de procesos y operaciones, en tiempo real) y tendrá en considera cualquier nivel adicional. Por lo tanto, el modelo orientado a eventos y el enfoque funcional coexistirán con nuevos modelos capaces de tratar excepciones y evolución insólita de procesos. https://es.wikipedia.org/wiki/Internet_de_las_cosas Durante el desarrollo de la tecnología IoT has surgido una serie de protocolos de comunicación, pero en este proyecto nos vamos a centran solamente en una, MQTT (Message Queue Telemetry Transport).

Page 6: Proyecto de la instalación domótica de una vivienda

1.2 Objetivos del proyecto El propósito del presente proyecto es el desarrollo de una instalación domótica básica. Se pretende conectar una serie de sensores y dispositivos a un microcontrolador llamado ESP32, que tiene WiFi integrado. Este microcontrolador envía la información de los sensores al bróker (Raspberry Pi) mediante el protocolo MQTT estableciendo una comunicación M2M (machine-to-machine). En la Raspberry Pi mediante Node-RED que es una herramienta de desarrollo basada en flujo para programación visual, se automatizan las acciones dependiendo de la información proporcionada por los sensores y mediante la comunicación MQTT se comunica con los microcontroladores para que estos actúen sobre sus salidas, a las que hay conectado diferentes circuitos para poder actuar sobre otras cargas como iluminación y los motores de las persianas.

Page 7: Proyecto de la instalación domótica de una vivienda

2. Aspectos previos

2.1 MQTT

2.1.1 Introducción a MQTT Para dispositivos de Internet de las Cosas (IoT) es necesaria la conexión a Internet. La conexión a Internet permite que los dispositivos trabajen entre ellos y con servicios backend. El protocolo de red subyacente de internet es TCP/IP. MQTT (Message Queue Telemetry Transport), que está construido sobre la pila de TCP/IP, se ha convertido en el estándar para las comunicaciones de IoT. Originariamente, MQTT fue inventado y desarrollado por IBM a finales de los 90. Su aplicación original era conectar sensores de los oleoductos con satélites. Tal como sugiere su nombre, es un protocolo de mensajería que soporta la comunicación asíncrona entre las partes. Un protocolo de mensajería asíncrona disocia al emisor y al receptor de los mensajes tanto en espacio como en tiempo, y, por lo tanto, es escalable en entornos de red no confiables. A pesar de su nombre, no tiene nada que ver con las colas de mensajería, y, en cambio, utiliza un modelo de publicación suscripción. A finales del 2014, se convirtió oficialmente en un estándar abierto de OASIS, y se soporta en lenguajes de programación populares mediante la utilización de varias implementaciones de código abierto.

Page 8: Proyecto de la instalación domótica de una vivienda

2.1.2 Por qué MQTT MQTT es un protocolo de red liviano y flexible que logra el equilibrio adecuado para los desarrolladores de IoT:

• El protocolo liviano le permite implementarse en hardware de dispositivos altamente limitados y en redes con ancho de banda de alta latencia/limitado.

• Su flexibilidad hace que pueda soportar varios escenarios de aplicaciones para dispositivos y servicios de IoT.

La mayor parte de los desarrolladores ya están familiarizados con los servicios web de HTTP. Así, ¿por qué no hacer que los dispositivos de IoT se conecten con servicios web? El dispositivo podría enviar sus datos como una solicitud HTTP y recibir actualizaciones del sistema como la respuesta de HTTP. Este patrón de solicitud y respuesta tiene algunas limitaciones graves:

• HTTP es un protocolo sincronizado. El cliente espera a que el servidor responda. Los navegadores web tienen este requisito, que trae consigo el costo de una mala escalabilidad. En el mundo de IoT, el gran número de dispositivos y muy probablemente una red no confiable, o de alta latencia, han hecho que la comunicación sincronizada sea problemática. Un protocolo de mensajería asíncrona es mucho más adecuado para las aplicaciones de IoT. Los sensores pueden enviar lecturas y dejar que la red descubra la ruta y el momento óptimos para la entrega de servicios de destino.

• El HTTP tiene una dirección. El cliente debe iniciar una conexión. En una aplicación de IoT los dispositivos y los sensores son normalmente los clientes, lo que significa que no pueden recibir comandos de la red de forma pasiva.

• HTTP es un protocolo 1-1. El cliente hace una solicitud y el servidor responde. Transmitir un mensaje a todos los dispositivos de la red, lo que es un caso de uso habitual en las aplicaciones IoT, es algo difícil y caro.

• HTTP es un protocolo pesado con muchas cabeceras y reglas. No es adecuado para redes congestionadas.

Por las razones anteriores, la mayor parte de los sistemas escalables de alto rendimiento utilizan un bus de mensajería asíncrona, en vez de servicios web, para intercambiar datos internamente. De hecho, el protocolo de mensajería que se utiliza más habitualmente en los sistemas de middleware empresarial se llama AMQP (Advanced Message Queuing Protocol). Sin embargo, en entornos de alto rendimiento, el poder de computación y la latencia de la red no son generalmente una preocupación. AMQP está diseñado para la confiabilidad y la interoperabilidad en aplicaciones empresariales. Tiene un amplio conjunto de funciones, pero no es adecuado para las aplicaciones de IoT con recursos limitados. Además de AMQP, hay otros protocolos de mensajería populares. Por ejemplo, el XMPP (Extensible Messaging and Presence Protocol) es un protocolo de mensajería instantánea (IM) peer-to-peer. Tiene muchas funciones que soportan casos de uso de IM, como los adjuntos de presencia y de medios de comunicación. Comparado con MQTT, requiere muchos más recursos tanto en el dispositivo como en la red.

Page 9: Proyecto de la instalación domótica de una vivienda

Así que, ¿qué es lo que hace que MQTT sea tan liviano y flexible? Una de las principales funciones del protocolo MQTT es su modelo de publicación y suscripción. Como con todos los protocolos de mensajería, éste desacopla los datos del consumidor y del publicador. El protocolo MQTT define los tipos de entidades en la red: un intermediario de mensajes y un número de clientes. El intermediario es un servidor que recibe todos los mensajes de los clientes y luego los redirige a clientes de destinos relevantes. Un cliente es cualquier cosa que pueda interactuar con el intermediario para enviar o recibir mensajes. Un cliente puede ser un sensor de IoT en el campo o una aplicación del centro de datos que procesa datos IoT.

1. El cliente se conecta con el intermediario. Se puede suscribir a cualquier “tema” de mensajes de intermediario. Esta conexión puede ser una conexión TCP/IP simple o una conexión TLS cifrada para mensajes confidenciales.

2. El cliente publica el mensaje, sobre un tema, enviando el mensaje y el tema al intermediario.

3. Después, el intermediario redirige el mensaje a todos los clientes que están suscritos a ese “tema”.

Ya que os mensajes MQTT están organizados por temas, el desarrollador de aplicaciones tiene la flexibilidad de especificar que ciertos clientes solo puedan interactuar con determinados mensajes. Por ejemplo, los sensores publicarán sus lecturas sobre el tema “sensor_data” y se suscribirá al tema “config-change”. Las aplicaciones de procesamiento de datos que guardan datos del sensor en una base de datos backend se suscribirán al tema “sensor_data”. Una aplicación de consola de administración puede recibir los comandos del administrador del sistema para ajustar las configuraciones de los sensores, como la sensibilidad y la frecuencia de la muestra, y publicar esos cambios en el tema “config_change”

Al mismo tiempo, MQTT es liviano. Tiene una cabecera simple para especificar el tipo de mensaje, un tema basado en texto y, a continuación, una carga útil binaria y arbitraria. La aplicación puede utilizar cualquier formato de datos para la carga útil, como: JSON, XML, cifrado binario o Base64, siempre que los clientes destino puedan analizar la carga útil. https://developer.ibm.com/es/articles/iot-mqtt-why-good-for-iot/

Page 10: Proyecto de la instalación domótica de una vivienda

2.1.3 Cliente MQTT Un cliente MQTT puede ser cualquier dispositivo que se conecte a un bróker MQTT a través de internet, desde uno con recursos muy limitados como un microcontrolador hasta un ordenador con prestaciones más que suficientes. La principal ventaja de los clientes MQTT es que es muy sencillo implementarlos, permitiendo su uso en dispositivos con pocos recursos como es el caso del microprocesador que usamos en el proyecto, el ESP32. Además, las librerías de clientes MQTT tienen una amplia variedad de lenguajes para su uso (C++, Java, Arduino, etc.), lo que permite que dicho protocolo sea muy flexible.

2.1.4 Bróker MQTT El bróker es el elemento principal del modelo de publicación y suscripción, al cual se conectan los clientes para enviar y recibir los mensajes. El bróker recibe los mensajes, los filtra en función del “topic”, y los envía a los clientes que estén suscritos a dicho “topic”. También se encarga de autentificar a los clientes que tratan de conectarse a él.

2.1.5 Establecimiento de la conexión El protocolo MQTT se localiza en las capas superiores de OSI, y normalmente se apoya en TCP/IP. Esto significa que los participantes de una aplicación MQTT deben tener una pila TCP/IP.

Como MQTT depende del protocolo de transporte TCP. Por defecto, las conexiones TCP no usan una comunicación encriptada. Para encriptar toda la comunicación MQTT, varios brokers MQTT permiten el uso de TLS.

Page 11: Proyecto de la instalación domótica de una vivienda

Para iniciar la comunicación, primero, el cliente se conecta con el intermediario enviando un mensaje CONNECT. El mensaje CONNECT pide establecer una conexión desde el cliente hacia el intermediario. El mensaje CONNECT tiene los siguientes parámetros de contenido. Parámetros del mensaje CONNECT

• cleanSession. Este identificador especifica si la conexión es persistente o no. Una sesión persistente almacena todos los mensajes de la suscripción y los que potencialmente se han perdido (dependiendo de QoS) en el intermediario. Nombre de usuario, la autentificación del intermediario y las credenciales de autorización.

• lastWillTopic. Cuando una conexión se cae de forma inesperada, el intermediario publica automáticamente un mensaje de “última voluntad” en un tema.

• lastWillQos. El mensaje de “última voluntad” en QoS.

• lasWillMessage. El propio mensaje de “última voluntad”.

• keepAlive. Este es el intervalo de tiempo para que el cliente compruebe la disponibilidad del intermediario para mantener la conexión viva.

El cliente recibirá un mensaje CONNACK del intermediario. El mensaje CONNACK tiene los siguientes parámetros de contenido. Descripción del parámetro:

• sessionPresent. Esto indica si la conexión ya tiene una sesión persistente. Esto significa que la conexión ya tiene temas a los que se ha suscrito, y que recibirá la entrega de los mensajes que faltan.

• returnCode0. Indica éxito. Otros valores identifican la causa de la falla. Después de que se establece una conexión, el cliente puede enviar al intermediario uno o más mensajes SUBSCRIBE para indicar que recibirá mensajes del intermediario para determinados temas. Esos mensajes pueden tener una o varias repeticiones en los siguientes parámetros. Parámetros del mensaje SUBSCRIBE

• qos. El indicador qos (calidad de servicio, o QoS) indica la consistencia con la que los mensajes de este tema se tienen que entregar a los clientes. -Valor 0: No confiable, el mensaje se entrega como mucho una vez, si el cliente no está disponible en ese momento se perderá el mensaje. -Valor 1: el mensaje se debería entregar al menos una vez. -Valor 2: el mensaje se debería entregar exactamente una vez.

• topic. Un tema al que suscribirse. Un tema puede tener varios niveles separados por el carácter de barra diagonal. Por ejemplo: “dw/demo” y “ibm/bluemix/mqtt” son temas válidos.

Page 12: Proyecto de la instalación domótica de una vivienda

Después de que un cliente se haya suscrito correctamente a un tema, el intermediario devuelve un mensaje SUBACK con uno o más parámetros “returnCode”. Parámetros del mensaje SUBACK

• returnCode. En el comando SUBSCRIBE existe un código de retorno para cada uno de los temas. Los valores de retorno son los siguientes. -Valores 0 – 2: éxito con el nivel de QoS correspondiente. -Valor 128: falla

Correspondiente al mensaje SUBSCRIBE, también puede dejar la suscripción (UNSUBSCRIBE) de un tema o de varios. Parámetros del mensaje UNSUBSCRIBE

• topic. Este parámetro se puede repetir para varios temas. El cliente puede enviar mensajes PUBLISH al intermediario. El mensaje contiene un tema y una carga útil de datos. Después, el intermediario redirige el mensaje a todos los clientes que están suscritos a ese tema. Parámetros del mensaje PUBLISH

• topicName. El tema en que se publica el mensaje.

• qos. La calidad del nivel de servicio de la entrega del mensaje.

• retainFlag. Este indicador indica si el intermediario retendrá el mensaje como el último mensaje conocido para este tema.

• payload. Los datos reales que hay en el mensaje. Puede ser una cadena de texto o un boleano.

2.1.6 Topic El bróker MQTT utiliza los temas o “topics” para decidir qué cliente recibe qué mensaje. También existen los SYS-topics, que son temas especiales que revelan información sobre el bróker. En MQTT un tema se refiere a la cadena de texto UTF-8 que el bróker usa para filtrar los mensajes para cada cliente conectado. El tema consiste en uno o más niveles. Cada nivel está separado por una barra inclinada (separador de niveles). home/cocina/temperatura comodines Cuando un cliente se suscribe a un tema, este se puede suscribir a ese tema exactamente del mensaje publicado o se pueden usar comodines para suscribir a múltiples temas simultáneamente.

Page 13: Proyecto de la instalación domótica de una vivienda

Hay dos tipos diferentes de comodines: un nivel o multinivel.

1. Un nivel: + home/+/temperatura esto significa que suscripción anterior podría coincidir con, por ejemplo: home/cocina/temperatura home/comedor/temperatura

2. Multinivel: #

home/habitacion1/# esto significa que la suscripción anterior coincide con los todos los temas de la habitación1 como, por ejemplo: home/habitacion1/Luz home/habitacion1/Pul home/habitacion1/temperatura entre otros.

2.2 Mosquitto Eclipse Mosquitto es un broker de mensajes open source (licencia EPL/EDL) que implementa el protocolo MQTT versiones 5.0, 3.1.1 y 3.1. Mosquitto es ligero y adecuado para todos los dispositivos, desde SBC (Single Board Computer) como la Raspberry pi hasta servidores. El proyecto mosquitto también proporciona una librería en C para implementar clientes MQTT.

Page 14: Proyecto de la instalación domótica de una vivienda

3. Software

3.1 Raspberry Pi OS Raspberry Pi OS (anteriormente llamado Raspbian) es una distribución del sistema operativo GNU/Linux basado en Debian, y por lo tanto libre para la SBC Raspberry Pi, orientado a la enseñanza de informática. Destaca el menú “raspi-config” que permite configurar el sistema operativo sin tener que modificar archivos de configuración manualmente. Entre sus funciones, permite expandir la partición root para que ocupe toda la tarjeta de memoria, configurar el teclado, aplicar overclocks, etc.

https://es.wikipedia.org/wiki/Raspberry_Pi_OS En cuanto a las opciones de descarga se encuentran: Raspberry Pi OS (32 bits) Lite → en esta versión no disponemos de entorno gráfico y no hay software instalado a parte del propio sistema operativo. Esta opción no sirve para este proyecto debido a que se usa Node-RED que es un entorno visual. Raspberry Pi OS (32 bits) con escritorio → en esta versión es exactamente la misma que en la versión Lite, es decir, no tiene software adicional instalado a parte del propio sistema operativo, pero sí que tiene un entorno gráfico.

Raspberry Pi OS (32 bits) con escritorio y software recomendado → Esta versión es como la anterior, pero tiene instalado software a parte del sistema operativo, este es el que uso en el proyecto debido a que es más sencillo instalar programas como Node-RED o el bróker MQTT Mosquitto porque ja tiene instalado el software necesario para que estos programas funcionen correctamente.

Page 15: Proyecto de la instalación domótica de una vivienda

El procedimiento para instalar es sistema operativo es:

1. Descargar la imagen de la página oficial

https://www.raspberrypi.org/downloads/raspberry-pi-os/

Page 16: Proyecto de la instalación domótica de una vivienda

2. Formatear la tarjeta SD con un programa específico como podría ser

https://www.sdcard.org/downloads/formatter/

Page 17: Proyecto de la instalación domótica de una vivienda

3. Para grabar la imagen en la tarjeta SD se necesita un programa como balenaEtcher

https://www.balena.io/etcher/

4. Crear un archivo sin extensión con el nombre “SSH” para tener acceso remoto.

Page 18: Proyecto de la instalación domótica de una vivienda

5. Expulsar la tarjeta e introducirla a la Raspberry Pi.

6. Acceder de manera remota con PuTTY

7. Realizar la configuración inicial de la Raspberry Pi

Page 19: Proyecto de la instalación domótica de una vivienda

8. Actualizar por si hay modificaciones en el sistema operativo posteriores a la descarga.

9. Instalar y ejecutar tightvncserver para poder acceder al escritorio de Raspbian de

forma remota.

Page 20: Proyecto de la instalación domótica de una vivienda
Page 21: Proyecto de la instalación domótica de una vivienda

3.2 Mosquitto

3.2.1 Instalación de mosquitto Se introducen los siguientes comandos para instalar el bróker mosquitto.

A continuación, se introduce el siguiente comando para instalar mosquitto como cliente.

Opciones -c --config-file Carga la configuración desde un archivo. Si no se da, los valores son los proporcionados por defecto -d --daemon Mosquitto funciona en segundo plano como Daemon (tipo especial de proceso informático no interactivo, es decir, que se ejecuta en segundo plano en vez de ser controlado directamente por el usuario). Todo el resto de comportamiento se mantiene igual. -p --port Escucha en el puerto especificado en vez de el puerto por defecto 1883. Esto funciona adicionalmente a la configuración del puerto establecido en el archivo config. Puede ser especificado múltiples veces para múltiples servicios en diferentes puertos. -v --verbose Esto es equivalente a la configuración log_type a all en el archivo de configuración. Configuración El bróker puede ser configurado usando la configuración descrita en mosquitto.conf(5) y esto es el punto principal de información para Mosquitto. Los archivos requeridos para el soporte SSL/TLS están descritos en mosquitto-tls(7). Estado bróker Los clientes pueden encontrar información sobre el bróker suscribiéndose a los topics en la jerarquía $SYS como sigue. Los topics marcados como estáticos son solo enviados una vez por cliente suscrito. Todos los otros topics son actualizados cada sys_interval segundos.Si sys_interval es 0, entonces las actualizaciones no son enviadas.

Page 22: Proyecto de la instalación domótica de una vivienda

$SYS/broker/bytes/received El número total de bytes recibidos desde que el bróker inició. $SYS/broker/bytes/sent El número total de bytes enviados desde que el bróker inició. $SYS/broker/clients/connected El número actual de clientes conectados. $SYS/broker/clients/expired El número de clientes persistentes desconectados que hayan caducado y eliminados a través de la opción de persistent_client_expiration. $SYS/broker/clients/disconnected El número total de clientes persistentes (con la sesión limpiar desactivada) que se hayan registrado en el bróker pero que estén actualmente desconectados. $SYS/broker/clients/máximum El número máximo de clientes que han sido conectados al bróker al mismo tiempo. $SYS/broker/clients/total El número total de clientes activos e inactivos conectados y registrados actualmente en el bróker. $SYS/broker/connection/# Cuando los puentes son configurados para/desde el bróker, Es común proporcionar un topic de estado que indica el estado de la conexión. Esto es proporcionado en $SYS/broker/connection/ por defecto. Si el valor del topic es 1 la conexión se mantiene activa, si es 0 entonces no está activa. $SYS/broker/heap/current size El tamaño actual de la pila de memoria en uso por Mosquitto. $SYS/broker/heap/máximum size El mayor tamaño de la pila usado por Mosquitto. $SYS/broker/load/connections/+ La media móvil del número de paquetes CONNECT recibidos por el bróker en diferentes intervalos de tiempo. El final “+” de la jerarquía puede ser 1min, 5 min o 15 min. El valor retornado representa el número de conexiones recibidas en 1 minuto, haciendo la media sobre 1, 5 o 15 minutos. $SYS/broker/load/bytes/received/+ La media móvil del número de bytes recibidos por el bróker en diferentes intervalos de tiempo. El final “+” de la jerarquía puede ser 1min, 5 min o 15 min. El valor retornado representa el número de conexiones recibidas en 1 minuto, haciendo la media sobre 1, 5 o 15 minutos.

Page 23: Proyecto de la instalación domótica de una vivienda

$SYS/broker/load/bytes/sent/+ La media móvil del número de bytes enviados por el bróker en diferentes intervalos de tiempo. El final “+” de la jerarquía puede ser 1min, 5 min o 15 min. El valor retornado representa el número de conexiones recibidas en 1 minuto, haciendo la media sobre 1, 5 o 15 minutos. $SYS/broker/load/messages/received/+ La media móvil del número de todos los tipos de mensajes recibidos por el bróker en diferentes intervalos de tiempo. El final “+” de la jerarquía puede ser 1min, 5 min o 15 min. El valor retornado representa el número de conexiones recibidas en 1 minuto, haciendo la media sobre 1, 5 o 15 minutos. $SYS/broker/load/messages/sent/+ La media móvil del número de todos los tipos de mensajes enviados por el bróker en diferentes intervalos de tiempo. El final “+” de la jerarquía puede ser 1min, 5 min o 15 min. El valor retornado representa el número de conexiones recibidas en 1 minuto, haciendo la media sobre 1, 5 o 15 minutos. $SYS/broker/load/publish/dropped/+ La media móvil del número de mensajes publicados perdidos por el bróker en diferentes intervalos de tiempo. El final “+” de la jerarquía puede ser 1min, 5 min o 15 min. El valor retornado representa el número de conexiones recibidas en 1 minuto, haciendo la media sobre 1, 5 o 15 minutos. $SYS/broker/load/publish/received/+ La media móvil del número de mensajes publicados recibidos por el bróker en diferentes intervalos de tiempo. El final “+” de la jerarquía puede ser 1min, 5 min o 15 min. El valor retornado representa el número de conexiones recibidas en 1 minuto, haciendo la media sobre 1, 5 o 15 minutos. $SYS/broker/load/publish/sent/+ La media móvil del número de mensajes publicados enviados por el bróker en diferentes intervalos de tiempo. El final “+” de la jerarquía puede ser 1min, 5 min o 15 min. El valor retornado representa el número de conexiones recibidas en 1 minuto, haciendo la media sobre 1, 5 o 15 minutos. $SYS/broker/load/sockets/+ La media móvil del número de conexiones abiertas por el bróker en diferentes intervalos de tiempo. El final “+” de la jerarquía puede ser 1min, 5 min o 15 min. El valor retornado representa el número de conexiones recibidas en 1 minuto, haciendo la media sobre 1, 5 o 15 minutos. $SYS/broker/messages/inflight El número de mensajes con QoS>0 que están esperando “acknowledgments” $SYS/broker/messages/received El número total de mensajes de cualquier tipo recibidos desde el inicio del bróker. $SYS/broker/messages/sent El número total de mensajes de cualquier tipo enviados desde el inicio del bróker.

Page 24: Proyecto de la instalación domótica de una vivienda

$SYS/broker/publish/messages/dropped El número total de mensajes publicados que han sido perdidos debido a los límites de inflight/queuing. Ver las opciones max_inflight_messages y max_queued_messages. $SYS/broker/publish/messages/received El número total de mensajes publicados recibidos desde el incio del bróker. $SYS/broker/publish/messages/sent El número total de mensajes publicados enviados desde el inicio del bróker. $SYS/broker/retained messages/count El número total de mensajes activos en el bróker. $SYS/broker/store/messages/count El número actual de mensajes retenidos en el almacenamiento de mensajes. Esto incluye mensajes retenidos y mensajes en la cola de cliente duraderos. $SYS/broker/store/messages/bytes El número de bytes actuales retenidos en la carga de mensajes en el almacenamiento. Esto incluye mensajes retenidos y mensajes en la cola de clientes duraderos. $SYS/broker/subscriptions/count El número total de suscripciones activas en el bróker. $SYS/broker/versión La versión del broker. Estatico. Puentes Múltiples brokers pueden ser conectados juntos con una funcionalidad de puente. Esto puede ser útil cuando es deseable compartir información entre ubicaciones, pero donde no toda la información necesita ser compartida. Un ejemplo podría ser donde un número de usuarios están utilizando un bróker para ayudar a registrar el uso de potencia. El uso de potencia podría ser compartido a través de puentear todos los brokers de usuario a un bróker común, permitiendo que el uso de potencia de todos los usuarios pudiera ser recopilada y comparada. La otra información se mantendría local en cada bróker. Señales SIGHUP Al recibir la señal SIGHUP, mosquitto intentará volver a cargar los datos del archivo de configuración, suponiendo que se proporcionó el argumento -c cuando se inició mosquitto. No todos los parámetros de configuración se pueden volver a cargar sin reiniciar. SIGUSR1 Al recibir la señal SIGUSR1, mosquitto escribirá la base de datos de persistencia en el disco. Esta señal solo actúa si la persistencia está activada. SIGUSR2 La señal SIGUSR2 hace que mosquitto imprima el árbol de suscripción actual, junto con información sobre dónde existen los mensajes retenidos. Esto es solo una función de prueba y puede eliminarse en cualquier momento.

Page 25: Proyecto de la instalación domótica de una vivienda

Archivos /etc/mosquitto/mosquitto.conf Archivo de configuración. /var/lib/mosquitto/mosquitto.db Ubicación de almacenamiento de los mensajes persistentes si persist está activado. /etc/hosts.allow /etc/hosts.deny Control de acceso de usuarios via tcp-wrappers.

Page 26: Proyecto de la instalación domótica de una vivienda

3.2.2 Estructura de topics

Raspberry pi (Broker MQTT)

ESP32 (Entrada) → home/entrada Sensor de presencia (pres0.0) → home/entrada/presencia0 Pulsador (pul0.0) → home/entrada/pulsador0 Punto de luz (lamp0.0) → home/entrada/lampara0 Timbre (timbre0.0) → home/entrada/timbre Pulsador (pul1.0) → home/entrada/pulsador1 Pulsador (pul1.1) → home/entrada/pulsador2 Sensor de presencia (pres1.0) → home/entrada/presencia1 Punto de luz (lamp1.0) → home/entrada/lampara1 Punto de luz (lamp1.1) → home/entrada/lampara2 ESP32 (Habitación 1) → home/hab1 Pulsador (pul2.0) → home/hab1/pulsador0 Pulsador (pul2.1) → home/hab1/pulsador1 Pulsador (pul2.2) → home/hab1/pulsador2

Pulsador (pul2.3) → home/hab1/pulsador3 Sensor de temperatura (temp2.0) → home/hab1/temperatura Punto de luz (lamp2.0) → home/hab1/lampara0

Calefacción (res2.0) → home/hab1/calefaccion ESP32(Baño1) → home/baño1

Pulsador (pul3.0) → home/baño/pulsador0 Pulsador (pul3.1) → home/baño/pulsador1 Pulsador (pul3.2) → home/baño/pulsador2 Pulsador (pul3.3) → home/baño/pulsador3 Punto de luz (lamp3.0) → home/baño/lampara0 Punto de luz (lamp3.1) → home/baño/lampara1 Punto de luz (lamp3.2) → home/baño/lampara2 Sensor de temperatura (temp3.0) → home/baño/temperatura Calefacción (res3.0) → home/baño/calefaccion

ESP32 (Habitación 2) → home/hab2 Pulsador (pul4.0) → home/hab2/pulsador Pulsador (pul4.1) → home/hab2/pulsador Pulsador (pul4.2) → home/hab2/pulsador

Pulsador (pul4.3) → home/hab2/pulsador Sensor de temperatura (temp4.0) → home/hab2/temperatura Punto de luz (lamp4.0) → home/hab2/lampara0

Calefacción (res4.0) → home/hab2/calefaccion

Page 27: Proyecto de la instalación domótica de una vivienda

ESP32(Salón/Comedor) → home/comedor Pulsador (pul5.0) → home/entrada/ pulsador0 Pulsador (pul5.1) → home/comedor/pulsador1 Pulsador (pul5.2) → home/comedor/pulsador2 Pulsador (pulperup5.0) → home/comedor/pulsadorUp0 Pulsador (pulperdown5.0) → home/comedor/pulsadorDown0 Pulsador (pulperup5.1) → home/comedor/pulsadorUp1 Pulsador (pulperdown5.1) → home/comedor/pulsadorDown1 Pulsador (pulperup5.2) → home/comedor/pulsadorUp2 Pulsador (pulperdown5.2) → home/comedor/pulsadorDown2 Punto de luz (lamp5.0) → home/comedor/lampara0 Punto de luz (lamp5.1) → home/comedor/lampara1 Sensor de temperatura (temp5.0) → home/comedor/temperatura1 Sensor de temperatura (temp5.1) → home/comedor/temperatura2 Calefacción (res5.0) → home/comedor/calefaccion0 Calefacción (res5.1) → home/comedor/calefaccion1 Relé (perup0) → home/comedor/persianaUp0 Relé (perdown0) → home/comedor/persianaDown0 Relé (perup1) → home/comedor/persianaUp1 Relé (perdown1) → home/comedor/persianaDown1 Relé (perup2) → home/comedor/persianaUp2 Relé (perdown2) → home/comedor/persianaDown2

ESP32(Patio) → home/patio Pulsador (pul6.0) → home/patio/pulsador0 Pulsador (pul6.1) → home/patio/pulsador1 Pulsador (pul6.2) → home/patio/pulsador2 Pulsador (pul6.3) → home/patio/pulsador3 Punto de luz (lamp6.0) → home/patio/lampara0 Punto de luz (lamp6.1) → home/patio/lampara1

ESP32(Baño2) →home/baño2 Pulsador (pul7.0) → home/baño2/pulsador0 Punto de luz (lamp7.0) → home/baño2/lampara0

ESP32(Cocina) → home/cocina Pulsador (pul8.0) → home/comedor pulsador0 Pulsador (pul8.1) → home/cocina/pulsador1 Pulsador (pul8.2) → home/cocina/pulsador2 Punto de luz (lamp8.0) → home/cocina/lampara0 Punto de luz (lamp8.1) → home/cocina/lampara1 Sensor de temperatura (temp8.0) → home/cocina/temperatura Calefacción (res8.0) → home/cocina/calefaccion Sensor de gas (gas8.0) → home/cocina/alarmaGas Zumbador (zum8.0) → home/cocina/zumbador

Page 28: Proyecto de la instalación domótica de una vivienda

3.3 Node-RED Node-RED es una herramienta de programación visual. Muestra visualmente las relaciones y funciones, y permite al usuario programar sin tener que escribir en un lenguaje de programación. Node-RED es un editor de flujo basado en el navegador donde se puede añadir o eliminar nodos y conectarlos entre sí con el fin de hacer que se comuniquen entre ellos. En Node-RED, cada nodo es uno de los siguientes tipos: un nodo de inyección o un nodo de función. Los nodos de inyección producen un mensaje sin necesidad de entrada y lanzan una entrada y realizan algún trabajo con él. Con una gran cantidad de estos nodos para elegir, Node-RED hace que el conectar los dispositivos de hardware, API’s y servicios en línea sea más fácil que nunca. Para instalar Node-RED tenemos que tener instalado en Node.js (que está incluido cuando instalas Node-RED) y npm que no está incluido en este paquete. NPM es un sistema de gestión de paquetes por defecto para Node.js, un entorno de ejecución para JavaScript. Existen dos opciones:

Local → empieza a funcionar cuando introducimos la instrucción node-red en el terminal y finaliza cuando pulsamos Ctrl-C. Como servicio → Esto significa que puede funcionar en segundo plano y activarse automáticamente cuando el dispositivo arranca.

En este caso usaríamos Node-RED como servicio. Para hacer esto debemos introducir el siguiente comando: sudo systemctl enable nodered.service Para desactivar este servicio se introduce: sudo systemctl disable nodered.service

Page 29: Proyecto de la instalación domótica de una vivienda

3.3.1 Programación Node-RED Entrada/Recibidor

Page 30: Proyecto de la instalación domótica de una vivienda

3.3.2 Programación Node-RED Habitación 1

Page 31: Proyecto de la instalación domótica de una vivienda

3.3.3 Programación Node-RED Baño1

Page 32: Proyecto de la instalación domótica de una vivienda

3.3.4 Programación Node-RED Habitación 2

Page 33: Proyecto de la instalación domótica de una vivienda

3.3.5 Programación Node-RED Comedor

Page 34: Proyecto de la instalación domótica de una vivienda
Page 35: Proyecto de la instalación domótica de una vivienda

3.3.6 Programación Node-RED Patio y Baño2

Page 36: Proyecto de la instalación domótica de una vivienda
Page 37: Proyecto de la instalación domótica de una vivienda

3.3.6 Programación Node-RED Cocina

Page 38: Proyecto de la instalación domótica de una vivienda

3.4 ESP32

3.4.1 Programación ESP32 Entrada/Recibidor #include <WiFi.h>

#include <PubSubClient.h>

const char* ssid = "Nombre de la red wifi";

//nombre de la red wifi de la vivienda

const char* password = "contraseña de la red wifi";

//contraseña de la red wifi anteriormente mencionada

const char* mqtt_server = "192.168.1.39";

//dirección ip del broker mqtt

const int pres00 = 34;

//GPIO al que está conectado el sensor de presencia

pres0.0

const int pres10 = 35;

//GPIO al que está conectado el sensor de presencia

pres1.0

const int pul00 = 32;

//GPIO al que está conectado el pulsador

pul0.0

const int pul10 = 33;

//GPIO al que está conectado el pulsador

pul1.0

const int pul11 = 25;

//GPIO al que está conectado el pulsador pul1.1

const int lamp00 = 21;

//GPIO al que está conectado la lámpara

lamp0.0

const int lamp10 = 19;

//GPIO al que está conectado la lámpara

lamp1.0

const int lamp11 = 18;

//GPIO al que está conectado la lámpara

lamp1.1

const int timbre00 = 17;

//GPIO al que está conectado el timbre

timbre0.0

const int kEnt = 16;

//GPIO al que está conectado el relé

kEnt

int contador1 = 0;

//Esta variable se utiliza para cambiar de estado a cada pulsación del

pulsador pul1.0

int contador2 = 0;

//Esta variable se utiliza para cambiar de estado a cada pulsación del

pulsador pul1.1

int presencia00 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el sensor de presencia

pres0.0

int presencia10 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el sensor de presencia

pres1.0

int pulsador00 = 0;

Page 39: Proyecto de la instalación domótica de una vivienda

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador

pul0.0

int pulsador10 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador

pul1.0

int pulsador11 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador

pul1.1

//El siguiente grupo de variables se utiliza para primero convertir el

meensaje que entra en una cadena y segundo

//convertir esta cadena en una variable float

String str;

char str0;

char str1;

char str2;

char str3;

char str4;

byte mat[10];

float temperatura;

WiFiClient espClient;

//Crea un cliente que se puede conectar a una determinada dirección IP

definida en

client.connect()

PubSubClient client(espClient);

//Crea un cliente para publicar y suscribirse a través de un

determinado cliente WiFi

char msg[50];

//Se declara la variable que contiene el mensaje que se envía por

MQTT

long lastMsg = 0;

//Esta función establece conexión con la red WiFi de la vivienda

void setup_wifi()

{

delay(10);

// We start by connecting to a WiFi network

Serial.println();

Serial.print("Connecting to ");

Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

randomSeed(micros());

Serial.println("");

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

Page 40: Proyecto de la instalación domótica de una vivienda

}

//Esta función es la que se encarga de recibir e interpretar los

mensajes MQTT de los topics suscritos

void callback(char* topic, byte* payload, unsigned int length)

{

//Cuando un mensaje tiene el topic "home/entrada/timbre" este entra

en el bucle if

if

(strcmp(topic,"home/entrada/timbre")==0){

//comprueba si el segundo caracter es 'N' porque el mensaje que se

recibe es "ON" o "OFF"

if ((char)payload[1] == 'N'){

//por tanto cuando el mensaje de entrada es "ON" se activa una

salida digital conectada al

timbre

digitalWrite(timbre00,

HIGH);

}else{

//en el caso de que el mensaje de entrada sea "OFF" se desactiva

la salida digital anteriormente mencionada

digitalWrite(timbre00,

LOW);

}

}

//En este caso ocurre del mismo modo que el bucle if anterior

if

(strcmp(topic,"home/entrada/lampara0")==0){

if ((char)payload[1] == 'N'){

digitalWrite(lamp00, HIGH);

}else{

digitalWrite(lamp00, LOW);

}

}

if (strcmp(topic,"home/entrada/lampara1")==0){

if ((char)payload[1] == 'N'){

digitalWrite(lamp10, HIGH);

}else{

digitalWrite(lamp10, LOW);

}

}

if (strcmp(topic,"home/entrada/lampara2")==0){

if ((char)payload[1] == 'N'){

digitalWrite(lamp11, HIGH);

}else{

digitalWrite(lamp11, LOW);

}

}

//En este topic recibimos la temperatura, por lo que necesitamos

transformar el mensaje

//en algo que pueda interpretar el microcontrolador

if

(strcmp(topic,"home/entrada/calefaccion")==0){

str =

"";

for (int i = 0;i < length; i++){

mat[i] = payload[i];

}

str0 = mat[0];

str1 = mat[1];

str2 = mat[2];

Page 41: Proyecto de la instalación domótica de una vivienda

str3 = mat[3];

str4 = mat[4];

//concatenamos los caracteres que creemos convenientes

str = String(str + str0 + str1 + str2 + str3 + str4);

//y convertimos esa variable String en un float

temperatura = str.toFloat();

//Dependiendo de la temperatura recibida se activará o desactivará

la calefacción

if (temperatura<15){

digitalWrite(kEnt, HIGH);

}if (temperatura>20){

digitalWrite(kEnt, LOW);

}

}

}

//Esta función se utiliza para que el microcontrolador se mantenga

siempre conectado al servidor MQTT

void reconnect() {

// Loop until we're reconnected

while (!client.connected()) {

Serial.print("Attempting MQTT connection...");

// Create a random client ID

String clientId = "ESP8266Client-";

clientId += String(random(0xffff), HEX);

// Attempt to connect

if (client.connect(clientId.c_str())) {

Serial.println("connected");

//Una vez conectado, envia un mensaje

//Nos suscribimos a los topics de entrada

client.subscribe("home/entrada/timbre");

client.subscribe("home/entrada/lampara0");

client.subscribe("home/entrada/lampara1");

client.subscribe("home/entrada/lampara2");

client.subscribe("home/entrada/calefaccion");

} else {

Serial.print("failed, rc=");

Serial.print(client.state());

Serial.println(" try again in 5 seconds");

// Wait 5 seconds before retrying

delay(5000);

}

}

}

void setup() {

//Definimos que GPIOs son salidas

pinMode(lamp00, OUTPUT);

pinMode(lamp10, OUTPUT);

pinMode(lamp11, OUTPUT);

pinMode(timbre00, OUTPUT);

pinMode(kEnt, OUTPUT);

//Definimos que GPIOs son entradas

pinMode(pres00, INPUT);

pinMode(pres10, INPUT);

pinMode(pul00, INPUT);

pinMode(pul10, INPUT);

Page 42: Proyecto de la instalación domótica de una vivienda

pinMode(pul11, INPUT);

//Definimos la velocidad de transmissión del puerto serie

Serial.begin(115200);

//Llamamos a la función que conecta con la red WiFi de la vivienda

setup_wifi();

//Definimos el puerto que tiene abierto el servidor para la

comunicación MQTT

client.setServer(mqtt_server, 1883);

//Definimos la función que recibe los mensajes de entrada

client.setCallback(callback);

}

void loop() {

if (!client.connected()) {

reconnect();

}

client.loop();

//Leemos el estado del GPIO

presencia00 = digitalRead(pres00);

presencia10 = digitalRead(pres10);

pulsador00 = digitalRead(pul00);

pulsador10 = digitalRead(pul10);

pulsador11 = digitalRead(pul11);

//Debido a que no queremos enviar un mensaje cada vez que el loop()

se ejecute

//establecemos un tiempo para la lectura

long now = millis();

if (now - lastMsg > 1000) {

lastMsg = now;

if (presencia00 == HIGH){

//Definimos el mensaje MQTT

snprintf(msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

//Enviamos el mensaje MQTT a determinado topic

client.publish("home/entrada/presencia0", msg);

}else{

snprintf(msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/entrada/presencia0", msg);

}

if (presencia00 == HIGH){

snprintf(msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/entrada/presencia1", msg);

}else{

snprintf(msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/entrada/presencia1", msg);

}

if (presencia00 == HIGH){

snprintf(msg, 50, "ON");

Serial.print("Publish message: ");

Page 43: Proyecto de la instalación domótica de una vivienda

Serial.println(msg);

client.publish("home/entrada/presencia1", msg);

}else{

snprintf(msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/entrada/presencia1", msg);

}

if (pulsador00 == HIGH){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/entrada/pulsador0", msg);

}else{

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/entrada/pulsador0", msg);

}

}

//En este caso cada vez que se pulsa el pulsador cambia de estado

if (pulsador10 == HIGH){

contador1++;

delay(200);

if (contador1 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/entrada/pulsador1", msg);

}if (contador1 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/entrada/pulsador1", msg);

}

}

if (pulsador11 == HIGH){

contador2++;

delay(200);

if (contador % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/entrada/pulsador2", msg);

}if (contador2 % 2 == 1){

snprintf (msg3, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/entrada/pulsador2", msg);

}

}

}

Page 44: Proyecto de la instalación domótica de una vivienda

3.4.2 Programación ESP32 Habitación1

#include <WiFi.h>

#include <PubSubClient.h>

const char* ssid = "Nombre de la red wifi";

//nombre de la red wifi de la vivienda

const char* password = "contraseña de la red wifi";

//contraseña de la red wifi anteriormente mencionada

const char* mqtt_server = "192.168.1.39";

//dirección ip del broker mqtt

const int pul20 = 34;

//GPIO al que está conectado el pulsador pul2.0

const int pul21 = 35;

//GPIO al que está conectado el pulsador pul2.1

const int pul22 = 32;

//GPIO al que está conectado el pulsador pul2.2

const int pul23 = 33;

//GPIO al que está conectado el pulsador pul2.3

const int temp20 = 25;

//GPIO al que está conectado al sensor de temperatura temp2.0

const int lamp20 = 21;

//GPIO al que está conectado la lámpara lamp2.0

const int k1 = 19;

//GPIO al que está conectado el relé K1

int contador1 = 0;

//Esta variable se utiliza para cambiar de estado a cada pulsación de

los pulsadores

int pulsador20 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul2.0

int pulsador21 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul2.1

int pulsador22 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul2.2

int pulsador23 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul2.3

int temp20val = 0;

//Esta variable contiene el valor de la entrada analógica del sensor

de temperatura

//El siguiente grupo de variables se utiliza para primero convertir el

meensaje que entra en una cadena y segundo

//convertir esta cadena en una variable float

String str;

char str0;

char str1;

char str2;

char str3;

char str4;

byte mat[10];

float temperatura;

//Las siguientes variables se utilizan para leer la temperatura del

sensor

Page 45: Proyecto de la instalación domótica de una vivienda

float temp;

float temperaturaMedida;

WiFiClient espClient;

//Crea un cliente que se puede conectar a una determinada dirección IP

definida en

client.connect()

PubSubClient client(espClient);

//Crea un cliente para publicar y suscribirse a través de un

determinado cliente WiFi

char msg[50];

//Se declara la variable que contiene el mensaje que se envía por

MQTT

long lastMsg = 0;

//Esta función establece conexión con la red WiFi de la vivienda

void setup_wifi()

{

delay(10);

// We start by connecting to a WiFi network

Serial.println();

Serial.print("Connecting to ");

Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

randomSeed(micros());

Serial.println("");

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

}

//Esta función es la que se encarga de recibir e interpretar los

mensajes MQTT de los topics suscritos

void callback(char* topic, byte* payload, unsigned int length)

{

if (strcmp(topic,"home/hab1/calefaccion")==0){

str = "";

for (int i = 0; i < length; i++){

mat[i] = payload[i];

}

str0 = mat[0];

str1 = mat[1];

str2 = mat[2];

str3 = mat[3];

str4 = mat[4];

str = String(str + str0 + str1 + str2 + str3 + str4);

temperatura = str.toFloat();

if (temperatura<15){

digitalWrite(k1, HIGH);

}if(temperatura>20){

Page 46: Proyecto de la instalación domótica de una vivienda

digitalWrite(k1, LOW);

}

}

if (strcmp(topic, "home/hab1/lampara1")==0){

if ((char)payload[1] == 'N'){

digitalWrite(lamp20, HIGH);

}else{

digitalWrite(lamp20, LOW);

}

}

}

//Esta función se utiliza para que el microcontrolador se mantenga

siempre conectado al servidor MQTT

void reconnect() {

// Loop until we're reconnected

while (!client.connected()) {

Serial.print("Attempting MQTT connection...");

// Create a random client ID

String clientId = "ESP8266Client-";

clientId += String(random(0xffff), HEX);

// Attempt to connect

if (client.connect(clientId.c_str())) {

Serial.println("connected");

//Una vez conectado, envia un mensaje

//Nos suscribimos a los topics de entrada

client.subscribe("home/hab1/lampara1");

client.subscribe("home/hab1/calefaccion");

} else {

Serial.print("failed, rc=");

Serial.print(client.state());

Serial.println(" try again in 5 seconds");

// Wait 5 seconds before retrying

delay(5000);

}

}

}

void setup() {

//Definimos que GPIOs son salidas

pinMode(lamp20, OUTPUT);

pinMode(k1, OUTPUT);

//Definimos que GPIOs son entradas

pinMode(pul20, INPUT);

pinMode(pul21, INPUT);

pinMode(pul22, INPUT);

pinMode(pul23, INPUT);

//Definimos la velocidad de transmissión del puerto serie

Serial.begin(115200);

//Llamamos a la función que conecta con la red WiFi de la vivienda

setup_wifi();

//Definimos el puerto que tiene abierto el servidor para la

comunicación MQTT

client.setServer(mqtt_server, 1883);

//Definimos la función que recibe los mensajes de entrada

client.setCallback(callback);

}

Page 47: Proyecto de la instalación domótica de una vivienda

void loop(){

if (!client.connected()) {

reconnect();

}

client.loop();

//Leemos el estado del GPIO

pulsador20 = digitalRead(pul20);

pulsador21 = digitalRead(pul21);

pulsador22 = digitalRead(pul22);

pulsador23 = digitalRead(pul23);

//Leemos el valor del sensor de temperatura

temp20val = analogRead(temp20);

temp = map(temp20, 0, 4095, 0, 5000);

temperaturaMedida = temp/100;

//Debido a que no queremos enviar un mensaje cada vez que el loop()

se ejecute

//establecemos un tiempo para la lectura

long now = millis();

if (now - lastMsg > 4000) {

lastMsg = now;

snprintf (msg, 50, "%f", temperaturaMedida);

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab1/temperatura", msg);

}

if (pulsador20 == HIGH){

contador1++;

delay(200);

if (contador1 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab1/pulsador0", msg);

}if (contador1 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab1/pulsador0", msg);

}

}

if (pulsador21 == HIGH){

contador1++;

delay(200);

if (contador1 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab1/pulsador1", msg);

}if (contador1 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab1/pulsador1", msg);

}

}

Page 48: Proyecto de la instalación domótica de una vivienda

if (pulsador22 == HIGH){

contador1++;

delay(200);

if (contador1 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab1/pulsador2", msg);

}if (contador1 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab1/pulsador2", msg);

}

}

if (pulsador23 == HIGH){

contador1++;

delay(200);

if (contador1 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab1/pulsador3", msg);

}if (contador1 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab1/pulsador3", msg);

}

}

}

Page 49: Proyecto de la instalación domótica de una vivienda

3.4.3 Programación ESP32 Baño1 #include <WiFi.h>

#include <PubSubClient.h>

const char* ssid = "Nombre de la red wifi";

//nombre de la red wifi de la vivienda

const char* password = "contraseña de la red wifi";

//contraseña de la red wifi anteriormente mencionada

const char* mqtt_server = "192.168.1.39";

//dirección ip del broker mqtt

const int pul30 = 34;

//GPIO al que está conectado el pulsador pul2.0

const int pul31 = 35;

//GPIO al que está conectado el pulsador pul2.1

const int pul32 = 32;

//GPIO al que está conectado el pulsador pul2.2

const int pul33 = 33;

//GPIO al que está conectado el pulsador pul2.3

const int temp30 = 25;

//GPIO al que está conectado al sensor de temperatura

const int lamp30 = 21;

//GPIO al que está conectado la lámpara lamp2.0

const int lamp31 = 19;

//GPIO al que está conectado la lámpara lamp2.0

const int lamp32 = 18;

//GPIO al que está conectado la lámpara lamp2.0

const int k2 = 17;

//GPIO al que está conectado el relé K1

int contador1 = 0;

//Esta variable se utiliza para cambiar de estado a cada pulsación de

los pulsadores

int contador2 = 0;

//Esta variable se utiliza para cambiar de estado a cada pulsación de

los pulsadores

int contador3 = 0;

//Esta variable se utiliza para cambiar de estado a cada pulsación de

los pulsadores

int pulsador30 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul2.0

int pulsador31 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul2.1

int pulsador32 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul2.2

int pulsador33 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul2.3

int temp30val = 0;

//Esta variable contiene el valor de la entrada analógica a la que

está conectado el sensor de temperatura temp4.0

//El siguiente grupo de variables se utiliza para primero convertir el

meensaje que entra en una cadena y segundo

//convertir esta cadena en una variable float

String str;

Page 50: Proyecto de la instalación domótica de una vivienda

char str0;

char str1;

char str2;

char str3;

char str4;

byte mat[10];

float temperatura;

//Las siguientes variables se utilizan para leer la temperatura del

sensor

float temp;

float temperaturaMedida;

WiFiClient espClient;

//Crea un cliente que se puede conectar a una determinada dirección IP

definida en

client.connect()

PubSubClient client(espClient);

//Crea un cliente para publicar y suscribirse a través de un

determinado cliente WiFi

char msg[50];

//Se declara la variable que contiene el mensaje que se envía por

MQTT

long lastMsg = 0;

//Esta función establece conexión con la red WiFi de la vivienda

void setup_wifi()

{

delay(10);

// We start by connecting to a WiFi network

Serial.println();

Serial.print("Connecting to ");

Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

randomSeed(micros());

Serial.println("");

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

}

//Esta función es la que se encarga de recibir e interpretar los

mensajes MQTT de los topics suscritos

void callback(char* topic, byte* payload, unsigned int length)

{

if (strcmp(topic,"home/bano/calefaccion")==0){

str = "";

for (int i = 0; i < length; i++){

mat[i] = payload[i];

}

Page 51: Proyecto de la instalación domótica de una vivienda

str0 = mat[0];

str1 = mat[1];

str2 = mat[2];

str3 = mat[3];

str4 = mat[4];

str = String(str + str0 + str1 + str2 + str3 + str4);

temperatura = str.toFloat();

if (temperatura<15){

digitalWrite(k2, HIGH);

}if(temperatura>20){

digitalWrite(k2, LOW);

}

}

if (strcmp(topic, "home/bano/lampara0")==0){

if ((char)payload[1] == 'N'){

digitalWrite(lamp30, HIGH);

}else{

digitalWrite(lamp30, LOW);

}

}

if (strcmp(topic, "home/bano/lampara1")==0){

if ((char)payload[1] == 'N'){

digitalWrite(lamp31, HIGH);

}else{

digitalWrite(lamp31, LOW);

}

}

if (strcmp(topic, "home/bano/lampara2")==0){

if ((char)payload[1] == 'N'){

digitalWrite(lamp32, HIGH);

}else{

digitalWrite(lamp32, LOW);

}

}

}

//Esta función se utiliza para que el microcontrolador se mantenga

siempre conectado al servidor MQTT

void reconnect() {

// Loop until we're reconnected

while (!client.connected()) {

Serial.print("Attempting MQTT connection...");

// Create a random client ID

String clientId = "ESP8266Client-";

clientId += String(random(0xffff), HEX);

// Attempt to connect

if (client.connect(clientId.c_str())) {

Serial.println("connected");

//Una vez conectado, envia un mensaje

//Nos suscribimos a los topics de entrada

client.subscribe("home/bano1/lampara0");

client.subscribe("home/bano1/lampara1");

client.subscribe("home/bano1/lampara2");

client.subscribe("home/bano1/calefaccion");

} else {

Serial.print("failed, rc=");

Serial.print(client.state());

Serial.println(" try again in 5 seconds");

Page 52: Proyecto de la instalación domótica de una vivienda

// Wait 5 seconds before retrying

delay(5000);

}

}

}

void setup() {

//Definimos que GPIOs son salidas

pinMode(lamp30, OUTPUT);

pinMode(lamp31, OUTPUT);

pinMode(lamp32, OUTPUT);

pinMode(k2, OUTPUT);

//Definimos que GPIOs son entradas

pinMode(pul30, INPUT);

pinMode(pul31, INPUT);

pinMode(pul32, INPUT);

pinMode(pul33, INPUT);

//Definimos la velocidad de transmissión del puerto serie

Serial.begin(115200);

//Llamamos a la función que conecta con la red WiFi de la vivienda

setup_wifi();

//Definimos el puerto que tiene abierto el servidor para la

comunicación MQTT

client.setServer(mqtt_server, 1883);

//Definimos la función que recibe los mensajes de entrada

client.setCallback(callback);

}

void loop(){

if (!client.connected()) {

reconnect();

}

client.loop();

//Leemos el estado del GPIO

pulsador30 = digitalRead(pul30);

pulsador31 = digitalRead(pul31);

pulsador32 = digitalRead(pul32);

pulsador33 = digitalRead(pul33);

//Leemos el valor del sensor de temperatura

temp30val = analogRead(temp30);

temp = map(temp30, 0, 4095, 0, 5000);

temperaturaMedida = temp/100;

//Debido a que no queremos enviar un mensaje cada vez que el loop() se

ejecute

//establecemos un tiempo para la lectura

long now = millis();

if (now - lastMsg > 4000) {

lastMsg = now;

snprintf (msg, 50, "%f", temperaturaMedida);

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/bano1/temperatura", msg);

}

if (pulsador30 == HIGH){

Page 53: Proyecto de la instalación domótica de una vivienda

contador1++;

delay(200);

if (contador1 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/bano1/pulsador0", msg);

}if (contador1 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/bano1/pulsador0", msg);

}

}

if (pulsador31 == HIGH){

contador1++;

delay(200);

if (contador1 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/bano1/pulsador1", msg);

}if (contador1 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/bano1/pulsador1", msg);

}

}

if (pulsador32 == HIGH){

contador2++;

delay(200);

if (contador2 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/bano1/pulsador2", msg);

}if (contador2 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/bano1/pulsador2", msg);

}

}

if (pulsador33 == HIGH){

contador2++;

delay(200);

if (contador2 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/bano1/pulsador3", msg);

}if (contador2 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/bano1/pulsador3", msg);

}

}

}

Page 54: Proyecto de la instalación domótica de una vivienda

3.4.4 Programación ESP32 Habitación2 #include <WiFi.h>

#include <PubSubClient.h>

const char* ssid = "Nombre de la red wifi";

//nombre de la red wifi de la vivienda

const char* password = "contraseña de la red wifi";

//contraseña de la red wifi anteriormente mencionada

const char* mqtt_server = "192.168.1.39";

//dirección ip del broker mqtt

const int pul40 = 34;

//GPIO al que está conectado el pulsador pul2.0

const int pul41 = 35;

//GPIO al que está conectado el pulsador pul2.1

const int pul42 = 32;

//GPIO al que está conectado el pulsador pul2.2

const int pul43 = 33;

//GPIO al que está conectado el pulsador pul2.3

const int temp40 = 25;

//GPIO al que está conectado al sensor de temperatura

const int lamp40 = 21;

//GPIO al que está conectado la lámpara lamp2.0

const int k3 = 19;

//GPIO al que está conectado el relé K1

int contador1 = 0;

//Esta variable se utiliza para cambiar de estado a cada pulsación de

los pulsadores

int pulsador40 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul2.0

int pulsador41 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul2.1

int pulsador42 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul2.2

int pulsador43 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul2.3

int temp40val = 0;

//Esta variable contiene el valor de la entrada analógica a la que

está conectado el sensor de temperatura temp4.0

//El siguiente grupo de variables se utiliza para primero convertir el

meensaje que entra en una cadena y segundo

//convertir esta cadena en una variable float

String str;

char str0;

char str1;

char str2;

char str3;

char str4;

byte mat[10];

float temperatura;

//Las siguientes variables se utilizan para leer la temperatura del

sensor

Page 55: Proyecto de la instalación domótica de una vivienda

float temp;

float temperaturaMedida;

WiFiClient espClient;

//Crea un cliente que se puede conectar a una determinada dirección IP

definida en

client.connect()

PubSubClient client(espClient);

//Crea un cliente para publicar y suscribirse a través de un

determinado cliente WiFi

char msg[50];

//Se declara la variable que contiene el mensaje que se envía por

MQTT

long lastMsg = 0;

//Esta función establece conexión con la red WiFi de la vivienda

void setup_wifi()

{

delay(10);

// We start by connecting to a WiFi network

Serial.println();

Serial.print("Connecting to ");

Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

randomSeed(micros());

Serial.println("");

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

}

//Esta función es la que se encarga de recibir e interpretar los

mensajes MQTT de los topics suscritos

void callback(char* topic, byte* payload, unsigned int length)

{

if (strcmp(topic,"home/hab2/calefaccion")==0){

str = "";

for (int i = 0; i < length; i++){

mat[i] = payload[i];

}

str0 = mat[0];

str1 = mat[1];

str2 = mat[2];

str3 = mat[3];

str4 = mat[4];

str = String(str + str0 + str1 + str2 + str3 + str4);

temperatura = str.toFloat();

if (temperatura<15){

digitalWrite(K3, HIGH);

}if(temperatura>20){

Page 56: Proyecto de la instalación domótica de una vivienda

digitalWrite(K3, LOW);

}

}

if (strcmp(topic, "home/hab2/lampara1")==0){

if ((char)payload[1] == 'N'){

digitalWrite(lamp40, HIGH);

}else{

digitalWrite(lamp40, LOW);

}

}

}

//Esta función se utiliza para que el microcontrolador se mantenga

siempre conectado al servidor MQTT

void reconnect() {

// Loop until we're reconnected

while (!client.connected()) {

Serial.print("Attempting MQTT connection...");

// Create a random client ID

String clientId = "ESP8266Client-";

clientId += String(random(0xffff), HEX);

// Attempt to connect

if (client.connect(clientId.c_str())) {

Serial.println("connected");

//Una vez conectado, envia un mensaje

//Nos suscribimos a los topics de entrada

client.subscribe("home/hab2/lampara1");

client.subscribe("home/hab2/calefaccion");

} else {

Serial.print("failed, rc=");

Serial.print(client.state());

Serial.println(" try again in 5 seconds");

// Wait 5 seconds before retrying

delay(5000);

}

}

}

void setup() {

//Definimos que GPIOs son salidas

pinMode(lamp40, OUTPUT);

pinMode(k3, OUTPUT);

//Definimos que GPIOs son entradas

pinMode(pul40, INPUT);

pinMode(pul41, INPUT);

pinMode(pul42, INPUT);

pinMode(pul43, INPUT);

//Definimos la velocidad de transmissión del puerto serie

Serial.begin(115200);

//Llamamos a la función que conecta con la red WiFi de la vivienda

setup_wifi();

//Definimos el puerto que tiene abierto el servidor para la

comunicación MQTT

client.setServer(mqtt_server, 1883);

//Definimos la función que recibe los mensajes de entrada

client.setCallback(callback);

}

Page 57: Proyecto de la instalación domótica de una vivienda

void loop(){

if (!client.connected()) {

reconnect();

}

client.loop();

//Leemos el estado del GPIO

pulsador40 = digitalRead(pul40);

pulsador41 = digitalRead(pul41);

pulsador42 = digitalRead(pul42);

pulsador43 = digitalRead(pul43);

//Leemos el valor del sensor de temperatura

temp40val = analogRead(temp40);

temp = map(temp40, 0, 4095, 0, 5000);

temperaturaMedida = temp/100;

//Debido a que no queremos enviar un mensaje cada vez que el loop()

se ejecute

//establecemos un tiempo para la lectura

long now = millis();

if (now - lastMsg > 4000) {

lastMsg = now;

snprintf (msg, 50, "%f", temperaturaMedida);

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab2/temperatura", msg);

}

if (pulsador40 == HIGH){

contador1++;

delay(200);

if (contador1 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab2/pulsador0", msg);

}if (contador1 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab2/pulsador0", msg);

}

}

if (pulsador41 == HIGH){

contador1++;

delay(200);

if (contador1 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab2/pulsador1", msg);

}if (contador1 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab2/pulsador1", msg);

}

}

if (pulsador42 == HIGH){

Page 58: Proyecto de la instalación domótica de una vivienda

contador1++;

delay(200);

if (contador1 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab2/pulsador2", msg);

}if (contador1 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab2/pulsador2", msg);

}

}

if (pulsador43 == HIGH){

contador1++;

delay(200);

if (contador1 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab2/pulsador3", msg);

}if (contador1 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/hab2/pulsador3", msg);

}

}

}

Page 59: Proyecto de la instalación domótica de una vivienda

3.4.5 Programación ESP32 Comedor #include <WiFi.h>

#include <PubSubClient.h>

const char* ssid = "Nombre de la red wifi";

//nombre de la red wifi de la vivienda

const char* password = "contraseña de la red wifi";

//contraseña de la red wifi anteriormente mencionada

const char* mqtt_server = "192.168.1.39";

//dirección ip del broker mqtt

const int temp50 = 16;

//GPIO al que está conectado al sensor de temperatura

const int temp51 = 17;

//GPIO al que está conectado al sensor de temperatura

const int pul50 = 35;

//GPIO al que está conectado el pulsador pul5.0

const int pul51 = 34;

//GPIO al que está conectado el pulsador pul5.1

const int pul52 = 33;

//GPIO al que está conectado el pulsador pul5.2

const int pulPerUp50 = 32;

//GPIO al que está conectado el pulsador pulPerUp5.0

const int pulPerDown50 = 27;

//GPIO al que está conectado el pulsador pulPerDown5.0

const int pulPerUp51 = 26;

//GPIO al que está conectado el pulsador pulPerUp5.1

const int pulPerDown51 = 25;

//GPIO al que está conectado el pulsador pulPerDown5.1

const int pulPerUp52 = 23;

//GPIO al que está conectado el pulsador pulPerUp5.2

const int pulPerDown52 = 22;

//GPIO al que está conectado el pulsador pulPerDown5.2

const int pul60 = 21;

//GPIO al que está conectado el pulsador pul6.0

const int pul61 = 19;

//GPIO al que está conectado el pulsador pul6.1

const int pul62 = 18;

//GPIO al que está conectado el pulsador pul6.2

const int pul63 = 4;

//GPIO al que está conectado el pulsador pul6.3

int pulsador50 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul5.0

int pulsador51 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul5.1

int pulsador52 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul5.2

int pulsador60 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul6.0

int pulsador61 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul6.1

int pulsador62 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul6.2

Page 60: Proyecto de la instalación domótica de una vivienda

int pulsador63 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul6.3

int pulsadorPerUp50 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pulPerUp50

int pulsadorPerDown50 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pulPerDown50

int pulsadorPerUp51 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pulPerUp51

int pulsadorPerDown51 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pulPerDown51

int pulsadorPerUp52 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pulPerUp52

int pulsadorPerDown52 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pulPerDown52

int contador1 = 0;

//Esta variable es usada para conocer el estado del pulsador pul5.0

int contador2 = 0;

//Esta variable es usada para conocer el estado del pulsador pul5.1

int contador3 = 0;

//Esta variable es usada para conocer el estado del pulsador pul5.2

int contador4 = 0;

//Esta variable es usada para conocer el estado del pulsador pul6.0

int contador5 = 0;

//Esta variable es usada para conocer el estado del pulsador pul6.1

int contador6 = 0;

//Esta variable es usada para conocer el estado del pulsador pul6.2

int contador7 = 0;

//Esta variable es usada para conocer el estado del pulsador pul6.3

const int lamp50 = 14;

//GPIO al que está conectado la lámpara lamp5.0

const int lamp51 = 15;

//GPIO al que está conectado la lámpara lamp5.1

//Propiedades de las salidas PWM

const int freq = 5000;

const int dimChannel1 = 0;

const int dimChannel2 = 1;

const int resolution = 8;

//Variables usadas para la lectura y conversión de la señal del sensor

de temperatura temp5.0

float temp_50;

float tempVal_50;

float temperaturaMedida50;

//Variables usadas para la lectura y conversión de la señal del sensor

de temperatura temp5.0

float temp_51;

float tempVal_51;

float temperaturaMedida51;

//Variables usadas para la lectura del mensaje que se recibe por MQTT

Page 61: Proyecto de la instalación domótica de una vivienda

String str50;

char str50_0;

char str50_1;

char str50_2;

char str50_3;

char str50_4;

byte mat50[10];

float temperatura50;

//Variables usadas para la lectura del mensaje que se recibe por MQTT

String str51;

char str51_0;

char str51_1;

char str51_2;

char str51_3;

char str51_4;

byte mat51[10];

float temperatura51;

WiFiClient espClient;

//Crea un cliente que se puede conectar a una determinada dirección IP

definida en

client.connect()

PubSubClient client(espClient);

//Crea un cliente para publicar y suscribirse a través de un

determinado cliente WiFi

char msg[50];

//Se declara la variable que contiene el mensaje que se envía por

MQTT

long lastMsg = 0;

//Esta función establece conexión con la red WiFi de la vivienda

void setup_wifi()

{

delay(10);

// We start by connecting to a WiFi network

Serial.println();

Serial.print("Connecting to ");

Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

randomSeed(micros());

Serial.println("");

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

}

//Esta función es la que se encarga de recibir e interpretar los

mensajes MQTT de los topics suscritos

Page 62: Proyecto de la instalación domótica de una vivienda

void callback(char* topic, byte* payload, unsigned int length)

{

if (strcmp(topic,"home/comedor/lampara0")==0){

String str;

byte mat[2];

for (int i = 0; i < length; i++){

mat[i] = payload[i];

}

char str50_0 = mat50[0];

char str50_1 = mat50[1];

char str50_2 = mat50[2];

str50 = String(str50 + str50_0 + str50_1 + str50_2);

int porcentaje = str50.toInt();

switch (porcentaje){

case 0:

ledcWrite(dimChannel1, 0);

break;

case 25:

ledcWrite(dimChannel1,63.75);

break;

case 50:

ledcWrite(dimChannel1, 127.5);

break;

case 75:

ledcWrite(dimChannel1, 192.25);

break;

case 10:

ledcWrite(dimChannel1, 255);

break;

}

}

if (strcmp(topic,"home/comedor/lampara1")==0){

String str;

byte mat[2];

for (int i = 0; i < length; i++){

mat[i] = payload[i];

}

char str51_0 = mat51[0];

char str51_1 = mat51[1];

char str51_2 = mat51[2];

str = String(str51 + str51_0 + str51_1 + str51_2);

int porcentaje = str51.toInt();

switch (porcentaje){

case 0:

ledcWrite(dimChannel2, 0);

break;

case 25:

ledcWrite(dimChannel2,63.75);

break;

case 50:

ledcWrite(dimChannel2, 127.5);

break;

case 75:

ledcWrite(dimChannel2, 192.25);

break;

case 10:

ledcWrite(dimChannel2, 255);

break;

}

}

}

Page 63: Proyecto de la instalación domótica de una vivienda

//Esta función se utiliza para que el microcontrolador se mantenga

siempre conectado al servidor MQTT

void reconnect() {

// Loop until we're reconnected

while (!client.connected()) {

Serial.print("Attempting MQTT connection...");

// Create a random client ID

String clientId = "ESP8266Client-";

clientId += String(random(0xffff), HEX);

// Attempt to connect

if (client.connect(clientId.c_str())) {

Serial.println("connected");

//Una vez conectado, envia un mensaje

//Nos suscribimos a los topics de entrada

client.subscribe("home/comedor/lampara1");

client.subscribe("home/comedor/lampara1");

} else {

Serial.print("failed, rc=");

Serial.print(client.state());

Serial.println(" try again in 5 seconds");

// Wait 5 seconds before retrying

delay(5000);

}

}

}

void setup() {

//Definimos que GPIOs son salidas PWM

ledcSetup(dimChannel1, freq, resolution);

ledcAttachPin(lamp50, dimChannel1);

ledcSetup(dimChannel2, freq, resolution);

ledcAttachPin(lamp51, dimChannel2);

//Definimos que GPIOs son entradas

pinMode(pul50, INPUT);

pinMode(pul51, INPUT);

pinMode(pul52, INPUT);

pinMode(pul60, INPUT);

pinMode(pul61, INPUT);

pinMode(pul62, INPUT);

pinMode(pul63, INPUT);

pinMode(pulPerUp50, INPUT);

pinMode(pulPerUp51, INPUT);

pinMode(pulPerUp52, INPUT);

pinMode(pulPerDown50, INPUT);

pinMode(pulPerDown51, INPUT);

pinMode(pulPerDown52, INPUT);

//Definimos la velocidad de transmissión del puerto serie

Serial.begin(115200);

//Llamamos a la función que conecta con la red WiFi de la vivienda

setup_wifi();

//Definimos el puerto que tiene abierto el servidor para la

comunicación MQTT

client.setServer(mqtt_server, 1883);

//Definimos la función que recibe los mensajes de entrada

Page 64: Proyecto de la instalación domótica de una vivienda

client.setCallback(callback);

}

void loop(){

if (!client.connected()){

reconnect();

}

client.loop();

//Leemos el estado del GPIO

pulsador50 = digitalRead(pul50);

pulsador51 = digitalRead(pul51);

pulsador52 = digitalRead(pul52);

pulsador60 = digitalRead(pul60);

pulsador61 = digitalRead(pul61);

pulsador62 = digitalRead(pul62);

pulsadorPerUp50 = digitalRead(pulPerUp50);

pulsadorPerDown50 = digitalRead(pulPerDown50);

pulsadorPerUp51 = digitalRead(pulPerUp51);

pulsadorPerDown51 = digitalRead(pulPerDown51);

pulsadorPerUp52 = digitalRead(pulPerUp52);

pulsadorPerDown52 = digitalRead(pulPerDown52);

tempVal_50 = analogRead(temp50);

temp_50 = map(tempVal_50, 0, 4095, 0, 5000);

temperatura50 = temp_50/100;

tempVal_51 = analogRead(temp51);

temp_51 = map(tempVal_51, 0, 4095, 0, 5000);

temperatura51 = temp_51/100;

if (pulsador50 == HIGH){

contador1++;

delay(200);

if (contador1 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsador0", msg);

}if (contador1 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsador0", msg);

}

}

if (pulsador51 == HIGH){

contador2++;

if (contador2 == 5){

contador2 = 0;

}

delay(200);

switch (contador2){

case 0:

snprintf (msg, 50, "0");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsador1", msg);

break;

case 1:

snprintf (msg, 50, "25");

Page 65: Proyecto de la instalación domótica de una vivienda

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsador1", msg);

break;

case 2:

snprintf (msg, 50, "50");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsador1", msg);

break;

case 3:

snprintf (msg, 50, "75");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsador1", msg);

break;

case 4:

snprintf (msg, 50, "100");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsador1", msg);

break;

}

}

if (pulsador52 == HIGH){

contador3++;

if (contador3 == 5){

contador3 = 0;

}

delay(200);

switch (contador3){

case 0:

snprintf (msg, 50, "0");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsador2", msg);

break;

case 1:

snprintf (msg, 50, "25");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsador2", msg);

break;

case 2:

snprintf (msg, 50, "50");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsador2", msg);

break;

case 3:

snprintf (msg, 50, "75");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsador2", msg);

break;

case 4:

snprintf (msg, 50, "100");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsador2", msg);

break;

Page 66: Proyecto de la instalación domótica de una vivienda

}

}

if (pulsador60 == HIGH){

contador4++;

delay(200);

if (contador4 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/patio/pulsador0", msg);

}if (contador4 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/patio/pulsador0", msg);

}

}

if (pulsador61 == HIGH){

contador5++;

delay(200);

if (contador5 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/patio/pulsador1", msg);

}if (contador5 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/patio/pulsador1", msg);

}

}

if (pulsador62 == HIGH){

contador6++;

delay(200);

if (contador6 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/patio/pulsador2", msg);

}if (contador6 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/patio/pulsador2", msg);

}

}

if (pulsador63 == HIGH){

contador7++;

delay(200);

if (contador7 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/patio/pulsador3", msg);

}if (contador7 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/patio/pulsador3", msg);

}

Page 67: Proyecto de la instalación domótica de una vivienda

}

long now = millis();

if (now -lastMsg > 2000){

lastMsg = now;

if (pulsadorPerUp50 == HIGH){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsadorUp0", msg);

}

if (pulsadorPerDown50 == HIGH){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsadorDown0", msg);

}

if (pulsadorPerUp51 == HIGH){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsadorUp1", msg);

}

if (pulsadorPerDown51 == HIGH){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsadorDown1", msg);

}

if (pulsadorPerUp52 == HIGH){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsadorUp2", msg);

}

if (pulsadorPerDown52 == HIGH){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/pulsadorDown2", msg);

}

snprintf (msg, 50, "%f", temperatura50);

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/temperatura0", msg);

snprintf (msg, 50, "%f", temperatura51);

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/comedor/temperatura1", msg);

}

}

Page 68: Proyecto de la instalación domótica de una vivienda

3.4.6 Programación ESP32 Patio #include <WiFi.h>

#include <PubSubClient.h>

const char* ssid = "Nombre de la red wifi";

//nombre de la red wifi de la vivienda

const char* password = "contraseña de la red wifi";

//contraseña de la red wifi anteriormente mencionada

const char* mqtt_server = "192.168.1.39";

//dirección ip del broker mqtt

const int lamp60 = 32;

//GPIO al que está conectado la lámpara lamp6.0

const int lamp61 = 27;

//GPIO al que está conectado la lámpara lamp6.1

const int kUp1 = 26;

//GPIO al que está conectado el relé KMup1

const int kDown1 = 25;

//GPIO al que está conectado el relé KMDown1

const int kUp2 = 23;

//GPIO al que está conectado el relé KMUp2

const int kDown2 = 22;

//GPIO al que está conectado el relé KMDown2

const int kUp3 = 21;

//GPIO al que está conectado el relé KMUp3

const int kDown3 = 19;

//GPIO al que está conectado el relé KMDown3

const int k4 = 14;

//GPIO al que está conectado el relé K4

//El siguiente grupo de variables se utiliza para primero convertir el

meensaje que entra en una cadena y segundo

//convertir esta cadena en una variable float

String str;

char str0;

char str1;

char str2;

char str3;

char str4;

byte mat[10];

float temperatura;

WiFiClient espClient;

//Crea un cliente que se puede conectar a una determinada dirección IP

definida en

client.connect()

PubSubClient client(espClient);

//Crea un cliente para publicar y suscribirse a través de un

determinado cliente WiFi

void setup_wifi()

{

delay(10);

// We start by connecting to a WiFi network

Serial.println();

Serial.print("Connecting to ");

Serial.println(ssid);

Page 69: Proyecto de la instalación domótica de una vivienda

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

randomSeed(micros());

Serial.println("");

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

}

//Esta función es la que se encarga de recibir e interpretar los

mensajes MQTT de los topics suscritos

void callback(char* topic, byte* payload, unsigned int length) {

if (strcmp(topic,"home/comedor/calefaccion")==0){

str = "";

for (int i = 0; i < length; i++){

mat[i] = payload[i];

}

str0 = mat[0];

str1 = mat[1];

str2 = mat[2];

str3 = mat[3];

str4 = mat[4];

str = String(str + str0 + str1 + str2 + str3 + str4);

temperatura = str.toFloat();

if (temperatura<15){

digitalWrite(k4, HIGH);

}if(temperatura>20){

digitalWrite(k4, LOW);

}

}

if (strcmp(topic, "home/patio/lampara0")==0){

if ((char)payload[1] == 'N'){

digitalWrite(lamp60, HIGH);

}else{

digitalWrite(lamp60, LOW);

}

}

if (strcmp(topic, "home/patio/lampara1")==0){

if ((char)payload[1] == 'N'){

digitalWrite(lamp61, HIGH);

}else{

digitalWrite(lamp61, LOW);

}

}

if (strcmp(topic, "home/comedor/persianaUp0")==0){

if ((char)payload[1] == 'N'){

digitalWrite(kUp1, HIGH);

delay(15000);

digitalWrite(kUp1, LOW);

}

}

if (strcmp(topic, "home/comedor/persianaDown0")==0){

if ((char)payload[1] == 'N'){

digitalWrite(kDown1, HIGH);

Page 70: Proyecto de la instalación domótica de una vivienda

delay(15000);

digitalWrite(kDown1, LOW);

}

}

if (strcmp(topic, "home/comedor/persianaUp1")==0){

if ((char)payload[1] == 'N'){

digitalWrite(kUp2, HIGH);

delay(15000);

digitalWrite(kUp2, LOW);

}

}

if (strcmp(topic, "home/comedor/persianaDown1")==0){

if ((char)payload[1] == 'N'){

digitalWrite(kDown2, HIGH);

delay(15000);

digitalWrite(kDown2, LOW);

}

}

if (strcmp(topic, "home/comedor/persianaUp2")==0){

if ((char)payload[1] == 'N'){

digitalWrite(kUp3, HIGH);

delay(15000);

digitalWrite(kUp3, LOW);

}

}

if (strcmp(topic, "home/comedor/persianaDown2")==0){

if ((char)payload[1] == 'N'){

digitalWrite(kDown3, HIGH);

delay(15000);

digitalWrite(kDown3, LOW);

}

}

}

//Esta función se utiliza para que el microcontrolador se mantenga

siempre conectado al servidor MQTT

void reconnect() {

// Loop until we're reconnected

while (!client.connected()) {

Serial.print("Attempting MQTT connection...");

// Create a random client ID

String clientId = "ESP8266Client-";

clientId += String(random(0xffff), HEX);

// Attempt to connect

if (client.connect(clientId.c_str())) {

Serial.println("connected");

//Una vez conectado, envia un mensaje

//Nos suscribimos a los topics de entrada

client.subscribe("home/comedor/calefaccion");

client.subscribe("home/comedor/lampara0");

client.subscribe("home/comedor/lampara1");

client.subscribe("home/patio/lampara0");

client.subscribe("home/patio/lampara1");

client.subscribe("home/comedor/persianaUp0");

client.subscribe("home/comedor/persianaDown0");

client.subscribe("home/comedor/persianaUp1");

client.subscribe("home/comedor/persianaDown1");

client.subscribe("home/comedor/persianaUp2");

client.subscribe("home/comedor/persianaDown2");

Page 71: Proyecto de la instalación domótica de una vivienda

} else {

Serial.print("failed, rc=");

Serial.print(client.state());

Serial.println(" try again in 5 seconds");

// Wait 5 seconds before retrying

delay(5000);

}

}

}

void setup() {

//Definimos que GPIOs son salidas

pinMode(lamp60, OUTPUT);

pinMode(lamp61, OUTPUT);

pinMode(k4, OUTPUT);

pinMode(kUp1, OUTPUT);

pinMode(kDown1, OUTPUT);

pinMode(kUp2, OUTPUT);

pinMode(kDown2, OUTPUT);

pinMode(kUp3, OUTPUT);

pinMode(kDown3, OUTPUT);

//Definimos la velocidad de transmissión del puerto serie

Serial.begin(115200);

//Llamamos a la función que conecta con la red WiFi de la vivienda

setup_wifi();

//Definimos el puerto que tiene abierto el servidor para la

comunicación MQTT

client.setServer(mqtt_server, 1883);

//Definimos la función que recibe los mensajes de entrada

client.setCallback(callback);

}

void loop(){

if (!client.connected()){

reconnect();

}

client.loop();

}

Page 72: Proyecto de la instalación domótica de una vivienda

3.4.7 Programación ESP32 Cocina/Baño2

#include <WiFi.h>

#include <PubSubClient.h>

const char* ssid = "Nombre de la red wifi";

//nombre de la red wifi de la vivienda

const char* password = "contraseña de la red wifi";

//contraseña de la red wifi anteriormente mencionada

const char* mqtt_server = "192.168.1.39";

//dirección ip del broker mqtt

const int temp80 = 33;

//GPIO al que está conectado al sensor de temperatura

const int gas80 = 35;

//GPIO al que está conectado al sensor de gas

const int pul80 = 34;

//GPIO al que está conectado el pulsador pul8.0

const int pul81 = 32;

//GPIO al que está conectado el pulsador pul8.1

const int pul82 = 27;

//GPIO al que está conectado el pulsador pul8.2

const int pul70 = 26;

//GPIO al que está conectado el pulsador pul7.0

const int k5 = 23;

//GPIO al que está conectado al relé k5

const int p1 = 22;

//GPIO al que está conectado al zumbador p1

const int lamp80 = 21;

//GPIO al que está conectado la lámpara lamp8.0

const int lamp70 = 19;

//GPIO al que está conectado la lámpara lamp7.0

const int lamp81 = 15;

//GPIO al que está conectado la lámpara lamp8.1

int pulsador80 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul8.0

int pulsador81 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul8.1

int pulsador82 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul8.2

int pulsador70 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado el pulsador pul7.0

int sensorGas80 = 0;

//Esta variable contiene el valor de la entrada digital a la que está

conectado al sensor de gas gas8.0

int contador1 = 0;

//Esta variable es usada para conocer el estado del pulsador pul8.0

int contador2 = 0;

//Esta variable es usada para conocer el estado del pulsador pul8.1

int contador3 = 0;

//Esta variable es usada para conocer el estado del pulsador pul8.2

int contador4 = 0;

//Esta variable es usada para conocer el estado del pulsador pul7.0

//Propiedades de las salidas PWM

Page 73: Proyecto de la instalación domótica de una vivienda

const int freq = 5000;

const int dimChannel = 1;

const int resolution = 8;

//Variables usadas para la lectura y conversión de la señal del sensor

de temperatura temp5.0

float temp;

float tempVal;

float temperaturaMedida;

//Variables usadas para la lectura del mensaje que se recibe por MQTT

String str;

char str0;

char str1;

char str2;

char str3;

char str4;

byte mat[10];

float temperatura;

WiFiClient espClient;

//Crea un cliente que se puede conectar a una determinada dirección IP

definida en

client.connect()

PubSubClient client(espClient);

//Crea un cliente para publicar y suscribirse a través de un

determinado cliente WiFi

char msg[50];

//Se declara la variable que contiene el mensaje que se envía por

MQTT

long lastMsg = 0;

//Esta función establece conexión con la red WiFi de la vivienda

void setup_wifi()

{

delay(10);

// We start by connecting to a WiFi network

Serial.println();

Serial.print("Connecting to ");

Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

randomSeed(micros());

Serial.println("");

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

}

//Esta función es la que se encarga de recibir e interpretar los

mensajes MQTT de los topics suscritos

Page 74: Proyecto de la instalación domótica de una vivienda

void callback(char* topic, byte* payload, unsigned int length) {

if (strcmp(topic,"home/cocina/calefaccion")==0){

str =

"";

for (int i = 0;i < length; i++){

mat[i] = payload[i];

}

str0 = mat[0];

str1 = mat[1];

str2 = mat[2];

str3 = mat[3];

str4 = mat[4];

//concatenamos los caracteres que creemos convenientes

str = String(str + str0 + str1 + str2 + str3 + str4);

//y convertimos esa variable String en un float

temperatura = str.toFloat();

//Dependiendo de la temperatura recibida se activará o desactivará

la calefacción

if (temperatura<15){

digitalWrite(k5, HIGH);

}if (temperatura>20){

digitalWrite(k5, LOW);

}

}

if (strcmp(topic, "home/cocina/alarmaGas")){

if ((char)payload[1] == 'N'){

digitalWrite(p1, HIGH);

delay(1000);

digitalWrite(p1, LOW);

}

}

if (strcmp(topic,"home/bano2/lampara0")==0){

if ((char)payload[1] == 'N'){

digitalWrite(lamp70, HIGH);

}else{

digitalWrite(lamp70, LOW);

}

}

if (strcmp(topic,"home/cocina/lampara0")==0){

if ((char)payload[1] == 'N'){

digitalWrite(lamp80, HIGH);

}else{

digitalWrite(lamp80, LOW);

}

}

if (strcmp(topic,"home/comedor/lampara0")==0){

String str;

byte mat[2];

for (int i = 0; i < length; i++){

mat[i] = payload[i];

}

char str0 = mat[0];

char str1 = mat[1];

char str2 = mat[2];

str = String(str + str0 + str1 + str2);

int porcentaje = str.toInt();

switch (porcentaje){

case 0:

ledcWrite(dimChannel, 0);

break;

case 25:

Page 75: Proyecto de la instalación domótica de una vivienda

ledcWrite(dimChannel,63.75);

break;

case 50:

ledcWrite(dimChannel, 127.5);

break;

case 75:

ledcWrite(dimChannel, 192.25);

break;

case 10:

ledcWrite(dimChannel, 255);

break;

}

}

}

//Esta función se utiliza para que el microcontrolador se mantenga

siempre conectado al servidor MQTT

void reconnect() {

// Loop until we're reconnected

while (!client.connected()) {

Serial.print("Attempting MQTT connection...");

// Create a random client ID

String clientId = "ESP8266Client-";

clientId += String(random(0xffff), HEX);

// Attempt to connect

if (client.connect(clientId.c_str())) {

Serial.println("connected");

//Una vez conectado, envia un mensaje

//Nos suscribimos a los topics de entrada

client.subscribe("home/cocina/lampara0");

client.subscribe("home/cocina/lampara1");

client.subscribe("home/cocina/alarmaGas");

client.subscribe("home/cocina/calefaccion");

} else {

Serial.print("failed, rc=");

Serial.print(client.state());

Serial.println(" try again in 5 seconds");

// Wait 5 seconds before retrying

delay(5000);

}

}

}

void setup(){

//Definimos que GPIO son salidas PWM

ledcSetup(dimChannel, freq, resolution);

ledcAttachPin(lamp81, dimChannel);

//Definimos que GPIOs son entradas

pinMode(pul80,INPUT);

pinMode(pul81,INPUT);

pinMode(pul82,INPUT);

pinMode(pul70,INPUT);

pinMode(gas80,INPUT);

//Definimos que GPIO son salidas

pinMode(k5,OUTPUT);

Page 76: Proyecto de la instalación domótica de una vivienda

pinMode(p1,OUTPUT);

pinMode(lamp80,OUTPUT);

pinMode(lamp81,OUTPUT);

pinMode(lamp70,OUTPUT);

Serial.begin(115200);

setup_wifi();

client.setServer(mqtt_server, 1883);

client.setCallback(callback);

}

void loop() {

if (!client.connected()) {

reconnect();

}

client.loop();

//Leemos el estado del GPIO

pulsador80 = digitalRead(pul80);

pulsador81 = digitalRead(pul81);

pulsador70 = digitalRead(pul70);

sensorGas80 = digitalRead(gas80);

tempVal = analogRead(temp);

temp = map(tempVal, 0, 4095, 0, 5000);

temperatura = temp/100;

if (pulsador80 == HIGH){

contador1++;

if (contador1 == 5){

contador1 = 0;

}

delay(200);

switch (contador1){

case 0:

snprintf (msg, 50, "0");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/cocina/pulsador0", msg);

break;

case 1:

snprintf (msg, 50, "25");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/cocina/pulsador0", msg);

break;

case 2:

snprintf (msg, 50, "50");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/cocina/pulsador0", msg);

break;

case 3:

snprintf (msg, 50, "75");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/cocina/pulsador0", msg);

break;

case 4:

snprintf (msg, 50, "100");

Page 77: Proyecto de la instalación domótica de una vivienda

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/cocina/pulsador0", msg);

break;

}

}

if (pulsador81 == HIGH){

contador2++;

if (contador2 == 5){

contador2 = 0;

}

delay(200);

switch (contador2){

case 0:

snprintf (msg, 50, "0");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/cocina/pulsador1", msg);

break;

case 1:

snprintf (msg, 50, "25");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/cocina/pulsador1", msg);

break;

case 2:

snprintf (msg, 50, "50");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/cocina/pulsador1", msg);

break;

case 3:

snprintf (msg, 50, "75");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/cocina/pulsador1", msg);

break;

case 4:

snprintf (msg, 50, "100");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/cocina/pulsador1", msg);

break;

}

}

if (pulsador82 == HIGH){

contador3++;

delay(200);

if (contador3 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/cocina/pulsador2", msg);

}if (contador3 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/cocina/pulsador2", msg);

}

}

if (pulsador70 == HIGH){

Page 78: Proyecto de la instalación domótica de una vivienda

contador4++;

delay(200);

if (contador4 % 2 == 0){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/bano2/pulsador0", msg);

}if (contador4 % 2 == 1){

snprintf (msg, 50, "OFF");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/bano2/pulsador0", msg);

}

}

long now = millis();

if (now -lastMsg > 2000){

lastMsg = now;

if (sensorGas80 == HIGH){

snprintf (msg, 50, "ON");

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/cocina/gas", msg);

}

snprintf (msg, 50, "%f", temperatura);

Serial.print("Publish message: ");

Serial.println(msg);

client.publish("home/cocina/temperatura0", msg);

}

}

4. Hardware

Por la naturaleza del sistema de control se puede decir que se trata de un sistema de control

distribuido, ya que, tanto la Raspberry Pi y los microcontroladores disponen de una unidad de

control.

El sistema de control se comunica mediante Wifi. Los sensores están cableados a los

microcontroladores y los actuadores están cableados también al microcontrolador, pero en

este caso disponen de circuitos intermedios capaces de suministrar la energía eléctrica en el

modo que el receptor lo necesite debido a que las salidas de los microcontroladores son de

muy baja potencia.

4.1 Circuitos de acondicionamiento

4.1.1 Sensor PIR Los sensores infrarrojos pasivos (PIR) son dispositivos para la detección de movimiento. Los sensores PIR se basan en la medición de la radiación infrarroja. Todos los cuerpos (vivos o no) emiten una cierta cantidad de energía infrarroja, mayor cuanto mayor es su temperatura. Los dispositivos PIR disponen de un sensor piro eléctrico capaz de captar esta radiación y convertirla en una señal eléctrica. Ahora bien, la mayoría de sensores PIR se alimentan con fase y neutro y cuando detectan algo se activa un contacto que suministra 230V de corriente alterna, este sensor está pensado para conectar una carga entre la salida del mismo y el neutro.

Page 79: Proyecto de la instalación domótica de una vivienda

Debido a que queremos tener una señal que pueda interpretar un ESP32 sin dañarlo, debemos tener un circuito intermedio.

Page 80: Proyecto de la instalación domótica de una vivienda

4.1.2 Sensor de gas MQ2 Este sensor se encarga de medir concentraciones de gas natural en el aire. Puede detectar concentraciones desde 300 hasta 10000 ppm. El módulo posee una salida analógica que proviene del divisor de voltaje que forma el sensor y una resistencia de carga. También tiene una salida digital que se calibra con un potenciómetro, esta salida tiene un Led indicador. La resistencia del sensor cambia de acuerdo a la concentración del gas en el aire. El MQ2 es sensible a LPG, i-butano, propano, metano, alcohol, hidrogeno y humo. El sensor tiene un calentador que solo funciona a 5V por lo que serán proporcionados por una fuente externa. Usaremos un divisor de tensión en la salida para adaptar la señal de 0 a 5V, a 0 a 3,3V, debido a que la entrada analógica de nuestro microcontrolador, el ESP32 es de 0 a 3,3V. Para calibrar el sensor usaremos el código proporcionado por sandbox electronics, con la única diferencia que tenemos que dividir por 0,66 debido a que el código está preparado para una entrada analógica de 0 a 5V y como he mencionado anteriormente nuestra tensión es de 0 a 3,3V. El potenciómetro de RV1 se debe configurar para una resistencia de 33 KOhmios Fuente → sandboxelectronic.com/?p=165 El divisor de tensión utilizado es el siguiente:

Page 81: Proyecto de la instalación domótica de una vivienda
Page 82: Proyecto de la instalación domótica de una vivienda
Page 83: Proyecto de la instalación domótica de una vivienda

4.1.3 Sensor de temperatura LM35 El LM35 es un sensor de temperatura digital. A diferencia de otros dispositivos como los termistores en los que la medición de temperatura se obtiene de la medición de su resistencia eléctrica, el LM35 es un integrado con su propio circuito de control, que proporciona una salida de voltaje proporcional a la temperatura. La salida del LM35 es lineal con la temperatura, incrementando el valor a razón de 10mV por cada grado centígrado. El rango de medición es de -55ºC (-550mV) a 150ºC (1500mV). Su precisión a temperatura ambiente es de 0,5ºC. El siguiente circuito lo usamos para aumentar la tensión de medición para que nos de unos 9,98V a 150ºC y 3,31V a 50ºC, debido a la separación del sensor y el microcontrolador una tensión mayor implica que la caída de tensión afecte menos al valor que estamos intentando leer, por esta razón, existe un segundo circuito que se sitúa cerca del microcontrolador para adaptar la tensión a valores que no dañe y que pueda interpretar el microcontrolador.

Page 84: Proyecto de la instalación domótica de una vivienda
Page 85: Proyecto de la instalación domótica de una vivienda

El circuito más próximo al microcontrolador se trata de un divisor de tensión que ajustaremos para que transforme una tensión de 9,9V a 3,3V, ajustándose debidamente también a la caída de tensión que realizamos midiendo la señal que tenemos y con la ayuda de otro sensor de temperatura. El potenciómetro lo ajustaremos a un valor próximo a los 39 KOhmios.

Page 86: Proyecto de la instalación domótica de una vivienda
Page 87: Proyecto de la instalación domótica de una vivienda

4.1.4 Dimmer El funcionamiento de este actuador se basa en recortar la onda senoidal, de este modo se reduce el voltaje medio y desciende la potencia de la luminaria.

Page 88: Proyecto de la instalación domótica de una vivienda
Page 89: Proyecto de la instalación domótica de una vivienda

4.1.5 Actuador todo-nada Este es un actuador todo-nada en el que activaremos las cargas que no necesiten ser reguladas.

Page 90: Proyecto de la instalación domótica de una vivienda
Page 91: Proyecto de la instalación domótica de una vivienda

5.Presupuesto Descripción €/unidad nº unidad Precio

Cable libre de halógenos 6mm

POR METROS H07Z1-K AS 750V. Azul. 1,24 € 25 31,00 €

Cable libre de halógenos 6mm

POR METROS H07Z1-K AS 750V. Marrón. 1,24 € 25 31,00 €

Cable libre de halógenos 6mm

POR METROS H07Z1-K AS 750V. Verde/amarillo. 1,24 € 25 31,00 €

Cable libre de halógenos 4mm

POR METROS H07Z1-K AS 750V. Azul. 0,84 € 40 33,60 €

Cable libre de halógenos 4mm

POR METROS H07Z1-K AS 750V. Marrón. 0,84 € 40 33,60 €

Cable libre de halógenos 4mm

POR METROS H07Z1-K AS 750V. Verde/amarillo. 0,84 € 40 33,60 €

Rollo 100m 2,5mm2. Cable flexible libre de halogeno. Azul. 27,65 € 2 55,30 €

Rollo 100m 2,5mm2. Cable flexible libre de halogeno. Marrón. 27,65 € 2 55,30 €

Rollo 100m 2,5mm2. Cable flexible libre de halogeno. Verde/amarillo. 27,65 € 2 55,30 €

Rollo 100m 1,5mm2. Cable flexible libre de halogeno. Azul. 16,90 € 2 33,80 €

Rollo 100m 1,5mm2. Cable flexible libre de halogeno. Marrón. 16,90 € 2 33,80 €

Rollo 100m 1,5mm2. Cable flexible libre de halogeno. Verde/amarillo. 16,90 € 2 33,80 €

Rollo 100m 2,5mm2. Cable flexible libre de halogeno. Rojo. 27,65 € 2 55,30 €

Rollo 100m 2,5mm2. Cable flexible libre de halogeno. Negro. 27,65 € 2 55,30 €

Base de enchufe para horno y vitro ME2134481 4,85 € 1 4,85 €

Base enchufe Schuko Simon 27472-65 3,23 € 42 135,66 €

Marco 1 elemento Simon 27 27601 1,82 € 6 10,92 €

Marco 2 elemento Simon 27 27620 3,60 € 10 36,00 €

Marco 3 elemento Simon 27 27630 5,74 € 3 17,22 €

Marco 4 elemento Simon 27 27640 7,81 € 5 39,05 €

Pulsador ancho Simon 27 27659-65 3,49 € 18 62,82 €

Pulsador persiana Simon 27 PLAY 27332 20,26 € 3 60,78 €

Doble conmutador estanco superficie LumiteK 5,50 € 2 11,00 €

Base schucko estanco superficie LumiteK 5,99 € 2 11,98 €

Pulsador estrecho Simon 27 27659-64 3,54 € 1 3,54 €

Caja Empotrar 1 elemento enlazable 65x65x40 3,41 € 63 214,83 €

BeMatik - Caja de distribución eléctrica metálica con

protección IP65 para fijación en pared 300x300x200mm 56,06 € 7 392,42 €

Carril DIN aluminio 100cm Maxge 7,60 € 2 15,20 €

Diseño de componentes electrónicos 20,00 € 15 300,00 €

Programación 20,00 € 20 400,00 €

Raspberry Pi 39,90 € 1 39,90 €

ESP32 9,99 € 8 79,92 €

Motor de persiana radio RTS MRR 3000 de 30NM 229,00 € 2 458,00 €

Motor de persiana radio RTS MRR 1000 de 10NM 209,00 € 1 209,00 €

Fuente de alimentación MeanWell, RS-15-12 12,40 € 1 12,40 €

Fuente de alimentación MeanWell, RS-15-3,3 12,95 € 1 12,95 €

Fuente de alimentación MeanWell, RT-65B 18,68 € 5 93,40 €

total --> 3273,44€

Page 92: Proyecto de la instalación domótica de una vivienda

6.Planos y esquemas La vivienda está situada en Carrer dels cavallets, 30 Ontinyent, Valéncia.

Page 93: Proyecto de la instalación domótica de una vivienda
Page 94: Proyecto de la instalación domótica de una vivienda
Page 95: Proyecto de la instalación domótica de una vivienda
Page 96: Proyecto de la instalación domótica de una vivienda

Escala

Ids normas

Comprobado

Dibujado

Fecha Nombre Firmas

Sustituye a

Sustituido por

Jorge de Scals

Jorge de Scals

jorge de scals cenjor

Jorge de Scals

jorge de scals cenjor

Jorge de Scals

Jorge de Scals

jorge de scals cenjor

Jorge de Scals

Jorge de Scals

Jorge de Scals

jorge de scals cenjor

Jorge de Scals

jorge de scals cenjor

Jorge de Scals

Jorge de Scals

Jorge de Scals

Jorge de Scals

Jorge de Scals

T. CUBIERTA II

ACCESO

Jorge de Scals

Jorge de Scals

PISCINA

Jorge de Scals

nevera/congelador

horno

lavadora

term

o

modulo alto

mueble

Jorge de Scals

9.5897

VP

lavavajillas

c1 c1

c1

c1

c2a c2a c2a

c2a c2a c2a

c2b

c2b

c2b

c2b

c2b

c2b

c2b

c2b

c2bc2b

c2b

c2b

c2a

c2a

c5

c5

c5

c2a

c5

c5

c5

c4

c4

c4

c2a

c3

c8

c9

c9

c8

c8

c9 c8

c8

c9

c8

c2b

pul0.0

pul1.0

pul1.1

pres0.0

pres1.0

pul2.0

pul2.1

pul2.2

pul2.3 pul3.0 pul3.1

pul3.2pul3.3

pul4.0

pul4.1

pul4.2

pul4.3

p

u

l

5

.

0

p

u

l

5

.

1

p

u

l

5

.

2

temp2.0

temp3.0

temp4.0

temp5.0

pul6.0

pul6.1

pul6.2

pul6.3

pul7.0

pul8.0

pul8.1

pul8.2

Lamp8.0

Lamp8.1

temp8.0

Gas8.0

Lamp7.0

lamp0.0

timbre0.0

lamp1.0

lamp1.1

lamp2.0

lamp3.0

lamp3.1 lamp3.2

lamp4.0

lamp5.0

lamp5.1

temp5.1

lamp6.0

lamp6.1

zum8.0

c10

p

u

l

p

e

r

u

p

5

.

0

p

u

l

p

e

r

d

o

w

n

5

.

0

p

u

l

p

e

r

u

p

5

.

1

p

u

l

p

e

r

d

o

w

n

5

.

1

p

u

l

p

e

r

d

o

w

n

5

.

2

p

u

l

p

e

r

u

p

5

.

2

1:100

5/07/2020

15/07/2020

SBP

JDA

Page 97: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

=home+recibidor/10

4

23/06/2020 EPLAN Software & ServiceGmbH & Co. KG

1

2

Nombre

5

1 / 36

Descripción de proyecto Instalación domótica con Raspberry Pi y ESP32 mediante MQTT

Número de páginas

08/06/2020

Modificado

Creado

36

Portada1

Nombre de proyecto InstalacionDomotica

28/07/2020

Page 98: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

=+/1

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

11

4

23/06/2020 EPLAN Software & ServiceGmbH & Co. KG

10

2

Nombre

5

2 / 36

1

2

3

4

-IGAI> I>

1

2

3

4

-D1

1

2

3

4

-C110 A

IluminaciónI> I>

1

2

3

4

-C216 ATC1

I> I>

1

2

3

4

-C325 A

Cocina y hornoI> I>

1

2

3

4

-C420 A

LavadoraLavavajillas

Terrmo

I> I>

1

2

3

4

-C516 A

TC humedasI> I>

1

2

3

4

-C716 ATC2

I> I>

1

2

3

4

-C825 A

CalefacciónI> I>

1

2

3

4

-C925 A

ACI> I>

1

2

3

4

-C1016 A

SecadoraI> I>

1

2

3

4

-C1110 A

AutomatizaciónI> I>

1

2

3

4

-D2

CGMP

1

2

3

4

-G116A

GuardamotorPersianas I>I>

F1:1

30.0

N1:

130

.0

F2:1

+H

abita

cion

1/60

.0

N2:

1+

Hab

itaci

on1/

60.0

F3:1

+co

cina

/290

.0

N3:

1+

coci

na/2

90.0

F4:1

+co

cina

/290

.0

N4:

1+

coci

na/2

90.0

F5:1

+as

eo1/

100.

1

N5:

1+

aseo

1/10

0.1

F7:1

+sa

lon/

180.

0

N7:

1+

salo

n/18

0.0

F8:1

+H

abita

cion

1/60

.0

N8:

1+

Hab

itaci

on1/

60.0

F9:1

+H

abita

cion

1/60

.0

N9:

1+

Hab

itaci

on1/

60.0

F10:

1+

coci

na/2

90.0

N10

:1+

coci

na/2

90.0

F11:

120

.0

N11

:120

.0

PE:1 / 20.0

F2:e

nt11

.0

N2:

ent

11.0

F8:e

nt11

.0

N8:

ent

11.0

PE:ent / 11.0

FG1:

1/

+sa

lon/

181.

1

NG

1:1

/+

salo

n/18

1.1

F

N

PE

Page 99: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

10

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

20

4

15/06/2020 EPLAN Software & ServiceGmbH & Co. KG

11

2

Nombre

5

3 / 36

L N PE

-X1ent

L N PE

-X2ent

L N PE

-X3ent

13

14

-Kent

F2:ent/10.2

N2:ent/10.2

PE:ent/10.1

F8:ent/10.6

N8:ent/10.6

Page 100: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

11

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

30

4

15/06/2020 EPLAN Software & ServiceGmbH & Co. KG

20

2

Nombre

5

4 / 36

-pres0.0Sensor

depresencia

Fin:1 N:2

Fout:3

-pres1.0Sensor

depresencia

Fin:1 N:2

Fout:3

-AcoPres0.0F:1

nc:3

GND:4 DO:5 3,3V:6

N:2

-AcoPres1.0F:1

nc:3

GND:4 DO:5 3,3V:6

N:2

-FA1RS-15-3.3 F:1 N:2

+3,3V:4 GND:5

PE:3

1314

pul0.0

1314

pul1.0

1314

pul1.1

x1

x2

-R110k

x1

x2

-R210k

x1

x2

-R310k

BOX1/30.0/31.1/40.0

F11:1/10.8

N11:1/10.8

DI1:140.2

DI2:140.2

PE:1/10.1

DI3:1 / 40.3

DI4:1 / 40.3

DI5:1 / 40.4

PE:2 / +Habitacion1/60.0

F11:2 / +Habitacion1/70.0

N11:2 / +Habitacion1/70.0

+3,

3V:b

ox1

30.1

GN

D:b

ox1

30.1

F11:box1 / 30.1

N11:box1 / 30.1

PE:box1 / 30.1

Page 101: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

20

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

31

4

13/06/2020 EPLAN Software & ServiceGmbH & Co. KG

30

2

Nombre

5

5 / 36

-FA2RS-15-12 F:1 N:2

+12V:4 GND:5

PE:3

ActuadorTodo/nada1 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada2 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada3 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada4 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

x1

x2

-lamp0.0x1

x2

-lamp1.0x1

x2

-lamp1.1

x1

x2

timbre0.0

BOX1/20.0/31.1/40.0

DO1:140.2

F11:box1/20.2

N11:box1/20.2

PE:box1/20.2

DO2:140.3

DO3:140.4

DO4:140.4

+3,3V:box1/20.1

GND:box1/20.1

F1:1/10.1

N1:1/10.1

F11:box1/2/31.2

N11:box1/2/31.2

GND:box1/340.1

F1:2 / +Habitacion1/60.0

N1:2 / +Habitacion1/60.0

GND:box1/231.2

+3,3V:box1/231.2

+12V:box131.2

Page 102: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

30

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

40

4

13/06/2020 EPLAN Software & ServiceGmbH & Co. KG

31

2

Nombre

5

6 / 36

-ActuadorTodo/nadaEnt Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

BOX1/20.0/30.0/40.0

A1

A2

-Kent

F11:box1/2/30.3

N11:box1/2/30.3

F11:box1/3 / 40.1

DO5:140.4

N11:box1/3 / 40.1

GND:box1/2/30.1

+3,3V:box1/2/30.3

+12V:box1/30.4

Page 103: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

31

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

+Habitacion1/60

4

15/06/2020 EPLAN Software & ServiceGmbH & Co. KG

40

2

Nombre

5

7 / 36

ESP-WROOM-32

ESP32(1)GND G23 G22 TXD RXD G21 GND G19 G18 G17 G16 G4 G0 G2 G15 SD1 SD0 CLK

3V3 EN SP SN G34 G35 G32 G33 G25 G26 G27 G14 G12 GND G13 SD2 SD3 GND V5

+

-

BOX1/20.0/30.0/31.1

-T1 ACAC

F11:box1/3/31.5

N11:box1/3/31.5

GND:box1/3/30.2

DI1:120.3

DI2:120.4

DI3:120.9

DI4:120.9

DI5:120.9

DO1:130.4

DO2:130.5

DO3:130.7

DO4:130.8

DO5:131.4

Page 104: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

+recibidor/40

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

70

4

15/06/2020 EPLAN Software & ServiceGmbH & Co. KG

60

2

Nombre

5

8 / 36

L N PE

-X1

L N PE

-X2

L N PE

-X3

L N PE

-X4

L N PE

-X5

L N PE

-X6

L N PE

-X7

13

14

K1

F2:1/+recibidor/10.1

N2:1/+recibidor/10.1

PE:2/+recibidor/20.9

F1:2/+recibidor/30.9

N1:2/+recibidor/30.9

F8:1/+recibidor/10.5

N8:1/+recibidor/10.5

F9:1/+recibidor/10.6

N9:1/+recibidor/10.6

PE:3 / 70.0

N1:3 / 80.0

F1:3 / 80.0

N2:2 / +Habitacio2/140.0

F2:2 / +Habitacio2/140.0

N8:2 / +aseo1/100.1

F8:2 / +aseo1/100.1

N9:2 / +Habitacio2/140.0

F9:2 / +Habitacio2/140.0

Page 105: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

60

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

80

4

14/06/2020 EPLAN Software & ServiceGmbH & Co. KG

70

2

Nombre

5

9 / 36

Sensor LM35temp2.0

+12V GND -12V AO

Div1IN OUT

GND

FA3F N PE

+12VGND-12V

x1

x2

-R468k

x1

x2

-R527k

1314

pul2.0

1314

pul2.1

1314

pul2.2

x1

x2

-R610k

x1

x2

-R710k

x1

x2

-R810k

BOX2/80.1/90.0

1314

pul2.3

x1

x2

-R910k

F11:2/+recibidor/20.9

N11:2/+recibidor/20.9

PE:3/60.9

DI1:2 / 90.2

DI2:2 / 90.3

DI3:2 / 90.3

DI4:2 / 90.3

AI1:290.4

GN

D:b

ox2

80.2

+12

V:bo

x2 80.2

+3,

3V:b

ox2

80.2

F11:box2 / 80.2

N11:3 / +aseo1/110.0

PE:4 / +aseo1/100.1

F11:3 / +aseo1/110.0

N11:box2 / 80.2

PE:box2 / 90.1

Page 106: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

70

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

90

4

15/06/2020 EPLAN Software & ServiceGmbH & Co. KG

80

2

Nombre

5

10 / 36

-ActuadorTodo/nada5 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada6 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

x1

x2

-lamp2.0

A1

A2

K1

BOX2/70.1/90.0

+12V:box2 / 70.2

+3,3V:box2 / 70.5

GND:box2 / 70.1

DO1:290.3

DO2:290.3

F11:box2/70.2

F1:3/60.9 F1:4 / +aseo1/120.1

N1:3/60.9

F11:box2/290.1

N1:4 / +aseo1/120.1

N11:box2/70.2 N11:box2/2 / 90.1

Page 107: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

80

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

+aseo1/100

4

15/06/2020 EPLAN Software & ServiceGmbH & Co. KG

90

2

Nombre

5

11 / 36

ESP-WROOM-32

ESP32(2)GND G23 G22 TXD RXD G21 GND G19 G18 G17 G16 G4 G0 G2 G15 SD1 SD0 CLK

3V3 EN SP SN G34 G35 G32 G33 G25 G26 G27 G14 G12 GND G13 SD2 SD3 GND V5

+

-

BOX2/70.1/80.1

-T2 ACAC

F11:box2/2/80.2

N11:box2/2/80.7

PE:box2/70.2

DI1:270.8

DI2:270.8

DI3:270.8

DI4:270.8

AI1:270.4

DO1:280.4

DO2:280.5

Page 108: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

+Habitacion1/90

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

110

4

16/06/2020 EPLAN Software & ServiceGmbH & Co. KG

100

2

Nombre

5

12 / 36

L N PE

-X8

L N PE

-X9

L N PE

-X10

13

14

K2

F8:2/+Habitacion1/60.9

N8:2/+Habitacion1/60.9

PE:4/+Habitacion1/70.8

F5:1/+recibidor/10.4

N5:1/+recibidor/10.4

PE:5 / 110.0

N5:2 / +aseo2/280.1

F5:2 / +aseo2/280.1

N8:3 / +Habitacio2/140.0

F8:3 / +Habitacio2/140.0

Page 109: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

100

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

120

4

14/06/2020 EPLAN Software & ServiceGmbH & Co. KG

110

2

Nombre

5

13 / 36

Sensor LM35temp3.0

+12V GND -12V AO

-Div2IN OUT

GND

-FA4F N PE

+12VGND-12V

BOX3/120.0/130.0

x1

x2

-R1068k

x1

x2

-R1127k

1314

-pul3.0

1314

-pul3.1

1314

-pul3.2

x1

x2

-R1210k

x1

x2

-R1310k

x1

x2

-R1410k

1314

-pul3.3

x1

x2

-R1510k

F11:3/+Habitacion1/70.8

N11:3/+Habitacion1/70.8

PE:5/100.9

N11:4 / +Habitacio2/150.0

PE:6 / +Habitacio2/140.0

F11:4 / +Habitacio2/150.0

DI1:3 / 130.2

DI2:3 / 130.3

DI3:3 / 130.3

DI4:3 / 130.3

+3,

3V:b

ox3

120.

1

F11:box3 / 120.1

N11:box3 / 120.1

PE:box3 / 130.1 AI1:3130.4

GN

D:b

ox3

/12

0.1

+12

V:bo

x3/

120.

1

Page 110: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

110

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

130

4

15/06/2020 EPLAN Software & ServiceGmbH & Co. KG

120

2

Nombre

5

14 / 36

-ActuadorTodo/nada7 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada8 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada9

/120.7Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada9

/120.6Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

x1

x2

-lamp3.0

-BOX3/110.1/130.0

x1

x2

-lamp3.1

A1

A2

-K2

x1

x2

-lamp3.2

+12V:box3 / 110.2

+3,3V:box3 / 110.5

GND:box3 / 110.2

F11:box3/110.2

DO1:3130.3

DO2:3130.3

F11:box3/2130.1

DO3:3130.4

DO4:3130.4

F1:4/+Habitacion1/80.9

N1:4/+Habitacion1/80.9 N1:5 / +Habitacio2/140.0

F1:5 / +Habitacio2/140.0

N11:box3/110.2N11:box3/2

130.1

Page 111: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

120

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

+Habitacio2/140

4

13/06/2020 EPLAN Software & ServiceGmbH & Co. KG

130

2

Nombre

5

15 / 36

ESP-WROOM-32

ESP32(3)GND G23 G22 TXD RXD G21 GND G19 G18 G17 G16 G4 G0 G2 G15 SD1 SD0 CLK

3V3 EN SP SN G34 G35 G32 G33 G25 G26 G27 G14 G12 GND G13 SD2 SD3 GND V5

+

-

BOX3/110.1/120.0

-T3 ACAC

F11:box3/2/120.1

N11:box3/2/120.9

PE:box3/110.2

DI1:3110.8

DI2:3110.8

DI3:3110.8

DI4:3110.8

AI1:3110.4

DO1:3120.3

DO2:3120.5

DO3:3120.6

DO4:3120.8

Page 112: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

+aseo1/130

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

150

4

16/06/2020 EPLAN Software & ServiceGmbH & Co. KG

140

2

Nombre

5

16 / 36

L N PE

-X11

L N PE

-X12

L N PE

-X13

L N PE

-X14

L N PE

-X15

L N PE

-X16

L N PE

-X17

13

14

K3

F2:2/+Habitacion1/60.9

N2:2/+Habitacion1/60.9

PE:6/+aseo1/110.8

F1:5/+aseo1/120.9

N1:5/+aseo1/120.9

F8:3/+aseo1/100.9

N8:3/+aseo1/100.9

F9:2/+Habitacion1/60.9

N9:2/+Habitacion1/60.9

PE:7 / 150.0

N1:6 / 160.0

F1:6 / 160.0

N2:3 / +cocina/290.0

F2:3 / +cocina/290.0

N8:4 / +salon/180.0

F8:4 / +salon/180.0

N9:3 / +salon/180.0

F9:3 / +salon/180.0

Page 113: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

140

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

160

4

15/06/2020 EPLAN Software & ServiceGmbH & Co. KG

150

2

Nombre

5

17 / 36

Sensor LM35temp4.0

+12V GND -12V AO

Div3IN OUT

GND

FA5F N PE

+12VGND-12V

x1

x2

-R1668k

x1

x2

-R1727k

1314

pul4.0

1314

pul4.1

1314

pul4.2

x1

x2

-R1810k

x1

x2

-R1910k

x1

x2

-R2010k

BOX4/160.1/170.0

1314

pul4.3

x1

x2

-R2110k

F11:4/+aseo1/110.8

N11:4/+aseo1/110.8

PE:7/140.9

DI1:4 / 170.2

DI2:4 / 170.3

DI3:4 / 170.3

DI4:4 / 170.3

AI1:4170.4

GN

D:b

ox4

160.

2

+12

V:bo

x416

0.2

+3,

3V:b

ox4

160.

2

F11:box4 / 160.2

N11:5 / +salon/190.0

PE:8 / +salon/180.0

F11:5 / +salon/190.0

N11:box4 / 160.2

PE:box4 / 170.1

Page 114: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

150

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

170

4

15/06/2020 EPLAN Software & ServiceGmbH & Co. KG

160

2

Nombre

5

18 / 36

-ActuadorTodo/nada10 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada11 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

x1

x2

-lamp4.0

A1

A2

K3

BOX4/150.1/170.0

+12V:box4 / 150.2

+3,3V:box4 / 150.5

GND:box4 / 150.1

DO1:4170.3

DO2:4170.3

F11:box4/150.2

F1:6/140.9 F1:7 / +salon/220.0

N1:6/140.9

F11:box4/2170.1

N1:7 / +salon/220.0

N11:box4/150.2 N11:box4/2 / 170.1

Page 115: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

160

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

+salon/180

4

13/06/2020 EPLAN Software & ServiceGmbH & Co. KG

170

2

Nombre

5

19 / 36

ESP-WROOM-32

ESP32(4)GND G23 G22 TXD RXD G21 GND G19 G18 G17 G16 G4 G0 G2 G15 SD1 SD0 CLK

3V3 EN SP SN G34 G35 G32 G33 G25 G26 G27 G14 G12 GND G13 SD2 SD3 GND V5

+

-

BOX4/150.1/160.1

-T4 ACAC

F11:box4/2/160.2

N11:box4/2/160.6

PE:box4/150.2

DI1:4150.8

DI2:4150.8

DI3:4150.8

DI4:4150.8

AI1:4150.4

DO1:4160.4

DO2:4160.5

Page 116: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

+Habitacio2/170

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

181

4

28/07/2020 EPLAN Software & ServiceGmbH & Co. KG

180

2

Nombre

5

20 / 36

1

2

PE

-X18

1

2

PE

-X19

1

2

PE

-X20

/261.1

1

2

PE

-X21

/261.5

1

2

PE

-X22

1

2

PE

-X23

1

2

PE

-X24

1

2

PE

-X25

1

2

PE

-X26

1

2

PE

-X27

1

2

PE

-X28

L N PE

-X29

13

14

-K4

L N PE

-X30

PE:8/+Habitacio2/150.8

F7:1/+recibidor/10.4

N7:1/+recibidor/10.5

F8:4/+Habitacio2/140.9

N8:4/+Habitacio2/140.9

F9:3/+Habitacio2/140.9

N9:3/+Habitacio2/140.9

PE:9 / 181.1

F7:2 / +patio/270.1

N7:2 / +patio/270.1

F8:5 / +cocina/290.0

N8:5 / +cocina/290.0

F9:4 / +cocina/290.0

N9:4 / +cocina/290.0

Page 117: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

180

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

190

4

15/06/2020 EPLAN Software & ServiceGmbH & Co. KG

181

2

Nombre

5

21 / 36

Mper1

Fup

Fdown

N

PE

1~

2+PE

M

-Mper2

Fup

Fdown

N

PE

1~

2+PE

M

-Mper3

Fup

Fdown

N

PE

1~

2+PE

M

13

14

-KMup1/230.6

13

14

-KMdown1/230.7

13

14

-KMup2/240.2

13

14

-KMdown2/240.4

13

14

-KMup3/240.5

13

14

-KMdown3/240.7

BOX5/190.0/200.0/210.0/220.0/230.0/240.0/250.0/260.0

FG1:1/+recibidor/10.9

NG1:1/+recibidor/10.9

FG1:2 /

NG1:2 /

PE:9/180.8 PE:10 / 190.0

Page 118: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

181

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

200

4

17/06/2020 EPLAN Software & ServiceGmbH & Co. KG

190

2

Nombre

5

22 / 36

Sensor LM35temp5.0

+12V GND -12V AO

Sensor LM35temp5.1

+12V GND -12V AO

-Div4IN OUT

GND

-Div5IN OUT

GND

-FA6F N PE

+12VGND-12V

BOX5/181.0/200.0/210.0/220.0/230.0/240.0/250.0/260.0

PE:10/181.8 PE:11 / +patio/270.1

F11:5/+Habitacio2/150.8

N11:5/+Habitacio2/150.8 N11:6 / +cocina/300.0

F11:6 / +cocina/300.0

AI1:5250.5

AI2:5250.4

F11:box5 / 230.1

N11:box5 / 230.1

PE:box5 / 250.1

+12V:box5 / 200.1

GND:box5 / 200.1

+12V:box5/2 / 230.1

Page 119: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

190

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

210

4

15/06/2020 EPLAN Software & ServiceGmbH & Co. KG

200

2

Nombre

5

23 / 36

BOX5/181.0/190.0/210.0/220.0/230.0/240.0/250.0/260.0

x1

x2

-R2268k

x1

x2

-R2327k

1314

pul5.0

1314

pul5.1

1314

pul5.2

x1

x2

-R2410k

x1

x2

-R2510k

x1

x2

-R2610k

1314

pulperup5.0

x1

x2

-R2710k

1314

pulperdown5.0

1314

pulperup5.1

1314

pulperdown5.1

1314

pulperup5.2

x1

x2

-R2810k

x1

x2

-R2910k

x1

x2

-R3010k

x1

x2

-R3110k

+12V:box5/190.6

GND:box5/190.6

DI1:5 / 250.3

DI2:5 / 250.2

DI3:5 / 250.3

DI4:5 / 250.3

DI5:5 / 250.5

DI6:5 / 250.4

DI7:5 / 250.4

DI8:5 / 250.1

+3,

3V:b

ox5

/21

0.1

GND:box5/1 / 210.1

Page 120: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

200

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

220

4

15/06/2020 EPLAN Software & ServiceGmbH & Co. KG

210

2

Nombre

5

24 / 36

BOX5/181.0/190.0/200.0/220.0/230.0/240.0/250.0/260.0

1314

pulperdown5.2

1314

pul6.0

1314

pul6.1

1314

pul6.2

1314

pul6.3

x1

x2

-R3210k

x1

x2

-R3310k

x1

x2

-R3410k

x1

x2

-R3510k

x1

x2

-R3610k

GND:box5/1/200.8

+3,3V:box5/200.2

DI9:5 / 250.2

DI10:5 / 250.3

DI11:5 / 250.3

DI12:5 / 250.4

DI13:5 / 250.5

GN

D:b

ox5/

2/

220.

1

+3,3V:box5/1 / 220.1

Page 121: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

210

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

230

4

15/06/2020 EPLAN Software & ServiceGmbH & Co. KG

220

2

Nombre

5

25 / 36

Dimmer1Lin N N Lout

+3,3V GND DO DI

-Dimmer2Lin N N Lout

+3,3V GND DO DI

BOX5/181.0/190.0/200.0/210.0/230.0/240.0/250.0/260.0

x1

x2

-lamp5.0x1

x2

-lamp5.1

GND:box5/2/210.2

+3,3V:box5/1/210.8

GND:box5/3 / 230.1

+3,3V:box5/2 / 230.1

DI1

4:5

/26

0.3

DI1

5:5

/26

0.3

DO

1:5

/25

0.5

DO

2:5

/25

0.6

F1:7/+Habitacio2/160.9

N1:7/+Habitacio2/160.9

F1:8 / 230.1

N1:8 / 230.0

Page 122: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

220

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

240

4

28/07/2020 EPLAN Software & ServiceGmbH & Co. KG

230

2

Nombre

5

26 / 36

-ActuadorTodo/nada12 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada13 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada14 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada15 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

BOX5/181.0/190.0/200.0/210.0/220.0/240.0/250.0/260.0

A1

A2

-KMup1

1413 /181.1

A1

A2

-KMdown1

1413 /181.2

x1

x2

lamp6.0x1

x2

lamp6.1

F1:8/220.8 F1:9 / +cocina/310.0

N1:8/220.8 N1:9 / +cocina/310.0

F11:box5/190.2 F11:box5/1 / 240.1

N11:box5/190.2 N11:box5/1 / 240.1

+12V:box5/2/190.6

+3,3V:box5/2/220.8

GND:box5/3/220.8

+12V:box5/3 / 240.1

+3,3V:box5/3 / 240.1

GND:box5/4 / 240.1

DO3:5260.3

DO4:5260.5

DO5:5260.4

DO6:5260.4

Page 123: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

230

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

250

4

28/07/2020 EPLAN Software & ServiceGmbH & Co. KG

240

2

Nombre

5

27 / 36

-ActuadorTodo/nada16 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada17 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada18 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada19 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada20 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

BOX5/181.0/190.0/200.0/210.0/220.0/230.0/250.0/260.0

A1

A2

-KMup2

1413 /181.4

A1

A2

-KMdown2

1413 /181.5

A1

A2

-KMup3

1413 /181.7

A1

A2

-KMdown3

1413 /181.7

A1

A2

-K4

+12V:box5/3/230.8

+3,3V:box5/3/230.8

GND:box5/4/230.8

F11:box5/1/230.8

N11:box5/1/230.8

DO7:5260.1

DO8:5260.2

DO9:5260.3

DO10:5260.3

F11:box5/2 / 250.1

N11:box5/2 / 250.1

DO11:5260.5

Page 124: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

240

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

260

4

28/07/2020 EPLAN Software & ServiceGmbH & Co. KG

250

2

Nombre

5

28 / 36

ESP-WROOM-32

ESP32(5)GND G23 G22 TXD RXD G21 GND G19 G18 G17 G16 G4 G0 G2 G15 SD1 SD0 CLK

3V3 EN SP SN G34 G35 G32 G33 G25 G26 G27 G14 G12 GND G13 SD2 SD3 GND V5

+

-

-BOX5/181.0/190.0/200.0/210.0/220.0/230.0/240.0/260.0

-T5 ACAC

F11:box5/2/240.8

N11:box5/2/240.8

PE:box5/190.2

AI1:5190.4

AI2:5190.5

DI1:5200.5

DI2:5200.5

DI3:5200.5

DI4:5200.5

DI5:5200.8

DI6:5200.8

DI7:5200.8

DO1:5220.3

DO2:5220.5

DI8:5200.8

DI9:5210.8

DI10:5210.8

DI11:5210.8

DI12:5210.8

DI13:5210.8

PE:box5/1 / 260.1 N11:box5/3260.1

F11:box5/3260.1

Page 125: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

250

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

261

4

28/07/2020 EPLAN Software & ServiceGmbH & Co. KG

260

2

Nombre

5

29 / 36

ESP-WROOM-32

ESP32(6)GND G23 G22 TXD RXD G21 GND G19 G18 G17 G16 G4 G0 G2 G15 SD1 SD0 CLK

3V3 EN SP SN G34 G35 G32 G33 G25 G26 G27 G14 G12 GND G13 SD2 SD3 GND V5

+

-

-BOX5/181.0/190.0/200.0/210.0/220.0/230.0/240.0/250.0

-T6 ACAC

F11:box5/3/250.7

N11:box5/3/250.6

PE:box5/1/250.4

DI14:5220.3

DI15:5220.5

DO3:5230.2

DO4:5230.4

DO5:5230.5

DO6:5230.7

DO7:5240.2

DO8:5240.3

DO9:5240.5

DO10:5240.7

DO11:5240.8

Page 126: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

260

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

+patio/270

4

16/06/2020 EPLAN Software & ServiceGmbH & Co. KG

261

2

Nombre

5

30 / 36

L N PE

-X20/180.1

L N PE

-X21/180.1

RouterWifi

Raspberry pi

EthernetEthernet

Page 127: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

+salon/261

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

+aseo2/280

4

16/06/2020 EPLAN Software & ServiceGmbH & Co. KG

270

2

Nombre

5

31 / 36

L N PE

-X31

L N PE

-X32

PE:11/+salon/190.9

N7:2/+salon/180.8

F7:2/+salon/180.8

PE:12 / +aseo2/280.1

N7:3 /

F7:3 /

Page 128: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

+patio/270

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

+cocina/290

4

16/06/2020 EPLAN Software & ServiceGmbH & Co. KG

280

2

Nombre

5

32 / 36

L N PE

-X33

PE:12/+patio/270.8 PE:13 / +cocina/290.0

F5:2/+aseo1/100.9

N5:2/+aseo1/100.9 N5:3 / +cocina/290.0

F5:3 / +cocina/290.0

Page 129: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

+aseo2/280

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

300

4

17/06/2020 EPLAN Software & ServiceGmbH & Co. KG

290

2

Nombre

5

33 / 36

L N PE

-X36

1

2

PE

-X37

1

2

PE

-X38

1

2

PE

-X39

1

2

PE

-X40

1

2

PE

-X41

1

2

PE

X42

1

2

PE

-X43

1

2

PE

-X35

1

2

PE

X34 L N PE

-X44

L N PE

-X45

L N PE

-X46

13

14

-K5

PE:13/+aseo2/280.8

F2:3/+Habitacio2/140.9

N2:3/+Habitacio2/140.9

N3:1/+recibidor/10.2

F3:1/+recibidor/10.2

N4:1/+recibidor/10.3

F4:1/+recibidor/10.3

F5:3/+aseo2/280.8

N5:3/+aseo2/280.8

F8:5/+salon/180.8

N8:5/+salon/180.8

N9:4/+salon/180.8

F9:4/+salon/180.8

N10:1/+recibidor/10.7

F10:1/+recibidor/10.7

PE:14 / 300.0

Page 130: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

290

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

310

4

28/07/2020 EPLAN Software & ServiceGmbH & Co. KG

300

2

Nombre

5

34 / 36

-FA7F N PE

+12VGND-12V

Sensor LM35-temp8:0

+12V GND -12V AO

-Div6IN OUT

GND

Sensor MQ2

BOX6/310.0

x1

x2

-R3747k

x1

x2

-R3833k

gas8.0

+5V GND DO AO

x1

x2

-R4133k

x1

x2

-R3933k

x1

x2

-R4033k

1314

pul8.0

1314

pul8.1

1314

pul8.2

x1

x2

-R4210k

x1

x2

-R4310k

x1

x2

-R4410k

1314

-pul7.0

x1

x2

-R4510k

PE:14/290.8 PE:15 /

F11:6/+salon/190.9

N11:6/+salon/190.9 N11:7 /

F11:7 /

F11:box6 / 310.1

N11:box6 / 310.1

PE:box6 / 320.1

AI1:6320.3

DI1:6320.3

+3,3V:box6 / 310.1

GND:box6 / 310.1

DI4:6 / 320.4

DI3:6 / 320.3

DI2:6 / 320.2

+12V:box6310.1

DI5:6 / 320.4

Page 131: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

300

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93

320

4

17/06/2020 EPLAN Software & ServiceGmbH & Co. KG

310

2

Nombre

5

35 / 36

-Dimmer1Lin N N Lout

+3,3V GND DO DI

-ActuadorTodo/nada20 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada21 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada22 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

-ActuadorTodo/nada23 Fin:1

Fout:2+12V:3 +3,3V:4 GND:5

DI:4

BOX6/300.0

A1

A2

-K5x1

x2

-P1

x1

x2

lamp8.0

x2

x1

-lam

p8.1

x1

x2

lamp7.0

F11:box6/300.1

N11:box6/300.1

+3,3V:box6/300.9

+12V:box6/300.1

GND:box6/300.9

F1:9/+salon/230.8

N1:9/+salon/230.8

N11:box6/2 / 320.1

F11:box6/2 / 320.1

DO1:6320.1

DO2:6320.1

DO3:6320.3

DO

5:6

/32

0.6

DI6

:6/

320.

4

F1:10 /

N1:10/

DO4:6320.3

Page 132: Proyecto de la instalación domótica de una vivienda

Hoja

Página

Instalación domótica con Raspberry Pi y ESP32 mediante MQTTResp.

310

Original

IEC_tpl003

EPLANSERBO

Fecha

Fecha

Sustituido por

1

Cambio

0 76

Probado

Sustitución por

8 93 4

28/07/2020 EPLAN Software & ServiceGmbH & Co. KG

320

2

Nombre

5

36 / 36

ESP-WROOM-32

ESP32(6)GND G23 G22 TXD RXD G21 GND G19 G18 G17 G16 G4 G0 G2 G15 SD1 SD0 CLK

3V3 EN SP SN G34 G35 G32 G33 G25 G26 G27 G14 G12 GND G13 SD2 SD3 GND V5

+

-

-BOX5

-T7 ACAC

F11:box6/2/310.3

N11:box6/2/310.8

PE:box6/300.1

AI1:6300.3

DI1:6300.4

DI2:6300.9

DI3:6300.9

DI4:6300.9

DI5:6300.9

DI6:6310.8

DO5:6310.8

DO1:6310.2

DO2:6310.3

DO3:6310.5

DO4:6310.7