Tabla de contenido:

Estación meteorológica local: 8 pasos (con imágenes)
Estación meteorológica local: 8 pasos (con imágenes)

Video: Estación meteorológica local: 8 pasos (con imágenes)

Video: Estación meteorológica local: 8 pasos (con imágenes)
Video: ✅Curso ESP32 parte 20: Estación meteorológica DHT22 (MicroPython) web server 2024, Noviembre
Anonim
Estación meteorológica local
Estación meteorológica local

Mientras buscaba un gran proyecto para mi primer año escolar, tenía muchas ideas de qué hacer, pero ninguna de ellas me resultó desafiante.

Más tarde pensé en hacer una estación meteorológica que tuviera algo especial. Quería poder almacenar todos mis datos y luego usarlos para estadísticas. Este proyecto estaría especialmente diseñado para personas que tengan interés por la meteorología y quieran una estación meteorológica hecha en casa que no cueste tanto como las disponibles en el mercado. El proyecto también está diseñado para mantener la capacidad de agregar o quitar sensores en cualquier momento.

Me alegré mucho cuando vi mi resultado final, que resultó mejor de lo esperado.

Está hecho de una Raspberry Pi 4 que ejecuta Linux.

  • Sitio web de Apache (html css js)
  • Eventlet (sitio web del servidor backend)
  • MariaDB (servidor de base de datos)

