Frambuesa pi

Construya su propia estación meteorológica Raspberry Pi

Construya su propia estación meteorológica Raspberry Pi
Raspberry Pi Sense Hat es una placa complementaria que se puede utilizar con computadoras de placa única Raspberry Pi. El Raspberry Pi Sense Hat 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 Raspberry Pi Sense Hat. Para seguir este artículo, necesitará lo siguiente:

  1. Una Raspberry Pi 3 o Raspberry Pi 4 con conectividad de red.
  2. Un módulo Raspberry Pi Sense Hat.
  3. Un adaptador de corriente micro-USB (Raspberry Pi 3) o USB Type-C (Raspberry Pi 4).
  4. Una tarjeta microSD de 16 GB o 32 GB con sistema operativo Raspberry Pi.
  5. Una computadora portátil o de escritorio para acceso de escritorio remoto VNC o acceso SSH a la 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 la 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 cómo flashear la imagen del sistema operativo Raspberry Pi en una tarjeta microSD, consulte Cómo instalar y usar Raspberry Pi Imager. Si necesita ayuda para instalar el sistema operativo Raspberry Pi en su Raspberry Pi, lea Cómo instalar el sistema operativo Raspberry Pi en Raspberry Pi 4. Si necesita ayuda con la configuración sin cabeza de Raspberry Pi, consulte Cómo instalar y configurar el sistema operativo Raspberry Pi en Raspberry Pi 4 sin monitor externo.

Conexión de Raspberry Pi Sense Hat a Raspberry Pi

El kit Raspberry Pi Sense Hat viene con la placa adicional Raspberry Pi Sense Hat, un cabezal macho a hembra de 40 pines y algunos tornillos y espaciadores.

Antes de que pueda conectar la placa Sense Hat a la Raspberry Pi, debe conectar el encabezado de 40 pines al Sense Hat. Conecte los pines macho del cabezal macho-hembra de 40 pines al Sense Hat como se muestra en las imágenes a continuación.

Las computadoras de placa única Raspberry Pi tienen 4 orificios que se pueden usar para conectar placas adicionales o una carcasa. Para colocar la placa complementaria, inserte los tornillos de 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 debería verse como se muestra en la imagen a continuación.

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

NOTA: Tenga cuidado al desconectar el Raspberry Pi Sense Hat del encabezado GPIO de 40 pines de Raspberry Pi para evitar doblar los pines del GPIO de Raspberry Pi.

Con los cuatro tornillos restantes, apriete el Raspberry Pi Sense Hat, como se muestra en las imágenes a continuación.

Encendido de la Raspberry Pi

Ahora que el Raspberry Pi Sense Hat está conectado al Raspberry Pi, inserte la tarjeta microSD con el sistema operativo Raspberry Pi en la ranura para tarjetas microSD del Raspberry Pi, conecte el cable de alimentación al Raspberry Pi y enciéndalo.

Instalación de la biblioteca Python de Raspberry Pi Sense Hat

Para usar Raspberry Pi Sense Hat en Raspberry Pi, el sentido-sombrero La biblioteca de Python debe estar instalada en el sistema operativo Raspberry Pi. La sentido-sombrero la biblioteca está disponible en el repositorio oficial de paquetes de Raspberry Pi OS.

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

actualización de $ sudo apt

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

Crear un directorio de proyectos

Es una buena idea crear un directorio de proyecto para organizar los archivos de su proyecto. Para crear un directorio de proyecto ~ / trabajo, 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

Probando el Raspberry Pi Sense Hat

Para probar si Raspberry Pi Sense Hat está funcionando, podemos escribir una secuencia de comandos Python de prueba simple. Puede crear una nueva secuencia de comandos de Python llamada prueba.py con el nano editor de texto de la siguiente manera:

$ nano prueba.py

Ingrese el siguiente código en el prueba.py expediente. Importaciones de la línea 1 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 todos los LED de 8 × 8 en rojo. Una vez que haya terminado, presione + X seguido por Y y .

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

prueba $ python3.py

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

Para apagar los LED del Sense Hat, ejecute el claro() método sin ningún valor de color en el prueba.py Secuencia de comandos de Python, como se muestra en la captura de pantalla a continuación, y ejecute el prueba.py Secuencia de comandos de Python de nuevo.

Los LED del Sense Hat ahora deberían estar apagados, como se muestra en la imagen a continuación.

Si el Sense Hat funciona correctamente, pase a la siguiente sección.

Obtener datos meteorológicos de Sense Hat

Puede obtener datos del sensor del Sense Hat muy fácilmente utilizando el sentido-sombrero Biblioteca de Python. Para recuperar los datos del sensor de Sense Hat, puede crear una nueva secuencia de comandos 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 momento de importar el sueño
sense = SenseHat ()
sentido.claro()
mientras que es verdadero:
tempC = sentido.get_temperature ()
tempF = tempC * (9/5) + 32
presión = sentido.get_pressure ()
humedad = sentido.get_humidity ()
print ("Temperatura:%.2f ° C /%.2f ° F \ n "% (tempC, tempF))
print ("Presión:%.2f mb \ n "% (presión))
print ("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 Sense Hat 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 Sense Hat. En la línea 9, los datos de temperatura se convierten de grados Celsius a grados Fahrenheit. En la línea 10, el get_pressure () El método se utiliza para leer los datos de presión de aire (en milibares) del sensor de presión del Sense Hat. 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 Sense Hat.

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

Puedes ejecutar el read_sensor_data.py Secuencia de comandos de Python 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 Sense Hat, presione + C para detener el programa.

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

En esta sección, le mostraremos cómo usar el marco web 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 Secuencia de comandos de Python en el directorio del proyecto de la siguiente manera:

$ nano servidor.py

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

desde el matraz de importación Matraz
desde el matraz de importación jsonify
desde la importación de matraces render_template
desde el matraz de importación url_for
de sense_hat import SenseHat
app = Frasco (__ nombre__)
aplicación.config ['SEND_FILE_MAX_AGE_DEFAULT'] = 0
sense = SenseHat ()
sentido.claro()
con la aplicación.test_request_context ():
url_for ('estático', nombre de archivo = 'estilo.css ')
url_for ('estática', nombre de archivo = 'aplicación.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": presiónPsi, "P": presiónP,
"humedad": humedad
)
@app.ruta('/')
def hogar ():
return render_template ('./casa.html ')

Entonces presione + X seguido por Y y para salvar el servidor.py Secuencia de comandos de Python.

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. Line 8 deshabilita el almacenamiento en caché web para la aplicación Flask. Debido a que esta aplicación es liviana, no es necesario almacenar en caché. Si desea modificar la aplicación, deshabilitar el almacenamiento en caché web hará que las pruebas sean mucho más fáciles.

Las líneas 18-31 leen los datos del sensor de Sense Hat y devuelven los datos de la API en formato JSON en la solicitud HTTP GET en el / api punto final del servidor web. Las líneas 37-39 devuelven la página de inicio de la aplicación web del tiempo en el / punto final del servidor web. La página de inicio se representa desde el casa.html archivo, que debe estar en el plantillas/ directorio del directorio del proyecto.

Las líneas 14-16 se utilizan para permitir el acceso a la estilo.css y aplicación.js archivos estáticos. Estos archivos deben estar en el estático/ directorio del directorio del proyecto. La estilo.css archivo se utiliza para diseñar el casa.html página de inicio, y la aplicación.js El archivo se utiliza para solicitar los datos de la API del / api endpoint y actualice los datos meteorológicos en el casa.html página cada 5 segundos.

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

$ mkdir -v estático, plantillas

Crear un casa.html archivo en el plantillas/ directorio de la siguiente manera:

$ nano templates / inicio.html

Ingrese el siguiente código en el casa.html expediente.





Estación meteorológica Raspberry Pi
href = "url_for ('estático', nombre de archivo =" estilo.css ")" />



Estación meteorológica Raspberry Pi



Temperatura




..


..




Presión




..


..




..


..




Humedad




..






Entonces presione + X seguido por Y y para salvar el casa.html expediente.

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 expediente.

@import url ('https: // fuentes.googleapis.com / css2?familia = Roboto & display = swap ');
*
acolchado: 0;
margen: 0;
familia de fuentes: 'Roboto', sans-serif;

cuerpo
fondo: # 737373;

h1
bloqueo de pantalla;
color: # 79DC7B;
alineación de texto: centro;
peso de fuente: 400;
fondo: # 000;
acolchado: 0.5em 0;

h2
bloqueo de pantalla;
fondo: # 000;
color: #fff;
alineación de texto: centro;
peso de fuente: 400;
tamaño de fuente: 1em;

.contenido de datos
margen: 10px;
borde: 2px negro sólido;
radio del borde: 5px;
color de fondo: # 79DC7B;

.fila de datos
pantalla: flex;
dirección flexible: fila;

.celda de datos
ancho: 100%;
altura: 80px;
pantalla: flex;
alinear-elementos: centro;
justificar-contenido: centro;
font-weight: negrita;
tamaño de fuente: 1.5em;
color: # 006902;

.celda de datos: hover
fondo: # FFE891;
color: # AA8600;
cursor: puntero;

Entonces presione + X seguido por Y y para salvar el estilo.css expediente.

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

$ nano static / aplicación.js

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

ventana.addEventListener ('cargar', principal);
function main ()
function getAPIData ()
var http = new XMLHttpRequest ();
http.onreadystatechange = function ()
si esto.readyState === 4 && esto.estado === 200)
actualizar (JSON.analizar (esto.responseText));


http.open ("OBTENER", "/ api", verdadero);
http.enviar();

actualización de función (apiData)
var tempC = documento.getElementById ("tempC");
var tempF = documento.getElementById ("tempF");
var pressureMb = documento.getElementById ("pressureMb");
var pressurePsi = documento.getElementById ("presiónPsi");
var pressureHpa = documento.getElementById ("presiónHpa");
var presiónP = documento.getElementById ("presiónP");
var humedad = documento.getElementById ("humedad");
tempC.innerHTML = parseFloat (apiData.temperatura.C).toFixed (2) + "° C";
tempF.innerHTML = parseFloat (apiData.temperatura.F).toFixed (2) + "° F";
presiónMb.innerHTML = parseFloat (apiData.presión.megabyte).toFixed (2) + "mb";
presiónPsi.innerHTML = parseFloat (apiData.presión.psi).toFixed (2) + "psi";
presiónHpa.innerHTML = parseFloat (apiData.presión.hPa).toFixed (2) + "hPa";
presiónP.innerHTML = parseFloat (apiData.presión.PAG).toFixed (2) + "P";
humedad.innerHTML = parseFloat (apiData.humedad).toFixed (2) + "%";

function app ()
ventana.setInterval (function ()
getAPIData ();
, 5000);

aplicación ();

Entonces presione + X seguido por Y y para salvar el aplicación.js expediente.

Aquí, la línea 1 corre el principal() función cuando la página web termina de cargarse. En el principal() función, la getAPIData () La función obtiene los datos de la API meteorológica mediante AJAX y llama al actualizar() función (en la línea 10) una vez que los datos se hayan obtenido con éxito. La 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 usa para obtener la referencia del elemento de la página web con el id tempC. La línea 28 se usa para reemplazar el contenido del elemento de la página web que tiene la identificación tempC con la temperatura (en grados Celsius) de la API. De la misma forma, los contenidos de todos los elementos web (líneas 21-26) se reemplazan con sus respectivos datos API.

En el aplicación () función, la 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 () se ejecuta la función.

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

$ FLASK_APP = servidor.py matraz ejecutar --host = 0.0.0.0

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

Para probar si la API de Weather 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 Weather, visite http: // localhost: 5000 desde un navegador web Chromium. La aplicación Weather 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 debería terminar de obtener los datos meteorológicos de la API y mostrarlos.

En cualquier momento, puede presionar + C para detener el servidor web.

Creación de un servicio Systemd para la aplicación web Weather

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

Primero, crea un estación meteorológica.Servicio archivo en el directorio de su proyecto de la siguiente manera:

$ nano estación meteorológica.Servicio

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

[Unidad]
Descripción = Aplicación web de la estación meteorológica Raspberry Pi con Raspberry Pi Sense Hat
Después = red.objetivo
[Servicio]
WorkingDirectory = / inicio / pi / trabajo
Entorno = FLASK_APP = servidor.py
Entorno = FLASK_ENV = producción
ExecStart = / usr / bin / flask run --host = 0.0.0.0
StandardOutput = heredar
StandardError = heredar
Reiniciar = siempre
Usuario = pi
[Instalar en pc]
WantedBy = multiusuario.objetivo

Entonces presione + X seguido por Y y para salvar el estación meteorológica.Servicio expediente.

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 /

Vuelva a cargar los demonios systemd para que los cambios surtan efecto de la siguiente manera:

$ sudo systemctl daemon-reload

La estación meteorológica El servicio systemd debería estar inactivo en este momento, como se muestra en la captura de pantalla a continuación.

$ sudo systemctl status estación meteorológica.Servicio

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

$ sudo systemctl start estación meteorológica.Servicio

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

$ sudo systemctl status estación meteorológica.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 habilitar estación meteorológica.Servicio

Reinicie su Raspberry Pi con el siguiente comando:

$ sudo reiniciar

Una vez que su Raspberry Pi arranca, el estación meteorológica El servicio debe estar ejecutándose, como se muestra en la captura de pantalla a continuación.

$ sudo systemctl status estación meteorológica.Servicio

Acceso a la aplicación Weather desde otros dispositivos

Para acceder a la aplicación meteorológica desde otros dispositivos en su red doméstica, necesita conocer la dirección IP de su Raspberry Pi. Puede encontrar la dirección IP de su Raspberry Pi 4 en la interfaz de administración web de su enrutador doméstico. 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 siguientes.

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

$ nombre de host -I

Una vez que conozca la dirección IP de su Raspberry Pi, podrá acceder a ella desde cualquier dispositivo de 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 Raspberry Pi Sense Hat para construir una estación meteorológica Raspberry Pi. Usamos el sentido-sombrero Biblioteca de Python para extraer datos meteorológicos de Raspberry Pi Sense Hat. Luego, usamos el marco micro web Flask Python 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 datos meteorológicos más recientes.

Cómo cambiar la configuración del mouse y el panel táctil con Xinput en Linux
La mayoría de las distribuciones de Linux se envían con la biblioteca "libinput" de forma predeterminada para manejar eventos de entrada en un sistema...
Vuelva a asignar los botones del mouse de manera diferente para diferentes programas con X-Mouse Button Control
Tal vez necesite una herramienta que pueda hacer que el control de su mouse cambie con cada aplicación que use. Si este es el caso, puede probar una a...
Revisión del mouse inalámbrico Microsoft Sculpt Touch
Recientemente leí sobre el Microsoft Sculpt Touch mouse inalámbrico y decidí comprarlo. Después de usarlo por un tiempo, decidí compartir mi experienc...