Lampone Pi

Costruisci la tua stazione meteorologica Raspberry Pi

Costruisci la tua stazione meteorologica Raspberry Pi
Raspberry Pi Sense Hat è una scheda aggiuntiva che può essere utilizzata con i computer a scheda singola Raspberry Pi. Il Raspberry Pi Sense Hat ha un display LED 8×8 e un joystick a 5 pulsanti ed è dotato dei seguenti sensori:

  1. Giroscopio
  2. Accelerometro
  3. Magnetometro
  4. Temperatura
  5. Pressione barometrica
  6. Umidità

In questo articolo, ti mostrerò come creare un'applicazione web per una stazione meteorologica basata su API Python utilizzando il temperatura, pressione barometrica, e umidità sensori del Raspberry Pi Sense Hat. Per seguire questo articolo, avrai bisogno di quanto segue:

  1. Un Raspberry Pi 3 o Raspberry Pi 4 con connettività di rete.
  2. Un modulo Raspberry Pi Sense Hat.
  3. Un adattatore di alimentazione micro-USB (Raspberry Pi 3) o USB Type-C (Raspberry Pi 4).
  4. Una scheda microSD da 16 GB o 32 GB con sistema operativo Raspberry Pi.
  5. Un laptop o un computer desktop per l'accesso al desktop remoto VNC o l'accesso SSH al Raspberry Pi.

NOTA: In questo articolo, ci collegheremo al Raspberry Pi in remoto tramite VNC o SSH utilizzando la configurazione headless del Raspberry Pi. Se non desideri accedere al tuo Raspberry Pi da remoto tramite SSH o VNC, dovrai collegare un monitor, una tastiera e un mouse al tuo Raspberry Pi.

Per sapere come eseguire il flashing dell'immagine del sistema operativo Raspberry Pi su una scheda microSD, fare riferimento a Come installare e utilizzare Raspberry Pi Imager. Se hai bisogno di aiuto per installare il sistema operativo Raspberry Pi sul tuo Raspberry Pi, leggi Come installare il sistema operativo Raspberry Pi su Raspberry Pi 4. Se hai bisogno di aiuto con la configurazione headless di Raspberry Pi, consulta Come installare e configurare il sistema operativo Raspberry Pi su Raspberry Pi 4 senza monitor esterno.

Collegamento di Raspberry Pi Sense Hat a Raspberry Pi

Il kit Raspberry Pi Sense Hat viene fornito con la scheda aggiuntiva Raspberry Pi Sense Hat, un'intestazione maschio-femmina a 40 pin e alcune viti e distanziali.

Prima di poter collegare la scheda Sense Hat al Raspberry Pi, devi collegare l'intestazione a 40 pin al Sense Hat. Collegare i pin maschio dell'intestazione maschio-femmina a 40 pin al Sense Hat come mostrato nelle immagini qui sotto.

I computer a scheda singola Raspberry Pi hanno 4 fori che possono essere utilizzati per collegare schede aggiuntive o una custodia. Per collegare la scheda aggiuntiva, inserisci le viti dal retro del Raspberry Pi, come mostrato nelle immagini qui sotto.

Quindi, collegare un distanziale alla vite.

Dopo aver aggiunto tutte e quattro le viti e i distanziatori, il tuo Raspberry Pi dovrebbe apparire come quello mostrato nell'immagine qui sotto.

Collega il Raspberry Pi Sense Hat all'intestazione maschio GPIO a 40 pin del Raspberry Pi, come mostrato nelle immagini qui sotto.

NOTA: Prestare attenzione quando si scollega il Raspberry Pi Sense Hat dall'intestazione GPIO a 40 pin Raspberry Pi per evitare di piegare i pin del GPIO Raspberry Pi.

Con le quattro viti rimanenti, fissa il Raspberry Pi Sense Hat, come mostrato nelle immagini qui sotto.

Accensione del Raspberry Pi

Ora che il Raspberry Pi Sense Hat è collegato al Raspberry Pi, inserisci la scheda microSD con il sistema operativo Raspberry Pi nello slot per schede microSD del Raspberry Pi, collega il cavo di alimentazione al Raspberry Pi e accendilo.

Installazione della libreria Python di Raspberry Pi Sense Hat

Per utilizzare Raspberry Pi Sense Hat sul Raspberry Pi, il cappello sensoriale La libreria Python deve essere installata sul sistema operativo Raspberry Pi. Il cappello sensoriale la libreria è disponibile nel repository ufficiale dei pacchetti del sistema operativo Raspberry Pi.

Per installare il Raspberry Pi cappello sensoriale Libreria Python sul sistema operativo Raspberry Pi, aggiorna prima la cache del repository del pacchetto APT con il seguente comando:

$ sudo apt update

Quindi, esegui il seguente comando:

$ sudo apt install sense-hat -y

Installazione della libreria Python di Flask Micro Web Framework

Useremo il framework Flask Python per creare la nostra applicazione meteo. Puoi installare Flask dal repository ufficiale dei pacchetti del sistema operativo Raspberry Pi con il seguente comando:

$ sudo apt install python3-flask -y

Creazione di una directory di progetto

È una buona idea creare una directory di progetto per organizzare i file di progetto. Per creare una directory di progetto ~/lavoro, usa il seguente comando:

$ mkdir ~/lavoro

Una volta creata la directory del progetto, accedere alla directory del progetto come segue:

$ cd ~/lavoro

Testare il cappello Sense Raspberry Pi

Per verificare se il Raspberry Pi Sense Hat funziona, possiamo scrivere un semplice script Python di prova. Puoi creare un nuovo script Python chiamato test.pi con il nano editor di testo come segue:

$ nano test.pi

Inserisci il seguente codice nel test.pi file. Importazioni della riga 1 SensoCappello dal cappello_senso modulo, la riga 3 crea a SensoCappello oggetto e memorizza un riferimento nel senso variabile e le righe 5-6 impostano il colore di tutti i LED 8×8 su rosso. Una volta terminato, premere + X seguito da e .

Puoi eseguire il test.pi Script Python con il seguente comando:

$ python3 test.pi

La matrice LED 8×8 dovrebbe illuminarsi di colore rosso come mostrato nell'immagine qui sotto.

Per spegnere i LED del Sense Hat, esegui il pulsante chiaro() metodo senza alcun valore di colore nel test.pi Script Python, come mostrato nello screenshot qui sotto, ed esegui il test.pi Ancora script Python.

I LED del Sense Hat dovrebbero ora essere spenti, come mostrato nell'immagine qui sotto.

Se Sense Hat funziona correttamente, passa alla sezione successiva.

Ottenere dati meteo da Sense Hat

È possibile ottenere i dati del sensore dal Sense Hat molto facilmente utilizzando il cappello sensoriale Libreria Python. Per recuperare i dati del sensore dal Sense Hat, puoi creare un nuovo script Python read_sensor_data.pi come segue:

$ nano read_sensor_data.pi

Inserisci il seguente codice nel read_sensor_data.pi File Python.

from sense_hat import SenseHat
dal tempo importa il sonno
senso = Cappello Sense()
senso.chiaro()
mentre vero:
tempC = senso.ottieni_temperatura()
tempF = tempC * (9/5) + 32
pressione = senso.get_pressione()
umidità = senso.get_umidità()
print("Temperatura: %.2°C/%.2f°F\n" % (tempC, tempF))
print("Pressione: %.2f mb\n" % (pressione))
print("Umidità: %.2f%%\n\n" % (umidità))
dormire(5)

Una volta terminato, premere + X seguito da e .

Nel codice sopra, le righe 1 e 2 importano tutte le librerie richieste, la riga 4 crea a SensoCappello oggetto e la riga 5 spegne tutti i LED del Sense Hat utilizzando il tasto chiaro() metodo. Il ciclo while nella riga 7 è un ciclo infinito che eseguirà il codice nelle righe 8-16 per sempre.

Nella riga 8, il ottieni_temperatura() viene utilizzato per leggere i dati di temperatura (in gradi Celsius) dal sensore di umidità del Sense Hat. Nella riga 9, i dati della temperatura vengono convertiti da gradi Celsius a gradi Fahrenheit. Nella riga 10, il get_pressione() viene utilizzato per leggere i dati della pressione dell'aria (in millibar) dal sensore di pressione del Sense Hat. Nella riga 11, il get_umidità() viene utilizzato per leggere i dati di umidità (in %) dal sensore di umidità del Sense Hat.

Le righe 13-15 vengono utilizzate per stampare i dati del sensore sulla console e la riga 16 viene utilizzata per attendere 5 secondi prima di leggere nuovamente i dati del sensore.

