Tabla de contenido:
- Paso 1: descripción general del circuito
- Paso 2: Descripción general del sistema de software
- Paso 3: descripción general del software
- Paso 4: Calibración del sensor
- Paso 5: Convención de nomenclatura de temas de MQTT
- Paso 6: Configuración de OpenHAB
- Paso 7: probar el diseño
- Paso 8: Conclusión
- Paso 9: Referencias utilizadas
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
Preámbulo
Este artículo documenta la robustez práctica y el desarrollo posterior de un Instructable anterior: 'Pimping' su primer dispositivo WiFi de IoT. Parte 4: IoT, automatización del hogar, incluida toda la funcionalidad de software necesaria para permitir la implementación exitosa en un entorno doméstico.
Introducción
Como se mencionó anteriormente, este Instructable describe la combinación de un ejemplo anterior de IoT con un diseño de sistemas confiable que permite el manejo exitoso de casos de uso prácticos como; Pérdida de energía catastrófica, falla del MQTT Broker, falla de WiFi N / W, reconfiguración del sensor remoto, estrategia de informes configurable para reducir el tráfico de la red y calibración del sensor a medida.
Se crearon un total de 6 dispositivos (ver imagen 1 arriba) y se distribuyeron por mi hogar para formar mi primera red de sensores de IoT.
El Instructable también ve una revisión de la convención de nomenclatura MQTT tal como se usó en la serie inicial de Automatización del Hogar de IoT dando paso a una estructura práctica más equilibrada que permite una depuración más simple del tráfico de IoT en un entorno de múltiples dispositivos de IoT.
A continuación, se incluyen todos los detalles del diseño del sensor de IoT, incluidos; construcción, código fuente, estrategia de prueba y configuraciones OpenHAB.
¿Qué partes necesito?
- 1 de ESP8266-01,
- 2 condensadores electrolíticos de 1uF,
- 3 resistencias de 10K,
- 1 resistencia 330R,
- 1 de 3 mm de diámetro. DIRIGIÓ,
- 1 de LD1117-33v, 3v3 LDO VReg. (Farnell aquí),
- 1 sensor de temperatura / humedad DHT22,
- 1 conector doble de 4 vías de 0,1 ",
- 1 caja de plástico CAMDENBOSS RX2008 / S-5, caja de encapsulado, ABS, 38 mm, 23 mm (aquí Farnell),
- 1 conector de alimentación de CC, enchufe, 1 A, 2 mm, montaje en panel (aquí Farnell),
- 1 disipador de calor TO-220 24,4 ° C / W (aquí Farnell),
- Varios tubos termorretráctiles (amarillo, aquí Ebay),
- Cable plano IDC de varias longitudes,
- Compuesto del disipador de calor,
- Veroboard,
- Dispositivo de programación ESP8266-01. Mira aquí; Práctica construcción de circuitos con placa de banda, paso 9 en adelante.
¿Qué software necesito?
- Arduino IDE 1.6.9
- Arduino IDE configurado para programar el ESP8266-01. Mira aquí; Configuración del IDE de Arduino para programar el ESP8266-01
¿Qué herramientas necesito?
- Soldador,
- Taladro y varios bits,
- Archivos
- Sierra,
- Vicio robusto,
- Pistola de calor,
- DMM.
¿Qué habilidades necesito?
- Un mínimo de conocimientos de electrónica,
- Conocimiento de Arduino y su IDE,
- Habilidades de fabricación rudimentarias (soldadura, corte, limado, taladrado, etc.),
- Algo de paciencia
- Algún conocimiento de su red doméstica.
Tópicos cubiertos
- Resumen del circuito
- Descripción general del sistema de software
- Descripción general del software
- Calibración del sensor
- Convención de nomenclatura de temas de MQTT
- Configuración de OpenHAB
- Probando el diseño
- Conclusión
- Referencias utilizadas
Enlaces de la serie
A la parte 7: Controlador de luces de estudio (reelaborado). Parte 7: IoT, automatización del hogar
A la parte 9: Controlador de red de IoT. Parte 9: IoT, automatización del hogar
Paso 1: descripción general del circuito
La imagen 1 de arriba muestra el diseño de circuito completo para el sensor de IoT.
En el corazón del dispositivo IoT se encuentra el ESP8266-01, que está conectado a un sensor de temperatura / humedad DHT22 a través de una resistencia pull up de 10K a GPIO2. Un 5v externo se obtiene con una fuente de modo conmutado y se alimenta al dispositivo a través de un zócalo de montaje en panel de CC de 2 mm y se regula localmente con un regulador de voltaje LD1117-33v, 3v3 LDO montado en un disipador de calor externo con un tornillo y tuerca de cabeza plana BZP M3.
El diseño incluye un LED rojo de 3 mm conectado a GPIO0 que se utiliza para dar una indicación local del estado del dispositivo IoT durante el inicio o cualquier condición de error posterior. También se puede utilizar para identificar el dispositivo mediante activación manual a través de la interfaz openHAB.
El diseño completo encaja perfectamente en una caja de encapsulado de ABS como se muestra arriba en la imagen 2 y se diseñó específicamente para garantizar que el sensor esté lo más lejos posible del regulador para evitar el sesgo debido a los efectos del calentamiento local (imagen 7 arriba).
La placa de circuito es una sola pieza de veroboard, cortada a la forma y hecha para encajar en el gabinete (imagen 3 arriba). Esta placa se fija en su posición con un tornillo de nailon avellanado M3 y dos tuercas que encajan a ras con la parte inferior del sensor, lo que permite que se asiente sobre una superficie plana.
Las imágenes 4… 6 muestran varios estados de construcción.
Paso 2: Descripción general del sistema de software
Este dispositivo de detección de temperatura y humedad de IoT contiene seis componentes de software clave, como se muestra en la imagen 1 anterior.
SPIFFS
Este es el sistema de archivo flash SPI integrado y se utiliza para contener la siguiente información (ver imagen 2 arriba);
- Iconos y html de la 'Página de inicio de configuración del sensor': el dispositivo IoT lo atiende cuando no puede conectarse a su red WiFi de IoT (generalmente debido a información de seguridad incorrecta) y proporciona al usuario un medio para configurar el sensor de forma remota sin la necesidad para reprogramar o cargar nuevo contenido SPIFFS.
- Información de seguridad: contiene la información utilizada en el encendido por el dispositivo IoT para conectarse a su red WiFi IoT y MQTT Broker. La información enviada a través de la 'Página de inicio de configuración del sensor' se escribe en este archivo ('secvals.txt').
- Información de calibración: la información contenida en este archivo ('calvals.txt') se utiliza para calibrar el sensor de temperatura / humedad integrado en caso de que sea necesario. Las constantes de calibración solo se pueden escribir en el dispositivo IoT a través de comandos MQTT de un agente MQTT.
Nota: Para configurar inicialmente el dispositivo, consulte aquí para obtener detalles completos sobre cómo usar SPIFFS con el IDE de Arduino.
Servidor mDNS
Esta funcionalidad se invoca cuando el dispositivo IoT no ha podido conectarse a su red WiFi como una estación WiFi y, en cambio, se ha convertido en un punto de acceso WiFi similar a un enrutador WiFi doméstico. En el caso de un enrutador de este tipo, normalmente se conectaría ingresando la dirección IP de algo como 192.168.1.1 (generalmente impresa en una etiqueta adherida a la caja) directamente en la barra de URL de su navegador, después de lo cual recibirá una página de inicio de sesión para ingresar. el nombre de usuario y la contraseña para permitirle configurar el dispositivo.
Para el ESP8266 en modo AP (modo de punto de acceso), el dispositivo tiene por defecto la dirección IP 192.168.4.1, sin embargo, con el servidor mDNS en ejecución, solo tiene que ingresar el nombre amigable para humanos 'SENSORSVR.local' en la barra de URL del navegador para ver la 'Página de inicio de configuración del sensor'.
Cliente MQTT
El cliente MQTT proporciona toda la funcionalidad necesaria para; conéctese a su broker MQTT de la red de IoT, suscríbase a los temas que elija y publique cargas útiles para un tema determinado. En resumen, proporciona la funcionalidad principal de IoT.
Servidor web
Como se mencionó anteriormente, si el dispositivo IoT no puede conectarse a la red WiFi cuyo SSID, P / W, etc.están definidos en el archivo de información de seguridad que se encuentra en SPIFFS, el dispositivo se convertirá en un punto de acceso. Una vez conectado a la red WiFi proporcionada por el punto de acceso, la presencia de un servidor web HTTP le permite conectarse directamente al dispositivo y cambiar su configuración mediante el uso de un navegador web HTTP, su propósito es servir el 'Inicio de configuración del sensor Page 'página web que también se encuentra en SPIFFS.
Estación WiFi
Esta funcionalidad le da al dispositivo IoT la capacidad de conectarse a una red WiFi doméstica usando los parámetros en el archivo de información de seguridad, sin esto, su dispositivo IoT no podrá suscribirse / publicar en el Broker MQTT.
Punto de acceso WiFi
La capacidad de convertirse en un punto de acceso WiFi es un medio por el cual el dispositivo IoT le permite conectarse a él y realizar cambios de configuración a través de una estación WiFi y un navegador (como Safari en el iPad de Apple).
Este punto de acceso emite un SSID = "SENSOR" + los últimos 6 dígitos de la dirección MAC del dispositivo IoT. La contraseña para esta red cerrada se llama imaginativamente 'PASSWORD'
Paso 3: descripción general del software
Preámbulo Para compilar correctamente este código fuente, necesitará las siguientes bibliotecas adicionales;
PubSubClient.h
- Por: Nick O'Leary
- Propósito: permite que el dispositivo publique o se suscriba a temas de MQTT con un Broker determinado.
- De:
DHT.h
- Por: Adafruit
- Propósito: Biblioteca para sensor de temperatura / humedad DHT
- De:
Descripción general del código
El software hace uso de la máquina de estado como se muestra en la imagen 1 arriba (copia completa de la fuente a continuación). Hay 5 estados principales como se muestra a continuación;
-
EN ESO
Este estado de inicialización es el primer estado que se ingresa después del encendido
-
NOCONFIG
Este estado se ingresa si después del encendido se detecta un archivo secvals.txt no válido o faltante
-
PENDIENTE NO
Este estado es transitorio, se ingresa mientras no existe conexión de red WiFi
-
PENDIENTE MQTT
Este estado es transitorio, se ingresa después de que se ha establecido una conexión de red WiFi y mientras no existe conexión con un corredor MQTT en esa red
-
ACTIVO
Este es el estado operativo normal al que se ingresa una vez que se ha establecido una conexión de red WiFi y una conexión de MQTT Broker. Es durante este estado que la funcionalidad de temperatura y humedad del sensor se publica en MQTT Broker
Los eventos que controlan las transiciones entre estados se describen en la imagen 1 anterior. Las transiciones entre estados también se rigen por los siguientes parámetros de SecVals;
- Primera dirección IP del corredor de MQTT. En forma decimal con puntos AAA. BBB. CCC. DDD
- Segundo puerto de intermediario MQTT. En forma de número entero.
- La tercera conexión de MQTT Broker intenta realizar antes de cambiar del modo STA al modo AP. En forma de número entero.
- 4to SSID de red WiFi. En texto de forma libre.
- Quinta contraseña de red WiFi. En texto de forma libre.
Como se mencionó anteriormente, si el dispositivo IoT no puede conectarse como una estación WiFi a la red WiFi cuyo SSID y P / W se definen en secvals.txt en SPIFFS, el dispositivo IoT se convertirá en un punto de acceso. Una vez conectado a este punto de acceso, aparecerá la 'Página de inicio de configuración del sensor' como se muestra arriba en la Imagen 2 (ingresando 'SENSORSVR.local' o 192.168.4.1 en la barra de direcciones URL de su navegador). Esta página de inicio permite la reconfiguración del sensor a través de un navegador
Acceso remoto mientras está en estado ACTIVO
Una vez conectado al MQTT Broker, también es posible recalibrar y reconfigurar el dispositivo a través de publicaciones temáticas de MQTT. El archivo calvals.txt tiene acceso R / W y secvals.txt tiene acceso de solo escritura expuesto.
Depuración del usuario
Durante la secuencia de arranque, el LED del dispositivo IoT proporciona la siguiente información de depuración
- 1 Flash corto: no hay archivo de configuración ubicado en SPIFFS (secvals.txt)
- 2 destellos cortos: el dispositivo IoT está intentando conectarse a la red WiFi
- Iluminación continua: el dispositivo IoT está intentando conectarse a MQTT Broker
- Apagado: el dispositivo está activo
- Nota 1: La 'Página de inicio de configuración del sensor' no utiliza enchufes seguros y, por lo tanto, depende de que su red sea segura.
- Nota 2: Para programar cada dispositivo de IoT, la cadena MQTT deberá editarse antes de la descarga. Esto se debe a que el número del sensor se ha incrustado en la cadena de temas MQTT. es decir. 'WFD / THSen / 100 / HumdStatus / 1' para mis 6 dispositivos están numerados del 1 al 6 respectivamente.
Paso 4: Calibración del sensor
Cuando el dispositivo de IoT se enciende, como parte de la secuencia de inicio, se lee un archivo llamado 'cavals.txt' de SPIFFS. El contenido de este archivo son constantes de calibración como se indica arriba en la imagen 1. Estas constantes de calibración se utilizan para ajustar las lecturas adquiridas del sensor para alinearlas con un dispositivo de referencia. Hay un valor adicional que define una estrategia de informes para el dispositivo y se describe a continuación junto con el procedimiento seguido para calibrar los sensores.
Estrategia de reporte Este parámetro determina cómo el sensor remoto reporta cualquier cambio paramétrico ambiental local. Si se selecciona un valor de 0, el sensor remoto publicará cualquier cambio que vea en los valores de temperatura o humedad cada vez que se lea el sensor (aproximadamente cada 10 segundos). Cualquier otro valor retrasará la publicación de un cambio entre 1… 60 minutos. La modificación de este parámetro permite optimizar el tráfico de la red MQTT.
Calibración de temperatura
Para calibrar los sensores, se colocaron en estrecha proximidad física entre sí, como se muestra arriba en la imagen 2. Junto a ellos, coloqué un multímetro digital con un termopar calibrado conectado (Fluke 87 V) y luego monitoreé las salidas de cada dispositivo a través de la temperatura OpenHAB. página de tendencias en el transcurso de un día para obtener un buen cambio de temperatura. Noté tanto el desplazamiento estático (cero elevado 'C') como la tasa de cambio de cada dispositivo (ganancia o pendiente del gráfico 'M') en relación con el valor procedente del termopar calibrado. Luego calculé la relación simple y = mx + c (encontré que era lo suficientemente lineal como para ser una aproximación cercana a un gráfico de línea recta) y programé las correcciones necesarias en las constantes de calibración a través de MQTTSpy.
Luego, los dispositivos se monitorearon durante 24 horas más para garantizar que la calibración se realizó correctamente. Una indicación de cuáles eran las trazas de temperatura en la página de tendencias de temperatura de OpenHAB estaban prácticamente una encima de la otra.
Por supuesto, si solo está interesado en una aproximación a la temperatura, puede dejar todos los valores de calibración por defecto.
Calibración de humedad
Como no poseo ningún medio para registrar con precisión o incluso controlar la humedad ambiental local, para calibrar los sensores utilicé un enfoque similar al anterior, colocando todos los dispositivos en una proximidad física cercana (imagen 2) y simplemente monitoreando su salida a través de OpenHAB Página de tendencia de humedad. Luego elegí el dispositivo n. ° 1 como referencia de calibración y calibré todos los dispositivos relacionados con esto.
Paso 5: Convención de nomenclatura de temas de MQTT
Después de mucho ensayo y error, me decidí por la convención de nomenclatura de temas que se describe en la imagen 1 anterior.
A saber, 'AccessMethod / DeviceType / WhichDevice / Action / SubDevice'
No es perfecto, pero permite aplicar filtros útiles para ver todas las salidas del sensor para un valor paramétrico dado, lo que permite una comparación fácil como en la imagen 2 anterior con MQTTSpy. También admite agrupaciones lógicas de funcionalidad razonablemente extensibles dentro de un dispositivo IoT determinado.
Al implementar estos temas en el software, utilicé cadenas de temas codificadas de forma rígida con identificadores numéricos incrustados fijos para cada dispositivo en lugar de generar dinámicamente los temas en tiempo de ejecución para ahorrar RAM y mantener un alto rendimiento.
Nota: Si no está seguro de cómo utilizar MQTTSpy, consulte aquí 'Configuración de un agente MQTT'. Parte 2: IoT, automatización del hogar '
Paso 6: Configuración de OpenHAB
Modifiqué la configuración de OpenHAB dada en mi Instructable anterior (aquí) y agregué entradas individuales para;
- Garaje,
- Sala,
- Sala,
- Cocina
- Cuarto de huéspedes
- Recamara principal
En el mapa del sitio, vea la imagen 1 arriba.
Para cada una de estas entradas, agregué mapas de sitio individuales que exponen los valores ambientales locales (Ver imagen 2 arriba);
- Temperatura
- Humedad
- Índice de calor
También incluí un interruptor para controlar el led local montado dentro del sensor.
Las imágenes 3… 5 muestran trazas individuales en vivo durante un período de 24 horas para temperatura, humedad y RSSI (indicación de intensidad de señal recibida, básicamente una medida de qué tan bien el sensor puede ver la red WiFi).
La imagen 6 da un ejemplo de una tendencia de humedad a largo plazo durante el período de una semana.
Nota 1: Si no está seguro de cómo usar OpenHAB, consulte aquí 'Instalación y configuración de OpenHAB. Parte 6: IoT, automatización del hogar '
Nota 2: A continuación se proporciona una copia del mapa del sitio modificado, los archivos de reglas y elementos, los iconos, etc.
Paso 7: probar el diseño
En su mayor parte, probé el dispositivo IoT a través de la conexión MQTT con MQTT Spy, monitoreando la salida del LED y depurando el tráfico en la interfaz serial. Esto me permitió ejercitar todos los temas suscritos disponibles y verificar las respuestas publicadas. Aunque esto se logró manualmente y se volvió un poco tedioso a veces, permitió una cobertura del 100%.
Sin embargo, la máquina de estado principal resultó ser un poco complicada de probar, ya que dependía de la presencia o ausencia de una red WiFi, cuyo acceso requería conjuntos de parámetros específicos. Simplemente no era práctico usar la red doméstica para esto.
Para solucionar este problema, creé mi propio conjunto de redes ficticias usando ESP8266-01 configurado como puntos de acceso (imagen 1) con SSID de 'DummyNet1' y 'DummyNet2' respectivamente. El uso del circuito en la imagen 2 arriba del LED dio una indicación de si un dispositivo IoT se había conectado a él. Si bien esta no fue una solución de prueba perfecta (es decir, cada una de estas redes WiFi ficticias no contenía un servidor MQTT), fue posible probar completamente la máquina de estado.
He incluido una copia del código fuente a continuación.
Paso 8: Conclusión
General
El software en los dispositivos de IoT ha funcionado de manera confiable durante muchos meses y ahora se recupera de cortes de energía domésticos (principalmente causados por mí). En general, son dispositivos bastante robustos que brindan datos consistentes y precisos.
Mejoras
Al desarrollar rutinas de software para leer y escribir en SPIFFS, escribí código que, en retrospectiva, puede ser un poco más avanzado de lo que pretendía, utilizando punteros vacíos, refundición y punteros a punteros. Si bien es muy flexible y hace bien el trabajo, la próxima vez puedo usar JSON algo similar a ConfigFile.ino para mantenerlo un poco más simple.
-
Arduino GIT HUB Core
https://github.com/esp8266/Arduino
-
ConfigFile.ino Fuente
https://github.com/esp8266/Arduino/tree/master/libraries/esp8266/examples/ConfigFile
Lista de deseos
Tenía la intención de usar un cliente mDNS para conectarme al Broker, pero la biblioteca era demasiado defectuosa. Por eso es necesario especificar la dirección IP del Broker MQTT en lugar de 'MQTTSVR.local'. Si la biblioteca mDNS se vuelve más estable en el futuro, agregaré esta capacidad al dispositivo.
Hubiera sido bueno tener un medio para monitorear y controlar con precisión la humedad ambiental para calibrar los sensores. Sin embargo, dicho esto, el método de calibración elegido da buenas lecturas relativas y parece razonablemente preciso de acuerdo con la especificación en la hoja de datos DHT22.
Finalmente, dada la complejidad del software, encontré que probar completamente el código después de un cambio importante se estaba volviendo lento. Es posible que considere la posibilidad de realizar pruebas automatizadas en una fecha posterior.
Paso 9: Referencias utilizadas
Usé las siguientes fuentes para armar este Instructable;
PubSubClient.h
- Por: Nick O'Leary
- De:
DHT.h
- Por: Adafruit
- De:
Hoja de datos DHT22