Suministros

  • Raspberry Pi 4:

    tarjeta sd (mínimo 16 gb)

  • Sensores:

    1. Sensor de velocidad del viento QS-FS
    2. Sensor de viento Salida de señal de jardín Aleación de aluminio Sensor de dirección del viento Instrumento de medición de velocidad de veleta https://www.banggood.com/Wind-Sensor-Garden-Signal-Output-Aluminum-Alloy-Wind-Direction-Sensor-Wind-Vane-Speed -Instrumento-de-medición-p-1624988.html? Rmmds = myorder & cur_warehouse = CN
    3. DHT22 (humedad)
    4. BMP280 (presión de aire)
    5. DS18B20 (temperatura)
  • Fuente de alimentación

    • Fuente de alimentación de 5v (RPi)
    • Fuente de alimentación de 9v (en una fuente de alimentación de placa de prueba externa)
  • Placa de pruebas (x2)

    T-cobbler plus para RPi 4

  • cables de puente
  • IC

    • MCP3008
    • PCF8574AN
  • Pantalla LCD 16x2
  • LED (rojo
  • Carcasa (opcional)

    • cajas de vino
    • poste de madera (2 m)
    • tabla de madera (1m)

Paso 1: Preparar las cosas

Siempre es de gran importancia obtener todos los elementos que necesita antes de comenzar a trabajar en un paso. Esto le ahorrará mucho tiempo mientras trabaja en él.

Así que primero

Que necesitas:

  • Raspberry Pi 4:

    tarjeta sd (mínimo 16 gb)

  • Sensores:

    1. Sensor de velocidad del viento QS-FS
    2. Sensor de viento Salida de señal de jardín Aleación de aluminio Sensor de dirección del viento Instrumento de medición de velocidad de veleta
    3. DHT22 (humedad)
    4. BMP280 (presión de aire)
    5. DS18B20 (temperatura)
  • Fuente de alimentación

    • Fuente de alimentación de 5v (RPi)
    • Fuente de alimentación de 9v (en una fuente de alimentación de placa de prueba externa)
  • Placa de pruebas (x2)
  • T-cobbler plus para RPi 4
  • cables de puente
  • IC

    • MCP3008
    • PCF8574AN
  • Pantalla LCD 16x2
  • LED (rojo)
  • Carcasa (opcional)

    • cajas de vino
    • tabla de madera (1m)
    • poste (2 m)

Puede encontrar todos los enlaces donde los compré en la sección de suministros debajo de la introducción.

Paso 2: Configurar el RPi

Configuración del RPi
Configuración del RPi

Para nuestro proyecto, necesitamos un RPi con el software dado instalado.

  • Sitio web de Apache (html css js)
  • Flask Socket-IO (sitio web del servidor backend)
  • MariaDB (servidor de base de datos)

Antes de instalarlo, siempre es útil asegurarse de tener instalado el software más reciente en su RPi. Para hacer esto, simplemente ejecute el siguiente comando:

actualización de sudo apt

Apache:

Primero hablemos de Apache. Apache es un servidor web que se utiliza en todo el mundo. Ejecuta su sitio web sin problemas. Lo único que necesita hacer es instalarlo y poner su sitio web en la carpeta correcta y ahí está.

sudo apt install apache2 -y

¡Eso es todo!

Para asegurarse de que todo esté instalado correctamente, navegue hasta la dirección IP de su raspberry pi en su navegador y vea si obtiene el sitio web predeterminado. Si tiene algún problema con respecto a este paso, puede consultar el sitio web de RPi aquí.

Eventlet:

Ahora instalemos Eventlet. Ejecutará nuestro servidor backend y hará la conexión desde nuestros sensores a nuestro sitio web. Para eso necesitamos un par de paquetes.

Matraz-socketIO:

pip3 instalar flask-socketio

Eventlet:

pip3 instalar eventlet

Gevent:

pip3 instalar gevent

Mariadb:

Mariadb es una base de datos basada en MySQL que crea bases de datos relacionales. Se usa a menudo en RPi y, por lo tanto, hay mucha ayuda que puede encontrar en Internet. Para obtener más información, puede ir a este enlace.

apto instalar mariadb-server

Paso 3: Conexión de sensores y adición de código

Conexión de sensores y adición de código
Conexión de sensores y adición de código
Conexión de sensores y adición de código
Conexión de sensores y adición de código
Conexión de sensores y adición de código
Conexión de sensores y adición de código

Para conectar los sensores a nuestro RPi podemos utilizar un T-Cobbler plus. Esta es una pequeña herramienta útil que hace posible usar todos sus pines en su RPi en una placa de pruebas.

En mi proyecto tengo 5 sensores:

  1. Sensor de velocidad del viento QS-FS
  2. Sensor de viento Salida de señal de jardín Aleación de aluminio Sensor de dirección del viento Instrumento de medición de velocidad de veleta
  3. DHT22 (humedad)
  4. BMP280 (presión de aire)
  5. DS18B20 (temperatura)

Sensor de velocidad del viento:

En primer lugar, comencé con el sensor de velocidad del viento porque estaba más emocionado con este sensor. Es un sensor con una señal analógica de salida 0-5v y necesita un voltaje mínimo de 7 voltios para funcionar. Elijo el adaptador de 9 voltios para alimentarlo.

Para leer en este sensor utilicé un MCP3008 que es un IC para leer en señales analógicas. El IC puede funcionar con 3.3V o 5V, pero elijo 3.3V para hacerlo compatible con el RPi. Esto significaba que necesitaba cambiar el voltaje de salida de 5V a 3.3V. Hice esto agregando un divisor de voltaje creado por 2 resistencias (2k y 1k ohm).

Sensor de dirección del viento:

La dirección del viento es tan importante como la velocidad del viento, por lo que conectaré esto a continuación.

Este sensor tiene la misma especificación que el sensor de velocidad del viento. También funcionará con 9V y tiene un voltaje de salida de 5 voltios. También este sensor lo conectaremos al MCP3008 mediante un divisor de voltaje.

DHT22 (humedad):

El DHT22 lee la humedad. Le da un valor en porcentaje y su valor se puede leer utilizando el protocolo I2C en el RPi. Por lo tanto, debe habilitar los puertos I2C en Raspi-config. Más info aquí.

BMP280 (presión de aire):

El BMP280 se utiliza para leer la presión del aire. Su valor se lee a través del bus SPI en el RPi. Este protocolo también debe estar habilitado en Raspi-config. Para mi código utilicé la biblioteca Adafruit.

DS18B20 (temperatura):

El último sensor mide la temperatura. este sensor es de Dallas y si ha tenido un poco de experiencia con Dallas probablemente ya debería saber que usan el bus 1Wire. No se sorprenda si digo que este protocolo también debe estar habilitado en Raspi-config.

Cómo conecté los sensores:

Como pdf, cargué un esquema eléctrico y de tablero para hacerlo un poco más fácil.

Después de poder conectar los sensores correctamente y agregar el código requerido para leer todos los sensores, puede continuar y pasar al siguiente paso. Si desea dejar un sensor o desea agregar más, puede hacerlo.

Paso 4: diseño de una interfaz de usuario web

Diseñar una interfaz de usuario web
Diseñar una interfaz de usuario web
Diseñar una interfaz de usuario web
Diseñar una interfaz de usuario web
Diseñar una interfaz de usuario web
Diseñar una interfaz de usuario web

Ahora que conectamos los sensores necesitamos un diseño para nuestro sitio web.

Queremos que el sitio web cree una apariencia sencilla mientras muestra todos los datos en tiempo real de los sensores.

También queremos poder ver el historial de estos valores medidos por intervalo de tiempo.

Entonces, primero comencé a buscar en la web algo de inspiración. Sobre todo donde solo había sitios de información sobre el agua sin realmente el diseño que estaba buscando. Las estaciones meteorológicas que ya estaban en el mercado probablemente tenían una pantalla. Y de esa exhibición surgió mi inspiración. La mayoría de las pantallas tienen un diseño con aspecto de cuadrícula. Esto me dio la idea de crear la página de inicio donde se mostrarían todos los sensores.

Pero, también dije que quería hacer una página donde se pueda ver el historial de cada sensor y sus valores.

Por esa razón también hice una segunda página en mi diseño que contiene esto. En esta página pude ver información adicional sobre mi sensor que no se mostraría en mi página principal y, por supuesto, en la parte del historial.

¡Después de unas horas tenía mi diseño completo elaborado!

El diseño se realizó con Adobe XD.

Paso 5: creación de la base de datos

Creando base de datos
Creando base de datos

Para descansar de la parte de diseño, comencé con mi base de datos.

Esta base de datos contendría todos los sensores (5), todos los actuadores (2) y los valores que tenían esos sensores.

La base de datos es bastante sencilla y tiene algunas relaciones.

Puedes ver el modelo de la base de datos en la foto.

Paso 6: Codificación del sitio web: Frontend (html Css)

¡De vuelta al sitio web!

Ahora que tengo un diseño, puedo comenzar a codificarlo como html css para usarlo realmente.

En la página de inicio:

Empecé por considerar cada sensor como un elemento de mi sitio web. Para que luego pueda dejar que esta parte se genere con mi código Javascript.

También inserté clases de soporte JS aleatorias en los elementos. Estos permitirían cambiar el contenido de ese elemento.

Esto me tomó mucho tiempo porque no soy tan bueno en este idioma en particular.

Habiendo hecho la página de inicio, era hora de comenzar en la página del historial.

En la página de historial:

Esta página fue un poco más fácil de recrear. En esta página también había js-titulares para obtener la información sobre el sensor, una ranura de valor en tiempo real y para mostrar la tabla con todos los valores medidos.

Para crear una opción de pestaña en mi sitio web para elegir entre Tabla o Gráfico, tuve que agregar un poco de Javascript para que los elementos no se muestren o se muestren.

¿Ahora tenemos un sitio web impresionante pero no podemos mostrar nada en él? Arreglemos eso.

Puede encontrar mi código en mi repositorio de github:

Paso 7: Codificación del sitio web: Backend (eventlet) + Frontend de codificación (javascript)

Backend:

Si bien el servidor backend ya está instalado, aún necesitamos implementar esto en nuestro proyecto. Primero necesitamos agregar algunas importaciones para que todo funcione correctamente.

desde flask import Flask, request, jsonify from flask_socketio import SocketIO desde flask_cors import CORS

Para hacer que el servidor se inicie necesitamos agregar lo siguiente:

socketio.run (aplicación, debug = False, host = '0.0.0.0')

Ahora el servidor está en línea, pero no podrá hablar con la interfaz.

No recibe ni devuelve nada. Cambiemos eso.

Para solicitar todos los sensores en la base de datos, agregaremos una ruta:

@ app.route (punto final + '/ sensores', métodos = ['GET']) def get_sensors (): if request.method == 'GET': s = DataRepository.get_sensors () return jsonify (sensores = s), 200

Este código usa una clase llamada DataRepository y habla con la base de datos. Aquí nos devuelve los sensores que pedimos.

También necesitamos una ruta para pedir la información sobre 1 sensor específico y otra para los valores de un sensor dado.

Todas estas son rutas, pero para hacer posibles los datos en tiempo real. Necesitamos enviar a cada intervalo los datos que los sensores acaban de leer. Para hacer esto usamos la conexión Socket-IO. Es una conexión que se establece desde el momento en que alguien carga el sitio web con JS y mantiene abierta esta conexión. Esta es una conexión full-duplex, lo que significa que es una conexión que funciona en ambos sentidos (enviar y recibir) al mismo tiempo. Para usar esto, necesitamos agregar el siguiente código.

@ socketio.on ('connect') def initial_connection (): print ('Un nuevo cliente se conecta') socketio.send ("U bent geconnecteerd") # # ¡Enviar al cliente!

Esta tranquilidad de código se ejecuta cuando un cliente se conecta.

Para recibir cualquier mensaje de la interfaz, puede usar este código.

@ socketio.on ('mensaje') def message_recieved (): pass

También puede enviar mensajes. Esto se hace de la siguiente manera.

socketio.emit ('Update_RTD', dict_results, broadcast = True)

El primer argumento dado puede ser cualquier cosa que desee, pero corresponderá a lo que ponga en su JS y también puede enviar objetos con él. Esto es opcional.

Javascript:

Es importante agregar un poco de JS para conectar el servidor con el servidor backend para poder mostrar los datos actuales y obtener información de la base de datos.

Llamaremos a las funciones socketIO que hicimos para recibir y enviar datos.

Cuando recibamos datos como un Objeto Json, los desmontaremos para obtener la información que queremos y luego los colocaremos en los soportes JS que colocamos en nuestro sitio web.

Puede encontrar mi código en mi repositorio de github:

Paso 8: hacer una carcasa

Hacer una carcasa
Hacer una carcasa
Hacer una carcasa
Hacer una carcasa
Hacer una carcasa
Hacer una carcasa
Hacer una carcasa
Hacer una carcasa

La carcasa requirió mucho trabajo y se puede hacer de la forma que desee. Así es como lo hice.

Tomé algunas cajas de vino.

Uno de ellos lo usé como caja para contener mi RPi y la mayoría de mis sensores.

El sensor de velocidad del viento y el sensor de dirección del viento, por supuesto, no se colocaron dentro, sino encima de una barra transversal colocada en un poste. En este poste colgué esa caja de vino donde también hice una puerta.

Puedes ver cómo terminé mi proyecto mirando las fotos.

Este es, por supuesto, un ejemplo de cómo puede hacerlo. Puedes hacer con él lo que quieras.

Recomendado: