Construye tu propia estación meteorológica de Raspberry Pi

Construye tu propia estación meteorológica de Raspberry Pi
Raspberry Pi Sense Hat es un tablero adicional que se puede usar con computadoras de una sola tabla Raspberry Pi. El sombrero Sense Raspberry Pi tiene una pantalla LED de 8 × 8 y un joystick de 5 botones, y viene equipado con los siguientes sensores:
  1. Giroscopio
  2. Acelerómetro
  3. Magnetómetro
  4. Temperatura
  5. Presión barométrica
  6. Humedad

En este artículo, le mostraré cómo crear una aplicación web de estación meteorológica basada en la API de Python utilizando el temperatura, presión barométrica, y humedad Sensores del sombrero sensorial de frambuesa Pi. Para seguir con este artículo, necesitará lo siguiente:

  1. Una Raspberry Pi 3 o Raspberry Pi 4 con conectividad de red.
  2. Un módulo de sombrero de sensación de frambuesa Pi.
  3. Un adaptador de alimentación Micro-USB (Raspberry Pi 3) o USB Type-C (Raspberry PI 4).
  4. Una tarjeta microSD de 16 GB o 32 GB con Raspberry Pi OS.
  5. Una computadora portátil o una computadora de escritorio para acceso de escritorio remoto VNC o acceso SSH al Raspberry Pi.

NOTA: En este artículo, nos conectaremos a la Raspberry Pi de forma remota a través de VNC o SSH utilizando la configuración sin cabeza de Raspberry Pi. Si no desea acceder a su Raspberry Pi de forma remota a través de SSH o VNC, deberá conectar un monitor, un teclado y un mouse a su Raspberry Pi.

Para aprender a flashear la imagen de Raspberry Pi OS en una tarjeta microSD, consulte cómo instalar y usar Raspberry Pi Imager. Si necesita ayuda para instalar Raspberry Pi OS en su Raspberry Pi, lea cómo instalar Raspberry Pi OS en Raspberry Pi 4. Si necesita ayuda con la configuración sin cabeza de Raspberry Pi, consulte cómo instalar y configurar Raspberry Pi OS en Raspberry Pi 4 sin monitor externo.

Conectando Raspberry Pi Sense Hat a Raspberry Pi

Raspberry Pi Sense Hat Kit viene con la tabla complementaria de Sense Sense Hat de Raspberry Pi, un encabezado de 40 pines de hombre a mujer y algunos tornillos y espaciadores.

Antes de que pueda unir el tablero de sombrero sensorial a la Raspberry Pi, debe conectar el encabezado de 40 pines al Sense Hat. Conecte los alfileres masculinos del encabezado masculino-femenino de 40 pines al sombrero de sentido como se muestra en las imágenes a continuación.

Las computadoras de un solo tablero Raspberry Pi tienen 4 agujeros que se pueden usar para unir tableros o un estuche. Para unir el tablero de complementos, inserte tornillos en la parte posterior de la Raspberry Pi, como se muestra en las imágenes a continuación.

Luego, conecte un espaciador al tornillo.

Una vez que agregue los cuatro tornillos y espaciadores, su Raspberry Pi debe verse así en la imagen a continuación.

Conecte el sombrero Sense Raspberry Pi al encabezado masculino GPIO de 40 pines del Raspberry Pi, como se muestra en las imágenes a continuación.

NOTA: Tenga cuidado al desconectar el sombrero de sensor Raspberry Pi del encabezado GPIO de 40 pines Raspberry Pi para evitar doblar los alfileres de la Raspberry Pi GPIO.

Con los cuatro tornillos restantes, sujete el sombrero de sentido de Raspberry Pi, como se muestra en las imágenes a continuación.

Encendido en la frambuesa pi

Ahora que el sombrero de sentido de Raspberry Pi está conectado a la Raspberry Pi, inserte la tarjeta microSD con Raspberry Pi OS en la ranura de la tarjeta microSD de la Raspberry Pi, conecte el cable de alimentación al Raspberry Pi, y encienda el encendido.

Instalación de la biblioteca Raspberry Pi Sense Hat Python

Para usar el sombrero de sentido de frambuesa Pi en la frambuesa Pi, el sombrero de sentido La biblioteca de Python debe instalarse en el sistema operativo Raspberry Pi. El sombrero de sentido La biblioteca está disponible en el repositorio oficial de paquetes de Raspberry Pi OS.

Para instalar la Raspberry Pi sombrero de sentido Biblioteca de Python En el sistema operativo Raspberry Pi, primero actualice el caché del repositorio del paquete APT con el siguiente comando:

$ sudo apt actualización

Luego, ejecute el siguiente comando:

$ sudo apt install sense -hat -y

Instalación de la biblioteca Python de Flask Micro Web Framework

Usaremos el marco Flask Python para crear nuestra aplicación meteorológica. Puede instalar Flask desde el repositorio oficial de paquetes de Raspberry Pi OS con el siguiente comando:

$ sudo apt install python3 -flask -y

Creación de un directorio de proyecto

Es una buena idea crear un directorio de proyecto para organizar los archivos de su proyecto. Para crear un directorio de proyecto ~/trabajar, Use el siguiente comando:

$ mkdir ~/trabajo

Una vez que se crea el directorio del proyecto, navegue al directorio del proyecto de la siguiente manera:

$ CD ~/trabajo

Probar el sombrero de sentido de frambuesa Pi

Para probar si el sombrero de sentido de Raspberry Pi está funcionando, podemos escribir un script de prueba simple de Python. Puedes crear un nuevo script de Python llamado prueba.py con el nano Editor de texto de la siguiente manera:

$ nano prueba.py

Ingrese el siguiente código en el prueba.py archivo. Línea 1 Importaciones Sensehat desde el sense_hat módulo, la línea 3 crea un Sensehat objeto y almacena una referencia en el sentido variable, y las líneas 5-6 establecen el color de los leds de 8 × 8 en rojo. Una vez que haya terminado, presione + X seguido por Y y .

Puedes ejecutar el prueba.py Script Python con el siguiente comando:

Prueba de $ python3.py

La matriz LED 8 × 8 debe brillar en color rojo como se muestra en la imagen a continuación.

Para apagar los leds del sombrero de sentido, ejecutar el claro() método sin ningún valor de color en el prueba.py Python script, como se muestra en la captura de pantalla a continuación, y ejecute el prueba.py Python script de nuevo.

Los LED del sombrero sensorial ahora deben apagarse, como se muestra en la imagen a continuación.

Si el sombrero sensorial funciona correctamente, luego pase a la siguiente sección.

Obtener datos meteorológicos de Sense Hat

Puede obtener datos del sensor del sombrero sensorial muy fácilmente utilizando el sombrero de sentido Biblioteca de Python. Para recuperar los datos del sensor del sombrero de sentido, puede crear un nuevo script de Python read_sensor_data.py como sigue:

$ nano read_sensor_data.py

Ingrese el siguiente código en el read_sensor_data.py Archivo de python.

de sense_hat import sensehat
Desde el tiempo de sueño
sentido = sensehat ()
sentido.claro()
Mientras que es cierto:
tempc = sentido.get_temperature ()
tempf = tempc * (9/5) + 32
presión = sentido.get_pressure ()
humedad = sentido.get_humidity ()
Imprimir ("Temperatura: %.2f ° C/%.2f ° F \ n " % (tempc, tempf))
Imprimir ("Presión: %.2f mb \ n " % (presión))
Imprimir ("Humedad: %.2f %% \ n \ n "%(humedad))
dormir (5)

Una vez que haya terminado, presione + X seguido por Y y .

En el código anterior, las líneas 1 y 2 importan todas las bibliotecas requeridas, la línea 4 crea un Sensehat objeto, y la línea 5 apaga todos los LED del sombrero de sentido usando el claro() método. El bucle while en la línea 7 es un bucle infinito que ejecutará el código en las líneas 8-16 para siempre.

En la línea 8, el get_temperature () El método se utiliza para leer los datos de temperatura (en grados Celsius) del sensor de humedad del sombrero sensorial. En la línea 9, los datos de temperatura se convierten de grados centígrados a grados Fahrenheit. En la línea 10, el get_pressure () El método se utiliza para leer los datos de la presión del aire (en Millibars) del sensor de presión del sombrero sensorial. En la línea 11, el get_humidity () El método se utiliza para leer los datos de humedad (en %) del sensor de humedad del sombrero sensorial.

Las líneas 13-15 se utilizan para imprimir los datos del sensor en la consola, y la línea 16 se usa para esperar 5 segundos antes de leer los datos del sensor nuevamente.

Puedes ejecutar el read_sensor_data.py Python script de la siguiente manera:

$ python3 read_sensor_data.py

Una vez que se ejecuta el script, los datos del sensor se imprimirán en la consola.

Ahora que podemos leer los datos del sensor del sombrero de sentido, presione + C Para detener el programa.

Creación de una aplicación web de la estación meteorológica

En esta sección, le mostraremos cómo usar el marco web de Python Flask para crear una API meteorológica y una aplicación meteorológica. La aplicación meteorológica accederá a la API de datos meteorológicos y mostrará los datos meteorológicos en tiempo real. Todo el código discutido en esta sección está disponible en GitHub en Shovon8/Raspberry-Pi-Sense-Hat-Weather-App.

Primero, crea un servidor.py Python script en el directorio del proyecto de la siguiente manera:

$ Nano Server.py

Ingrese el siguiente código en el servidor.py Archivo de python.

de Flask Import Flask
de frask import jsonify
de frask import render_template
de frask import url_for
de sense_hat import sensehat
App = Flask (__ Nombre__)
aplicación.config ['send_file_max_age_default'] = 0
sentido = sensehat ()
sentido.claro()
con aplicación.test_request_context ()::
Url_for ('static', filename = 'estilo.CSS ')
url_for ('static', filename = 'App.JS ')
@App.ruta ('/API')
def api ()::
tempc = sentido.get_temperature ()
tempf = tempc * (9/5) + 32
presión = sentido.get_pressure ()
presiónpsi = presión * 0.0145038
presiónp = presión * 100
humedad = sentido.get_humidity ()
return jsonify (
"Temperatura": "c": tempc, "f": tempf,
"Presión": "MB": Presión, "HPA": Presión,
"PSI": PressionPsi, "P": PressP,
"humedad": humedad
)
@App.ruta('/')
Def Home ():
return render_template ('./hogar.html ')

Entonces presione + X seguido por Y y Para salvar el servidor.py Guión de pitón.

En el código anterior, las líneas 1-5 importan todas las bibliotecas requeridas, la línea 7 crea una aplicación Flask, la línea 11 crea un objeto Sensehat y la línea 12 apaga todos los LED del Sense Hat. La línea 8 deshabilita el almacenamiento en caché web para la aplicación Flask. Debido a que esta aplicación es liviana, no hay necesidad de almacenar en caché. Si desea modificar la aplicación, entonces tener desactivado en caché web hará que las pruebas sean mucho más fáciles.

Líneas 18-31 Lea los datos del sensor del sombrero sensorial y devuelva los datos de la API en formato JSON en HTTP Get Solicitud en el /API punto final del servidor web. Líneas 37-39 Devuelve la página de inicio de la aplicación web del clima en el / punto final del servidor web. La página de inicio se representa del hogar.html archivo, que debería estar en el plantillas/ Directorio del directorio del proyecto.

Las líneas 14-16 se utilizan para permitir el acceso al estilo.CSS y aplicación.js archivos estáticos. Estos archivos deben estar en el estático/ Directorio del directorio del proyecto. El estilo.CSS el archivo se usa para diseñar el hogar.html página de inicio y el aplicación.js El archivo se utiliza para solicitar los datos de la API del /API punto final y actualizar los datos meteorológicos en el hogar.html página cada 5 segundos.

Crear el estático/ y plantillas/ directorio en el directorio del proyecto de la siguiente manera:

$ mkdir -v estático, plantillas

Crear un hogar.html archivo en el plantillas/ Directorio de la siguiente manera:

$ Nano Plantillas/Inicio.html

Ingrese el siguiente código en el hogar.html archivo.





Estación meteorológica de Raspberry Pi
href = "url_for ('static', filename =" estilo.CSS ")"/>



Estación meteorológica de Raspberry Pi



Temperatura












Presión




















Humedad











Entonces presione + X seguido por Y y Para salvar el hogar.html archivo.

Crear un estilo.CSS archivo en el estático/ Directorio de la siguiente manera:

$ nano estático/estilo.CSS

Ingrese los siguientes códigos en el estilo.CSS archivo.

@Import URL ('https: // fuentes.Googleapis.com/css2?familia = roboTo & display = swap ');
*
relleno: 0;
margen: 0;
Font-Family: 'Roboto', Sans-Serif;

cuerpo
Antecedentes: #737373;

H1
bloqueo de pantalla;
Color: #79DC7B;
Text-Align: Center;
Font-peso: 400;
Antecedentes: #000;
relleno: 0.5em 0;

H2
bloqueo de pantalla;
Antecedentes: #000;
Color: #fff;
Text-Align: Center;
Font-peso: 400;
tamaño de fuente: 1em;

.contenido de datos
margen: 10px;
borde: 2px negro sólido;
Border-Radius: 5px;
Color de fondo: #79DC7B;

.fila de datos
Pantalla: Flex;
Dirección flexible: fila;

.célula de datos
Ancho: 100%;
Altura: 80px;
Pantalla: Flex;
Alineación de ítems: Centro;
Justify-Content: Center;
Font-Weight: Bold;
tamaño de fuente: 1.5em;
Color: #006902;

.Data-Cell: Hover
Antecedentes: #FFE891;
Color: #AA8600;
cursor: puntero;

Entonces presione + X seguido por Y y Para salvar el estilo.CSS archivo.

Crear un aplicación.js archivo en el estático/ Directorio de la siguiente manera:

$ nano static/app.js

Ingrese el siguiente código en el aplicación.js archivo.

ventana.addEventListener ('Load', Main);
función main ()
función getApidata ()
var http = new xmlhttprequest ();
http.onreadyStateChange = function ()
si esto.ReadyState === 4 && esto.estado === 200)
Actualización (JSON.analizar (esto.ResponseText));


http.abrir ("Get", "/API", verdadero);
http.enviar();

Function Update (apidata)
var tempc = documento.getElementById ("tempc");
var tempf = documento.getElementById ("tempf");
var pressuremb = documento.getElementById ("Pressuremb");
VAR PressPsi = documento.getElementById ("PressionPsi");
var presiónhpa = documento.getElementById ("PressHPA");
VAR Pressp = documento.getElementById ("PressP");
var humedad = documento.GetElementById ("Humedad");
TEMPC.innerhtml = parsefloat (apidata.temperatura.C).tofixed (2) + "° C";
tempf.innerhtml = parsefloat (apidata.temperatura.F).tofixed (2) + "° F";
a presión.innerhtml = parsefloat (apidata.presión.megabyte).tofixed (2) + "MB";
presión.innerhtml = parsefloat (apidata.presión.psi).tofixed (2) + "psi";
presiónhpa.innerhtml = parsefloat (apidata.presión.HPA).tofixed (2) + "HPA";
presión.innerhtml = parsefloat (apidata.presión.PAG).tofixed (2) + "P";
humedad.innerhtml = parsefloat (apidata.humedad).tofixed (2) + " %";

función app ()
ventana.setInterval (function ()
getapidata ();
, 5000);

app ();

Entonces presione + X seguido por Y y Para salvar el aplicación.js archivo.

Aquí, la línea 1 ejecuta el principal() función cuando la página web finaliza la carga. En el principal() función, el getapidata () la función obtiene los datos de la API meteorológica usando AJAX y llama al actualizar() función (en la línea 10) una vez que los datos se han obtenido correctamente. El actualizar() La función actualiza el elemento de la página web utilizando los datos de la API.

En la línea 20, el documento.getElementById () El método se utiliza para obtener la referencia del elemento de la página web con la ID TEMPC. La línea 28 se utiliza para reemplazar el contenido del elemento de la página web que tiene la ID TEMPC con la temperatura (en Celsius) de la API. De la misma manera, el contenido de todos los elementos web (líneas 21-26) se reemplazan por sus respectivos datos de API.

En el aplicación () función, el getapidata () se llama cada 5 segundos (5000 milisegundos) para mantener los datos meteorológicos actualizados en la aplicación meteorológica. Finalmente, en la línea 46, el aplicación () la función se ejecuta.

Para probar la aplicación web, ingrese el siguiente comando:

$ Frask_app = servidor.Py Flask Run --host = 0.0.0.0

La aplicación meteorológica debe ejecutarse en el puerto 5000 (por defecto).

Para probar si la API meteorológica está funcionando, ejecute el siguiente comando:

$ curl -s http: // localhost: 5000/API | JSON_PP