Puoi eseguire il read_sensor_data.pi Script Python come segue:

$ python3 read_sensor_data.pi

Una volta eseguito lo script, i dati del sensore verranno stampati sulla console.

Ora che possiamo leggere i dati del sensore dal Sense Hat, premi + C per interrompere il programma.

Creazione di un'app Web per una stazione meteorologica

In questa sezione, ti mostreremo come utilizzare il framework web Python Flask per creare un'API meteo e un'applicazione meteo. L'applicazione meteo accederà all'API dei dati meteo e mostrerà i dati meteo in tempo reale. Tutto il codice discusso in questa sezione è disponibile su GitHub all'indirizzo shovon8/raspberry-pi-sense-hat-weather-app.

Per prima cosa, crea un server.pi Script Python nella directory del progetto come segue:

$ nano server.pi

Inserisci il seguente codice nel server.pi File Python.

from flask import Flask
from flask import jsonify
from flask import render_template
from flask import url_for
from sense_hat import SenseHat
app = Flask(__name__)
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
senso = Cappello Sense()
senso.chiaro()
con app.test_request_context():
url_for('static', filename='stile.css')
url_for('static', filename='app.js')
@app.percorso('/api')
def api():
tempC = senso.ottieni_temperatura()
tempF = tempC * (9/5) + 32
pressione = senso.get_pressione()
pressionePsi = pressione * 0.0145038
pressioneP = pressione * 100
umidità = senso.get_umidità()
return jsonify(
"temperatura": "C": tempC, "F": tempF ,
"pressione": "mb": pressione, "hPa": pressione,
"psi": pressionePsi, "P": pressioneP ,
"umidità": umidità
)
@app.itinerario('/')
def home():
return render_template('./casa.html')

Quindi, premere + X seguito da e per salvare il server.pi Script Python.

Nel codice sopra, le righe 1-5 importano tutte le librerie richieste, la riga 7 crea un'app Flask, la riga 11 crea un oggetto SenseHat e la riga 12 spegne tutti i LED del Sense Hat. La linea 8 disabilita la cache web per l'app Flask. Poiché questa app è leggera, non è necessario memorizzare nella cache. Se desideri modificare l'app, disabilitare la cache web renderà i test molto più semplici.

Le righe 18-31 leggono i dati del sensore dal Sense Hat e restituiscono i dati API in formato JSON sulla richiesta HTTP GET nel /api endpoint del server web. Le righe 37-39 restituiscono la home page dell'app web meteo sul / endpoint del server web. La homepage è resa dal casa.html file, che dovrebbe essere in modelli/ directory della directory del progetto.

Le righe 14-16 sono utilizzate per consentire l'accesso al stile.css e app.js file statici. Questi file dovrebbero essere in statico/ directory della directory del progetto. Il stile.css il file è usato per modellare il casa.html homepage e il and app.js viene utilizzato per richiedere i dati API dal from /api endpoint e aggiornare i dati meteo sul casa.html pagina ogni 5 secondi.

Crea il statico/ e modelli/ directory nella directory del progetto come segue:

$ mkdir -v statico,modelli

Creare un casa.html file nel modelli/ directory come segue:

$ nano modelli/home.html

Inserisci il seguente codice nel casa.html file.





Stazione meteo Raspberry Pi
href=" url_for('static', nomefile="stile.css") "/>



Stazione meteo Raspberry Pi



Temperatura












Pressione




















Umidità











Quindi, premere + X seguito da e per salvare il casa.html file.

Creare un stile.css file nel statico/ directory come segue:

$ nano statico/stile.css

Inserisci i seguenti codici nel in stile.css file.

@import url('https://fonts.googleapis.com/css2?famiglia=Roboto&display=scambio');
*
imbottitura: 0;
margine: 0;
font-family: 'Roboto', sans-serif;

corpo
sfondo: #737373;

h1
blocco di visualizzazione;
colore: #79DC7B;
allineamento del testo: centro;
peso del carattere: 400;
sfondo: #000;
imbottitura: 0.5em 0;

h2
blocco di visualizzazione;
sfondo: #000;
colore: #fff;
allineamento del testo: centro;
peso del carattere: 400;
dimensione del carattere: 1em;

.contenuto-dati
margine: 10px;
bordo: 2px nero solido;
raggio di confine: 5px;
colore di sfondo: #79DC7B;

.riga-dati
display: flessibile;
direzione di flessione: riga;

.cella dati
larghezza: 100%;
altezza: 80px;
display: flessibile;
allinea-elementi: centro;
giustifica-contenuto: centro;
font-weight: grassetto;
dimensione del carattere: 1.5 mesi;
colore: #006902;

.data-cell:hover
sfondo: #FFE891;
colore: #AA8600;
cursore: puntatore;

Quindi, premere + X seguito da e per salvare il stile.css file.

Creare un app.js file nel statico/ directory come segue:

$ nano statico/app.js

Inserisci il seguente codice nel app.js file.

finestra.addEventListener('load', main);
funzione principale()
function getAPIData()
var http = new XMLHttpRequest();
http.onreadystatechange = function()
se questo.readyState === 4 && questo.stato === 200)
aggiornamento (JSON.analizzare (questo.testorisposta));


http.open("GET", "/api", true);
http.Spedire();

aggiornamento della funzione (apiData)
var tempC = documento.getElementById("tempC");
var tempF = documento.getElementById("tempF");
var pressioneMb = documento.getElementById("PressioneMb");
var pressionePsi = documento.getElementById("pressionePsi");
var pressioneHpa = documento.getElementById("pressioneHpa");
var pressioneP = documento.getElementById("pressioneP");
var umidità = documento.getElementById("umidità");
tempC.innerHTML = parseFloat(apiData.temperatura.C).aFisso(2) + "°C";
tempF.innerHTML = parseFloat(apiData.temperatura.F).aFisso(2) + "°F";
pressioneMb.innerHTML = parseFloat(apiData.pressione.mb).toFixed(2) + "mb";
pressionePsi.innerHTML = parseFloat(apiData.pressione.psi).toFisso(2) + " psi";
pressioneHpa.innerHTML = parseFloat(apiData.pressione.hPa).toFisso(2) + " hPa";
pressioneP.innerHTML = parseFloat(apiData.pressione.P).aFisso(2) + "P";
umidità.innerHTML = parseFloat(apiData.umidità).aFisso(2) + "%";

funzione app()
finestra.setInterval(funzione()
getAPIData();
, 5000);

app();

Quindi, premere + X seguito da e per salvare il app.js file.

Qui, la linea 1 esegue il principale() funzione al termine del caricamento della pagina web. Nel principale() funzione, il getAPIData() la funzione recupera i dati dell'API meteo utilizzando AJAX e chiama il aggiornare() funzione (nella riga 10) una volta che i dati sono stati recuperati con successo. Il aggiornare() la funzione aggiorna l'elemento della pagina web utilizzando i dati dell'API.

Nella riga 20, il documento.getElementById() viene utilizzato per ottenere il riferimento dell'elemento della pagina Web con l'id tempC. La riga 28 viene utilizzata per sostituire il contenuto dell'elemento della pagina Web che ha l'id tempC con la temperatura (in Celsius) dall'API. Allo stesso modo, i contenuti di tutti gli elementi web (righe 21-26) vengono sostituiti con i rispettivi dati API.

Nel app() funzione, il getAPIData() viene chiamato ogni 5 secondi (5000 millisecondi) per mantenere aggiornati i dati meteo nell'app meteo. Infine, nella riga 46, il app() la funzione viene eseguita.

Per testare l'app Web, inserisci il seguente comando:

$ FLASK_APP=server.py flask run --host=0.0.0.0

L'app meteo dovrebbe essere eseguita sulla porta 5000 (per impostazione predefinita).

Per verificare se l'API Weather funziona, esegui il seguente comando:

$ curl -s http://localhost:5000/api | json_pp

Come puoi vedere, i dati dell'API Weather vengono stampati sulla console. Pertanto, l'API funziona.

Per testare l'app Meteo, visita http://localhost:5000 da un browser web Chromium. L'app Meteo dovrebbe essere caricata sul browser web, ma all'inizio non dovrebbero essere visualizzati dati meteo.

Dopo alcuni secondi, l'app meteo dovrebbe terminare il recupero dei dati meteo dall'API e visualizzarli.

In qualsiasi momento, puoi premere + C per fermare il server web.

Creazione del servizio Systemd per l'app Web Weather

In questa sezione, ti mostreremo come creare un file di servizio systemd per l'app meteo in modo che si avvii automaticamente all'avvio.

Per prima cosa, crea un Stazione metereologica.servizio file nella directory del progetto come segue:

$ nano stazione meteo.servizio

Inserisci le seguenti righe di codice nel in Stazione metereologica.servizio file.

[Unità]
Description=App Web della stazione meteo Raspberry Pi che utilizza il cappello Sense Raspberry Pi
Dopo=rete.bersaglio
[Servizio]
Directorydilavoro=/casa/pi/lavoro
Ambiente=FLASK_APP=server.pi
Ambiente=FLASK_ENV=produzione
ExecStart=/usr/bin/flask run --host=0.0.0.0
StandardOutput=eredita
StandardError=eredita
Riavvia=sempre
Utente=pi
[Installare]
WantedBy=multiutente.bersaglio

Quindi, premere + X seguito da e per salvare il Stazione metereologica.servizio file.

Copia il Stazione metereologica.servizio file per il /etc/systemd/system/ directory con il seguente comando:

$ sudo cp -v stazione meteo.servizio /etc/systemd/system/

Ricaricare i demoni systemd per rendere effettive le modifiche come segue:

$ sudo systemctl daemon-reload

Il Stazione metereologica il servizio systemd dovrebbe essere inattivo al momento, come mostrato nello screenshot qui sotto.

$ sudo systemctl stato stazione meteo.servizio

Inizia il Stazione metereologica servizio con il seguente comando:

$ sudo systemctl start stazione meteo.servizio

Come puoi vedere, il Stazione metereologica il servizio è ora in esecuzione.

$ sudo systemctl stato stazione meteo.servizio

Ora che il Stazione metereologica servizio funziona, puoi aggiungerlo all'avvio del sistema del sistema operativo Raspberry Pi con il seguente comando:

$ sudo systemctl abilita stazione meteo.servizio

Riavvia il tuo Raspberry Pi con il seguente comando:

$ sudo reboot

Una volta che il tuo Raspberry Pi si avvia, il Stazione metereologica il servizio dovrebbe essere in esecuzione, come mostrato nello screenshot qui sotto.

$ sudo systemctl stato stazione meteo.servizio

Accesso all'app Meteo da altri dispositivi

Per accedere all'app meteo da altri dispositivi della tua rete domestica, devi conoscere l'indirizzo IP del tuo Raspberry Pi. Puoi trovare l'indirizzo IP del tuo Raspberry Pi 4 dall'interfaccia di gestione web del tuo router di casa. Nel nostro caso, l'indirizzo IP è 192.168.0.103, ma questo indirizzo sarà diverso per te, quindi assicurati di sostituire questo indirizzo con il tuo in tutti i passaggi successivi.

Se hai accesso alla console Raspberry Pi, puoi eseguire il seguente comando per trovare anche l'indirizzo IP.

$ hostname -I

Una volta che conosci l'indirizzo IP del tuo Raspberry Pi, puoi accedervi da qualsiasi dispositivo nella tua rete domestica. Come mostrato nello screenshot qui sotto, abbiamo avuto accesso all'app meteo da uno smartphone Android.

Conclusione

In questo articolo, ti abbiamo mostrato come utilizzare il Raspberry Pi Sense Hat per costruire una stazione meteorologica Raspberry Pi. Abbiamo usato il cappello sensoriale Libreria Python per estrarre i dati meteo dal Raspberry Pi Sense Hat. Quindi, abbiamo utilizzato il micro framework web Flask Python per creare un'API meteo e un'applicazione web. L'app Web ottiene i dati meteo dall'API meteo ogni 5 secondi per mantenere l'app Web aggiornata con i dati meteo più recenti.

Come modificare le impostazioni del mouse e del touchpad utilizzando Xinput in Linux
La maggior parte delle distribuzioni Linux viene fornita con la libreria "libinput" per impostazione predefinita per gestire gli eventi di input su un...
Rimappa i pulsanti del mouse in modo diverso per software diversi con X-Mouse Button Control
Forse hai bisogno di uno strumento che possa cambiare il controllo del tuo mouse con ogni applicazione che utilizzi. In questo caso, puoi provare un'a...
Recensione del mouse wireless Microsoft Sculpt Touch
Ho letto di recente del Microsoft Scolpisci il tocco mouse wireless e ho deciso di acquistarlo. Dopo averlo usato per un po', ho deciso di condividere...