Una estación meteorológica ESP-Now Home: 9 pasos (con imágenes)
Una estación meteorológica ESP-Now Home: 9 pasos (con imágenes)
Anonim
Una estación meteorológica ESP-Now Home
Una estación meteorológica ESP-Now Home

Quería tener una estación meteorológica en casa durante bastante tiempo y una que todos en la familia pudieran controlar fácilmente para determinar la temperatura y la humedad. Además de monitorear las condiciones exteriores, quería monitorear habitaciones específicas en la casa y en el taller de mi garaje. Eso nos permitiría saber cuándo es un buen momento para ventilar la casa o hacer funcionar el deshumidificador (aquí llueve mucho durante el invierno). Lo que creé es un sistema de sensores basado en ESP-Now que informa a un servidor web local que cualquiera puede verificar desde su computadora o teléfono. Para el teléfono escribí una simple aplicación de Android para hacerlo aún más fácil.

Paso 1: Detalles de diseño

Detalles de diseño
Detalles de diseño

Quería tener varias estaciones de sensores que pudiera colocar en diferentes ubicaciones y que informaran a una estación principal (o concentrador) que guardaría la información. Después de probar varias ideas, decidí usar el protocolo ESP-Now de Espressif, ya que permitía una comunicación rápida directamente entre dispositivos. Puedes leer un poco sobre ESP-Now aquí y este repositorio de GitHub fue una gran parte de mi inspiración.

La primera imagen muestra el diseño del sistema. Cada sensor informa sus medidas a un dispositivo de puerta de enlace que envía los datos al servidor principal mediante una conexión serie cableada. La razón de esto es que el protocolo ESP-Now no puede estar activo al mismo tiempo que la conexión WIFI. Para que un usuario acceda a la página web, la WIFI debería estar encendida en todo momento y eso imposibilita el uso de las comunicaciones ESP-Now en el mismo dispositivo. Si bien el dispositivo de puerta de enlace debe ser un dispositivo basado en Espressif (capaz de ESP-Now), el servidor principal podría ser cualquier dispositivo capaz de ejecutar una página web.

Algunas estaciones de sensores funcionarían con baterías (o baterías cargadas con energía solar) y otras simplemente tendrían energía de la red. Sin embargo, quería que todos usaran la menor cantidad de energía posible y ahí es donde la función de "sueño profundo" disponible para los dispositivos ESP8266 y ESP32 es extremadamente útil. Las estaciones de sensores se despertaban periódicamente, tomaban medidas y las enviaban al dispositivo de puerta de enlace y volvían a dormir durante un período de tiempo preprogramado. Su período de activación de solo unos 300 ms cada 5 minutos (en mi caso) reduce significativamente su consumo de energía.

Paso 2: Sensores

Sensores
Sensores
Sensores
Sensores

Hay varios sensores para elegir para medir parámetros ambientales. Decidí quedarme solo con sensores capaces de comunicaciones I2C, ya que permitía mediciones rápidas y funcionaría en cualquiera de los dispositivos que tenía. En lugar de trabajar con circuitos integrados directamente, busqué módulos listos para usar que tuvieran los mismos pines para simplificar mis diseños. Comencé con solo querer medir la temperatura y la humedad y, por lo tanto, elegí un módulo basado en SI7021. Más tarde, quería un sensor que también pudiera medir la presión y decidí probar los módulos de sensor basados en BME280. Para algunas ubicaciones, incluso quería monitorear los niveles de luz y el módulo BH1750 era ideal para esto como un módulo de sensor separado. Compré mis módulos de sensores en eBay y estos son los módulos que recibí:

  • BME280 (GY-BMP / E280), mide temperatura, humedad y presión
  • SI7021 (GY-21), mide la temperatura y la humedad
  • BH1750 (GY-302), medidas de luz

Hay dos estilos de módulos de PCB GY-BMP / E280 que se pueden encontrar. Ambos comparten el mismo pin out para los pines 1 a 4. Un módulo tiene dos pines adicionales, CSB y SDO. Esos dos pines están preconectados en la versión de 4 pines del módulo. El nivel del pin SDO determina la dirección I2C (Tierra = predeterminado de 0x76, VCC = 0x77). El pin CSB debe estar conectado a VCC para seleccionar la interfaz I2C. Prefiero el módulo de 4 pines, ya que está listo para usar tal como está para mi propósito.

En general, estos módulos son muy convenientes de usar ya que ya tienen resistencias pull-up instaladas para las líneas de comunicaciones y todos funcionan con 3.3V, por lo que son compatibles con las placas basadas en ESP8266. Tenga en cuenta que los pines de estos circuitos integrados de sensor generalmente no son tolerantes a 5 V, por lo que conectarlos directamente con algo como un Arduino Uno puede dañarlos permanentemente.

Paso 3: Estaciones de sensores

Estaciones de sensores
Estaciones de sensores

Como se mencionó, todas las estaciones de sensores serían dispositivos Espressif que utilizan el protocolo de comunicaciones ESP-Now. A partir de proyectos y experimentación anteriores, tuve varios dispositivos diferentes disponibles para realizar mis pruebas iniciales e incorporarlas al diseño final. Tenía los siguientes dispositivos a mano:

  • dos módulos ESP-01
  • dos mini placas de desarrollo Wemos D1
  • una placa de desarrollo Lolin ESP8266
  • una placa de kit WIFI serie ESP12E
  • una placa GOOUUU ESP32 (una placa de desarrollo de 38 pines)

También tenía una placa de desarrollo Wemos D1 R2, pero había problemas con ella que no permitían que se despertara del sueño profundo y, como dispositivo de entrada, se bloqueaba y no se reiniciaba correctamente. Lo reparé más tarde y se convirtió en parte del proyecto de apertura de puertas de garaje. Para que funcione el "sueño profundo", el pin RST del ESP8266 debe estar conectado al pin GPIO16, para que el temporizador de apagado pueda despertar el dispositivo. Idealmente, esta conexión debe realizarse con un diodo Schottky (cátodo a GPIO16) para que el restablecimiento manual a través de la conexión USB-TLL durante la programación siga funcionando. Sin embargo, una resistencia de valor bajo (300-ish Ohm) o incluso una conexión de cable directa aún pueden tener éxito.

Los módulos ESP-01 no permiten un fácil acceso al pin GPIO16 y se debe soldar directamente al IC. Esta no es una tarea sencilla y no se la recomendaría a todo el mundo. La placa del kit WIFI en serie ESP12E fue un elemento un poco novedoso y requirió bastantes cambios para que fuera útil para mi propósito. Los tableros más fáciles de usar fueron los tableros tipo mini Wemos D1 y el tablero Lolin. Los dispositivos ESP32 no requieren ninguna modificación para que funcione el sueño profundo. Andreas Spiess tiene un buen Instructable sobre esto.

Paso 4: Estación de sensores ESP-01

Estación de sensores ESP-01
Estación de sensores ESP-01
Estación de sensores ESP-01
Estación de sensores ESP-01
Estación de sensores ESP-01
Estación de sensores ESP-01

En todas las estaciones de sensores, los módulos de sensores están montados verticalmente para reducir la cantidad de polvo que puede acumularse en ellos. No todos están en recintos y no puedo montarlos en recintos. La razón de esto es que los dispositivos pueden calentarse y afectar las lecturas de temperatura y humedad si no están suficientemente ventilados.

Las placas ESP-01 son muy compactas y tienen pocos pines de E / S digitales para trabajar, pero es suficiente para la interfaz I2C. Sin embargo, las placas requieren una modificación complicada para permitir que funcione el "sueño profundo". En la foto que se muestra, se soldó un cable desde el pin de la esquina (GPIO16) al pin RST en el encabezado. El cable que utilicé es un cable de "reparación" aislado de 0,1 mm de diámetro. El revestimiento de aislamiento se derrite al calentarlo, por lo que se puede soldar para reparar rastros, etc.en PCB y aún así no preocuparse por crear cortocircuitos donde el cable entra en contacto con otros componentes. Su tamaño hace que sea difícil trabajar con él y soldé este cable en su lugar bajo un microscopio (estilo aficionado / coleccionista de sellos). Tenga en cuenta que el cabezal en el lado derecho tiene un espaciado de pines de 0.1 "(2.54 mm). Instalar un diodo Schottky aquí no sería nada fácil, así que decidí probar el cable solo y ambas unidades han estado funcionando durante más de un mes sin problemas.

Los módulos se instalaron en dos placas prototipo que creé. Una (n. ° 1) es una placa de programación que también permite instalar y probar módulos I2C, mientras que la otra (n. ° 2) es una placa de desarrollo / prueba para dispositivos I2C. Para la primera placa, soldé un antiguo conector USB macho y una pequeña PCB para alimentar la unidad directamente desde un adaptador de pared USB. La otra unidad tiene un conector de CC regular modificado para encajar en el cabezal del terminal de tornillo y también se alimenta a través de un adaptador de pared.

El esquema muestra cómo están conectados y cómo funciona el programador. No tengo ningún otro módulo ESP-01, por lo que no he tenido ninguna necesidad inmediata del programador. Es probable que en el futuro les haga un PCB. Ambas placas tienen instalado el módulo de sensor SI7021 ya que no estaba tan interesado en las mediciones de presión en esas ubicaciones.

Paso 5: Estación del sensor del kit de WIFI en serie ESP 12E

Estación del sensor del kit de WIFI en serie ESP 12E
Estación del sensor del kit de WIFI en serie ESP 12E
Estación del sensor del kit de WIFI en serie ESP 12E
Estación del sensor del kit de WIFI en serie ESP 12E

La placa ESP12E Serial WIFI Kit no fue pensada tanto para el desarrollo como para mostrar lo que se podía hacer con este dispositivo. Lo compré hace mucho tiempo para aprender un poco sobre la programación ESP8266 y finalmente decidí darle un nuevo uso. Quité todos los LED que se instalaron para las demostraciones y agregué un encabezado de programación USB, así como un encabezado I2C adecuado para los módulos que uso. Tenía una fotorresistencia CdS conectada a su pin de entrada analógica y decidí dejarla allí. Esta unidad en particular iba a monitorear el taller de mi garaje y el fotosensor que tenía era suficiente para avisarme si las luces se habían dejado encendidas accidentalmente. Para la medición de la luz, normalicé las lecturas para darme un porcentaje de salida y cualquier valor por encima de "5" por la noche significaba que las luces estaban encendidas o que una puerta de la casa no estaba bien cerrada. Los pines RST y GPIO16 están claramente etiquetados en la PCB y el diodo Schottky que los conecta se instaló en la parte inferior de la PCB. Se alimenta a través de una placa serie USB que se conecta directamente a un cargador de pared USB. Tengo extras de estas placas serie USB y no necesito esta en este momento.

No hice un esquema para esta placa y, en general, no recomiendo comprar uno para este propósito. Las placas Wemos D1 Mini son mucho más adecuadas y se discutirán a continuación. Aunque, si tiene uno de estos y necesita un consejo, estaré encantado de ayudarlo.

Paso 6: Estaciones de mini sensor D1

Estaciones de mini sensor D1
Estaciones de mini sensor D1
Estaciones de mini sensor D1
Estaciones de mini sensor D1
Estaciones de mini sensor D1
Estaciones de mini sensor D1

Las placas de desarrollo Wemos D1 Mini tipo ESP8266 son mis preferidas para usar y si tuviera que hacerlo de nuevo, simplemente las usaría. Tienen una gran cantidad de pines IO accesibles, se pueden programar directamente a través del IDE de Arduino y siguen siendo bastante compactos. El pin D0 es GPIO16 en estas placas y conectar un diodo Schottky es bastante fácil de hacer. El esquema muestra cómo tengo estas placas conectadas y ambas usan el módulo de sensor BME2808.

Una de las dos placas se usa para monitorear el clima exterior y funciona con una batería de energía solar. Un panel solar de 165 mm x 135 mm (6 V, 3,5 W) está conectado a un módulo de carga de batería de iones de litio TP4056 (consulte el Diagrama de configuración de la estación del sensor de batería alimentada por energía solar). Este módulo de carga en particular (03962A) cuenta con un circuito de protección de batería que es necesario si la batería (paquete) no contiene uno. La batería de iones de litio se recicló de un paquete de baterías de computadora portátil vieja y aún puede contener suficiente carga para ejecutar la placa D1 Mini, especialmente con la suspensión profunda habilitada. El tablero se colocó en una caja de plástico para mantenerlo algo a salvo de los elementos. Sin embargo, para que el interior esté expuesto a la temperatura y la humedad exteriores, se perforaron dos orificios de 25 mm de diámetro en lados opuestos y se cubrieron (desde el interior) con tela negra para jardinería. El paño está diseñado para permitir que penetre la humedad y, por lo tanto, se puede medir la humedad. En un extremo del recinto se hizo un pequeño orificio y se instaló una ventana de plástico transparente. Aquí es donde se colocó el módulo del sensor de luz BH1750. Toda la unidad se coloca al aire libre a la sombra (no a la luz solar directa) con el sensor de luz apuntando al aire libre. Ha estado funcionando con la batería de energía solar durante casi 4 semanas en nuestro clima invernal lluvioso / nublado aquí.

Paso 7: puerta de enlace y servidor web

Puerta de enlace y servidor web
Puerta de enlace y servidor web
Puerta de enlace y servidor web
Puerta de enlace y servidor web
Puerta de enlace y servidor web
Puerta de enlace y servidor web

Se utilizó una placa Lolin NodeMCU V3 (ESP8266) para el dispositivo ESP-Now Gateway y se utilizó una ESP32 (placa GOOUUU) para el servidor web. Casi cualquier placa ESP8266 o incluso ESP32 podría haber servido como dispositivo de puerta de enlace, esta era simplemente la placa que me "sobró" después de usar todas las demás placas que tenía.

Utilicé la placa ESP32 ya que necesito una placa con un poco más de potencia informática para recopilar los datos, clasificarlos, guardarlos en el almacenamiento y ejecutar el servidor web. En el futuro, también puede tener su propio sensor y una pantalla local (OLED). Para el almacenamiento se utilizó una tarjeta SD con un adaptador personalizado. Usé un adaptador común de microSD a tarjeta SD y soldé un conector macho de 7 pines (paso de 0.1 ) a los contactos enchapados. Seguí los consejos de este GitHub para hacer las conexiones.

La configuración de creación de prototipos (con cables Dupont) no incluye un módulo de sensor, pero la PCB finalizada que diseñé permite una, así como una pequeña pantalla OLED. Los detalles sobre cómo diseñé ese PCB son parte de un Instructable diferente.

Paso 8: software

Software
Software

Dispositivos ESP8266 (ESP-NOW)

El software para todos los dispositivos se escribió utilizando Arduino IDE (v1.87). Cada estación de sensor ejecuta esencialmente el código idéntico. Solo se diferencian por los pines que se utilizan para las comunicaciones I2C y el módulo de sensor al que están conectados. Lo más importante es que envían el paquete de datos de medición idéntico a la estación ESP-Now Gateway, independientemente de si tienen el mismo sensor. Lo que esto significa es que algunas estaciones de sensores completarán valores ficticios para las mediciones de presión y nivel de luz si no tienen sensores para proporcionar valores reales. El código para cada estación y la puerta de enlace se adaptó de los ejemplos de Anthony Elder en este GitHub.

El código del dispositivo de puerta de enlace utilizó SoftwareSerial para comunicarse con el servidor web, ya que ESP8266 tiene solo un UART de hardware en pleno funcionamiento. Al funcionar a una velocidad máxima de 9600 baudios, parece bastante confiable y es más que suficiente para enviar estos paquetes de datos relativamente pequeños. El dispositivo de puerta de enlace también está programado con una dirección MAC privada. La razón de esto es que si es necesario reemplazarlo, no es necesario reprogramar todas las estaciones de sensores con la nueva dirección MAC del destinatario.

ESP32 (servidor web)

Cada estación de sensor envía su paquete de datos al dispositivo de puerta de enlace que lo reenvía al servidor web. Junto con el paquete de datos, también se envía la dirección MAC de la estación del sensor para identificar cada estación. El servidor web tiene una tabla de "búsqueda" para determinar la ubicación de cada sensor y clasifica los datos en consecuencia. El intervalo de tiempo entre las mediciones se estableció en 5 minutos más un factor aleatorio para evitar que los sensores "colisionen" entre sí cuando se envían al dispositivo de entrada.

El enrutador WIFI doméstico se configuró para asignar una dirección IP fija al servidor web cuando se conecta al WIFI. Para el mío fue 192.168.1.111. Al escribir esa dirección en cualquier navegador, se conectará al servidor web de la estación meteorológica siempre que el usuario esté dentro del alcance WIFI de (y se conecte) a la red doméstica. Cuando el usuario se conecta a la página web, el servidor web responde con una tabla de las medidas, e incluye la hora de la última medida de cada sensor. De esta manera, si una estación de sensor deja de responder, se puede ver en la tabla si una lectura tiene más de 5-6 minutos de antigüedad.

Los datos se guardan en archivos de texto individuales en una tarjeta SD y también se pueden descargar desde la página web. Se puede importar a Excel o cualquier otra aplicación para graficar datos.

Aplicación Android

Para facilitar la visualización de la información meteorológica local en un teléfono inteligente, creé una aplicación relativamente para Android usando Android Studio. Está disponible en mi página de GitHub aquí. Utiliza la clase webview para cargar la página web desde el servidor y, como tal, tiene una funcionalidad limitada. No es capaz de descargar los archivos de datos y de todos modos no los necesitaba en mi teléfono.

Paso 9: Resultados

Resultados
Resultados

Finalmente, aquí hay algunos resultados de mi estación meteorológica local. Los datos se descargaron en una computadora portátil y se trazaron en Matlab. Adjunté mis scripts de Matlab y también puedes ejecutarlos en GNU Octave. El sensor exterior ha estado funcionando con su batería cargada con energía solar durante casi 4 semanas y rara vez tenemos sol en esta época del año. ¡Hasta ahora todo está funcionando bien y todos los miembros de la familia pueden consultar el clima ellos mismos en lugar de preguntarme ahora!