Tabla de contenido:

Otra estación meteorológica inteligente, pero : 6 pasos (con imágenes)
Otra estación meteorológica inteligente, pero : 6 pasos (con imágenes)

Video: Otra estación meteorológica inteligente, pero : 6 pasos (con imágenes)

Video: Otra estación meteorológica inteligente, pero : 6 pasos (con imágenes)
Video: Mi nueva ESTACIÓN METEOROLÓGICA (MISOL HP2550) / МОЯ НОВАЯ МЕТЕОСТАНЦИЯ 2024, Junio
Anonim
Image
Image
Otra estación meteorológica inteligente, pero …
Otra estación meteorológica inteligente, pero …
Otra estación meteorológica inteligente, pero …
Otra estación meteorológica inteligente, pero …
Otra estación meteorológica inteligente, pero …
Otra estación meteorológica inteligente, pero …

Bien, sé que hay tantas estaciones meteorológicas de este tipo disponibles en todas partes, pero tómese unos minutos para ver la diferencia …

  • Baja potencia
  • 2 pantallas de papel electrónico …
  • ¡pero 10 pantallas diferentes!
  • Basado en ESP32
  • acelerómetro y sensores de temperatura / humedad
  • Actualización wifi
  • Estuche impreso en 3D

y muchos otros trucos útiles …

La idea principal es mostrar información diversa en ambas pantallas dependiendo de la orientación de la caja. La caja tiene forma de caja paralelepipédica, un adoquín, con una especie de cinturón que hace las veces de pie.

Suministros

Como puede ver, el sistema consta de 2 pantallas de papel electrónico y una caja impresa en 3D. Pero hay muchas cosas en él:

  • Un ESP32
  • Un acelerómetro MPU6050
  • Un sensor DHT22
  • Una batería LiPo
  • Un PCB para conectar todo
  • Hilos de duPont caseros

y una conexión Wi-Fi. De hecho se declaran 3 redes, el sistema las prueba una a una hasta que logra conectarse.

Paso 1: ¿Por qué otra estación meteorológica?

¿Por qué otra estación meteorológica?
¿Por qué otra estación meteorológica?
¿Por qué otra estación meteorológica?
¿Por qué otra estación meteorológica?
¿Por qué otra estación meteorológica?
¿Por qué otra estación meteorológica?
¿Por qué otra estación meteorológica?
¿Por qué otra estación meteorológica?

La idea es mostrar varios tipos de información en ambas pantallas dependiendo de la orientación de la caja. La caja tiene la forma de una caja paralelepipédica, un adoquín, con una especie de cinturón que sirve de soporte para hacerla en pie.

El acelerómetro detecta el movimiento y la orientación y activa las pantallas.

Para ahorrar energía, elegí las pantallas de papel electrónico (consulte las referencias a continuación) que mantienen la pantalla incluso si ya no tienen energía. De manera similar, para el ESP32, elegí el módulo Lolin32 (conocido por su frugalidad) y tuve que aprender a manejar el sueño profundo y el despertar en la interrupción generada por el acelerómetro.

Las pantallas están conectadas a través de SPI, busqué bastante antes de encontrar los pines correctos para conectarlos al ESP32, sabiendo que también necesito un I2C para el acelerómetro, un pin para leer el DHT22 y otros 2 para la medida del voltaje de la batería. ¡El ESP32 está casi completamente cargado! Sabiendo que algunos pines son de solo lectura (los usé para el sensor DHT), otros no se pueden usar junto con Wifi, fue un poco complicado encontrar la configuración correcta.

La caja se puede orientar en 4 direcciones, más plana. En total, eso hace que 4 * 2 + 2 = 10 tipos de información posibles para mostrar con solo 2 pantallas. Entonces te permite mostrar muchas cosas:

  • La fecha y el santo del día
  • La hora actual
  • Previsión meteorológica de hoy
  • Previsiones meteorológicas para las próximas horas
  • Previsiones meteorológicas para los próximos días
  • El nivel de carga de la batería
  • Y como todavía me quedaba espacio, una cita aleatoria de un sitio web especializado.

Paso 2: ¿Qué necesitas?

Que necesitas ?
Que necesitas ?
Que necesitas ?
Que necesitas ?
Que necesitas ?
Que necesitas ?
  • ESP32: módulo Lolin32 (muy baja potencia, equipado con un conector de batería, puede cargar la batería a través de USB plus)
  • 2 pantallas de papel electrónico: 4,2 pulgadas y 2,9 pulgadas. Elegí los modelos de la tienda Good Display.
  • Sensor DHT22
  • Acelerómetro MCU6050 - sensor de girómetro I2C
  • Una batería LiPo
  • Para medir el voltaje de la batería: 2 resistencias de 10k, 1 resistor de 100k, 1 capacitor de 100nF, 1 transistor MOSFET
  • Soldador y soldador, placa de circuito impreso
  • Acceso a una impresora 3D para el estuche

La imagen adjunta muestra la posición de todos los componentes en la PCB: tuve que ahorrar espacio para encajar en la carcasa, que no debería ser demasiado grande.

Para obtener los datos meteorológicos, también debe registrarse en las API meteorológicas y poner sus claves en los lugares correctos en el archivo 'Variables.h' (ver más abajo).

Sitios web meteorológicos:

  • apixu
  • accuweather

Paso 3: Este proyecto me hizo pensar y aprender mucho …

Este proyecto me hizo pensar y aprender mucho …
Este proyecto me hizo pensar y aprender mucho …
Este proyecto me hizo pensar y aprender mucho …
Este proyecto me hizo pensar y aprender mucho …
Este proyecto me hizo pensar y aprender mucho …
Este proyecto me hizo pensar y aprender mucho …

Se suponía que este sistema era de bajo consumo, por lo que no es necesario cargar la batería todas las noches … Para ahorrar energía, elegí las pantallas de papel electrónico que mantienen la pantalla incluso si ya no tienen alimentación. De manera similar, para el ESP32, elegí el módulo Lolin32 (conocido por su frugalidad) y tuve que aprender a manejar el sueño profundo y la llamada de atención en caso de interrupción generada por el acelerómetro.

La caja se puede orientar en 4 direcciones, más plana. Con todo, eso hace que 4 * 2 + 2 = 10 posibles tipos de información para mostrar. Así que te permite hacer muchas cosas: la fecha y el santo del día, la hora, el pronóstico del tiempo para hoy, el pronóstico del tiempo para las próximas horas o días, el nivel de carga de la batería y una cotización aleatoria de un sitio web especializado.

Hay mucho que buscar en Internet, y como sabes: WiFi es el enemigo del ahorro de energía …

Así que tenemos que gestionar la conexión, para poder mostrar información actualizada pero sin perder demasiado tiempo conectándonos. Otro problema bastante complejo: mantener una hora bastante precisa. No necesito un RTC ya que puedo encontrar la hora en Internet, pero el reloj interno del ESP32 se desvía bastante, especialmente durante los períodos de sueño. Tuve que encontrar una manera de mantenerme lo suficientemente preciso, mientras esperaba para reiniciar el reloj por Internet. Lo resincronizo en Internet cada hora.

Por lo tanto, existe un compromiso entre la autonomía (la frecuencia de las conexiones a Internet) y la precisión de la información que se muestra.

Otro problema a resolver es la memoria. Cuando el ESP32 está en reposo profundo, la memoria se pierde, a excepción de lo que se denomina RAM RTC. Esta memoria tiene 4 MB de ancho, de los cuales solo 2 pueden usarse para el programa. En esta memoria, debo almacenar las diversas variables del programa que deben mantenerse de una ejecución a la siguiente, después de una fase de suspensión: pronósticos del tiempo, hora y fecha, nombres de archivos de iconos, citas, etc. Tuve que aprender a lidiar con eso..

Hablando de iconos, se almacenan en SPIFFS, el sistema de archivos ESP32. Tras el cierre de la API meteorológica gratuita de Wunderground, tuve que buscar otros proveedores de datos meteorológicos gratuitos. Seleccioné dos: uno para el clima del día actual, con pronósticos de 12 horas, y otro para los pronósticos de varios días. Los iconos no son los mismos, por lo que me causó dos nuevos problemas:

  • Elija un conjunto de iconos
  • Haga coincidir estos iconos con los códigos de pronóstico de los 2 sitios