Como puede ver, los datos de la API meteorológica se imprimen en la consola. Por lo tanto, la API está funcionando.

Para probar la aplicación meteorológica, visite http: // localhost: 5000 de un navegador web de cromo. La aplicación meteorológica debe cargarse en el navegador web, pero no se deben mostrar datos meteorológicos al principio.

Después de unos segundos, la aplicación meteorológica debe terminar de obtener los datos meteorológicos de la API y mostrarlos.

En cualquier momento, puedes presionar + C Para detener el servidor web.

Creación de servicio Systemd para la aplicación web meteorológica

En esta sección, le mostraremos cómo crear un archivo de servicio Systemd para la aplicación meteorológica para que automáticamente comience al arrancar.

Primero, crea un estación meteorológica.servicio Archivo en su directorio de proyecto de la siguiente manera:

$ nano-station.servicio

Ingrese las siguientes líneas de código en el estación meteorológica.servicio archivo.

[Unidad]
Descripción = Aplicación web de la estación meteorológica de Raspberry Pi usando el sombrero de sentido de Raspberry Pi
Después = red.objetivo
[Servicio]
WorkingDirectory =/Home/Pi/Work
Entorno = frask_app = servidor.py
Environmento = Flask_env = Producción
Execstart =/usr/bin/frask run --host = 0.0.0.0
StandardOutput = heredar
StandardError = heredar
Reiniciar = siempre
Usuario = PI
[Instalar]
Wantedby = Multi-user.objetivo

Entonces presione + X seguido por Y y Para salvar el estación meteorológica.servicio archivo.

Copia el estación meteorológica.servicio archivo al /etc/systemd/system/ directorio con el siguiente comando:

$ sudo cp -v -estación meteorológica.servicio/etc/systemd/system/

Recargar los Daemons Systemd para que los cambios entren en vigencia de la siguiente manera:

$ sudo SystemCtl-Daemon-Reload

El estación meteorológica El servicio Systemd debe estar inactivo en este momento, como se muestra en la captura de pantalla a continuación.

$ sudo systemctl estado meteorológico.servicio

Iniciar el estación meteorológica Servicio con el siguiente comando:

$ sudo systemctl start-station-station.servicio

Como puedes ver, el estación meteorológica El servicio ahora se está ejecutando.

$ sudo systemctl estado meteorológico.servicio

Ahora que el estación meteorológica El servicio está funcionando, puede agregarlo al inicio del sistema de Raspberry Pi OS con el siguiente comando:

$ sudo systemctl habilita la estación meteorológica.servicio

Reinicie su Raspberry Pi con el siguiente comando:

$ sudo reinicio

Una vez que sus botas de frambuesa Pi, la estación meteorológica El servicio debe estar ejecutado, como se muestra en la captura de pantalla a continuación.

$ sudo systemctl estado meteorológico.servicio

Acceder a la aplicación meteorológica desde otros dispositivos

Para acceder a la aplicación meteorológica desde otros dispositivos en su red doméstica, debe conocer la dirección IP de su Raspberry Pi. Puede encontrar la dirección IP de su Raspberry Pi 4 desde la interfaz de administración web de su enrutador de inicio. En nuestro caso, la dirección IP es 192.168.0.103, pero esta dirección será diferente para usted, así que asegúrese de reemplazar esta dirección con la suya en todos los pasos posteriores.

Si tiene acceso a la consola Raspberry Pi, también puede ejecutar el siguiente comando para encontrar la dirección IP también.

$ hostname -i

Una vez que conozca la dirección IP de su Raspberry Pi, puede acceder a ella desde cualquier dispositivo en su red doméstica. Como se muestra en la captura de pantalla a continuación, hemos accedido a la aplicación meteorológica desde un teléfono inteligente Android.

Conclusión

En este artículo, le mostramos cómo usar el sombrero de sensación de Raspberry Pi para construir una estación meteorológica de Raspberry Pi. Usamos el sombrero de sentido Biblioteca de Python para extraer datos meteorológicos del sombrero de sensación de Raspberry Pi. Luego, utilizamos el marco web de Flask Python Micro para crear una API meteorológica y una aplicación web. La aplicación web obtiene los datos meteorológicos de la API meteorológica cada 5 segundos para mantener la aplicación web actualizada con los últimos datos meteorológicos.