Esta correspondencia también se ha almacenado en la RAM del RTC para que no tenga que volver a cargarse cada vez.

Último problema con los iconos. Imposible almacenarlos todos en el SPIFFS. El espacio es demasiado pequeño para todos mis archivos. Era necesario hacer compresión de imágenes. Escribí un script en Python que lee mis archivos de iconos y los comprime en RLE, y luego almacena los archivos comprimidos en SPIFFS. Allí se mantuvo.

Pero la biblioteca de visualización de papel electrónico solo acepta archivos de tipo BMP, no imágenes comprimidas. Entonces tuve que escribir una función adicional para poder mostrar mis íconos de estos archivos comprimidos.

Los datos leídos en Internet suelen estar en formato json: datos meteorológicos, santo del día. Utilizo la (gran) biblioteca arduinoJson para esto. Pero las citas no son así. Los tomo de un sitio dedicado, así que tengo que leerlos mirando directamente al contenido de la página web. Tuve que escribir un código específico para eso. Todos los días, alrededor de la medianoche, el programa va a este sitio, lee unas diez citas aleatorias y las almacena en la memoria RAM del RTC. Uno se muestra al azar entre ellos cuando la carcasa se orienta hacia arriba con la pantalla grande.

Les paso el problema de la visualización de caracteres acentuados (lo siento, pero las citas están en francés)….

Cuando la pantalla pequeña está encendida, se muestra el voltaje de la batería, con un dibujo para ver mejor el nivel restante. Fue necesario realizar un montaje electrónico para leer el voltaje de la batería. Como la medición no debería descargar la batería, utilicé un diagrama que se encuentra en Internet, que usa un transistor MOSFET como interruptor para consumir corriente solo cuando se realiza la medición.

Para poder hacer este circuito y encajar todo en la caja, que quería lo más pequeño posible, tuve que hacer una PCB para conectar todos los componentes del sistema. Este es mi primer PCB. Tuve suerte porque todo funcionó bien la primera vez de este lado …

Ver mapa de implantación: la "zona prohibida" es un área reservada para conectar el cable USB. El módulo Lolin32 le permite recargar la batería a través de USB: la batería se carga si el cable USB está conectado y el módulo funciona al mismo tiempo.

Último punto: las fuentes. De diferentes tamaños, en negrita o no, debían crearse y almacenarse. La biblioteca Adafruit GFX se encarga de eso muy bien, una vez que haya instalado los archivos de fuentes en el directorio correcto. Para crear los archivos, utilicé el sitio Font Converter, ¡muy conveniente!

Asegúrate de seleccionar:

  • Pantalla de vista previa: TFT 2.4"
  • Versión de la biblioteca: Adafruit GFX Font

Entonces, para resumir: un gran proyecto, que me permitió aprender muchas cosas

Paso 4: uso de pantallas de papel electrónico

Uso de pantallas de papel electrónico
Uso de pantallas de papel electrónico

El principal inconveniente de estas pantallas es claramente visible en el vídeo: la actualización de la pantalla tarda uno o dos segundos y se realiza mediante parpadeo (visualización alternativa de las versiones normal e invertida de las dos pantallas). Esto es aceptable para la información meteorológica porque no la actualizo con mucha frecuencia (cada hora, excepto por un cambio de orientación de la caja). Pero no por el momento. Por eso (y para limitar el consumo) sigo usando la pantalla HH: MM (no los segundos).

Entonces tuve que buscar otra forma de actualizar la pantalla. Estas pantallas (algunas de ellas) admiten una actualización parcial (aplicada ya sea a un área de la pantalla, oa toda la pantalla …) pero no fue buena para mí porque mi pantalla grande (que muestra la hora) mantiene los fantasmas de los píxeles. que son reemplazados. Por ejemplo, al pasar de 10:12 a 10:13, el '2' es un poco visible dentro del '3', y se vuelve aún más visible después del '4', el '5', etc. Me gustaría para señalar que este es el caso de mi pantalla: lo discutí con el autor de la biblioteca de visualización de papel electrónico GxEPD2, quien me dijo que no observaba este fenómeno con sus propias pantallas. Intentamos cambiar los parámetros sin lograr cazar fantasmas.

Entonces teníamos que buscar otra solución: propuse hacer un refresco parcial doble, que solucionó el problema (al menos es satisfactorio para mí). Se pasan las horas sin que la pantalla parpadee y no hay fantasmas. Sin embargo, el cambio no es inmediato: se tarda un poco más de un segundo en cambiar la hora.

Paso 5: hacerlo

Haciendolo
Haciendolo
Haciendolo
Haciendolo
Haciendolo
Haciendolo
Haciendolo
Haciendolo

Para asegurarse de que nada se mueva hacia adentro cuando cambia la orientación, los diferentes componentes (pantallas, módulos electrónicos, PCB, baterías) se pegan con una pistola de pegamento. Para enrutar los cables debajo de la PCB, lo instalé en patas hechas con espaciadores, lo mismo ocurre con la batería.

Pronto instalaré un conector de micrófono USB externo para no tener que abrir la carcasa para recargar la batería.

Quizás también me interese actualizar por OTA para perfeccionarlo todo….

Paso 6: el código y los archivos

Image
Image

Se proporcionan tres archivos de almacenamiento:

  • Weather station.zip: el código de Arduino, para cargar usando el IDE de Arduino
  • Boite ecran.zip: los archivos de impresora CAD y 3D para el caso
  • data.zip: los archivos que se cargarán en el SPIFFS del ESP32.

Si no sabe cómo cargar archivos en el SPIFFS de ESP32, simplemente lea este tutorial, que presenta un complemento muy útil y cómo usarlo en el IDE de Arduino.

La programación de sueño profundo es bastante diferente de la programación estándar de un Arduino. Para el ESP32, significa que el ESP32 se activa y ejecuta la configuración, luego se pone en reposo. Entonces, la función de bucle está vacía y nunca se ejecuta.

Alguna fase de inicialización debe ejecutarse solo una vez en la primera ejecución (como obtener la hora, los datos meteorológicos, cotizaciones, etc.), por lo que el ESP32 necesita saber si el despertador actual es el primero o no: para eso, el La solución es almacenar una variable en la RAM RTC (que permanece activa incluso durante las fases de sueño profundo) que se incrementa en cada despertar. Si es igual a 1, entonces es la primera ejecución y el ESP32 ejecuta la fase de inicialización; de lo contrario, esta fase se salta.

Para despertar el ESP32, hay varias posibilidades:

  • Temporizador de despertador: el código calcula la duración del sueño profundo antes de irse a dormir. Se utiliza para actualizar la hora (cada 1, 2, 3 o 5 minutos) o los datos meteorológicos (cada 3 o 4 horas) de las cotizaciones y el santo del día (cada 24 horas).
  • Interrumpir despertador: el acelerómetro envía una señal que se utiliza para despertar el ESP32. Se utiliza para detectar un cambio de orientación y actualizar las pantallas.
  • Activación del sensor táctil: el ESP32 está equipado con varios pines que actúan como sensores táctiles, pero no se pueden usar con la activación del temporizador, por lo que no usé esto.

Hay otros trucos de programación en otras partes del código, para mantener la hora precisa mientras se ahorra energía (es decir, no conectar el servidor NTP cada minuto), para eliminar los acentos que no son compatibles con la biblioteca Adafruit GFX, para evitar actualizar una pantalla si No es necesario, configurar los parámetros del acelerómetro especialmente para despertar con interrupción, calcular con precisión el tiempo para dormir en caso de despertar con temporizador, evitar usar la consola serial si no está conectada al IDE (para ahorrar energía nuevamente), desconectar el wifi cuando no se necesita, etc… y el código está lleno de comentarios que ayudan a entender las funciones.

Gracias por leer este Instructable (mi primero). Espero que les guste y disfruten haciendo esta estación meteorológica

Concurso de sensores
Concurso de sensores

Finalista en el Concurso de Sensores

Recomendado: