- Giroscopio
- Accelerometro
- Magnetometro
- Temperatura
- Pressione barometrica
- 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:
- Un Raspberry Pi 3 o Raspberry Pi 4 con connettività di rete.
- Un modulo Raspberry Pi Sense Hat.
- Un adattatore di alimentazione micro-USB (Raspberry Pi 3) o USB Type-C (Raspberry Pi 4).
- Una scheda microSD da 16 GB o 32 GB con sistema operativo Raspberry Pi.
- 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
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 SenseHatdal 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
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
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 Flaskfrom 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
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.
href=" url_for('static', nomefile="stile.css") "/>
Stazione meteo Raspberry Pi
Temperatura
…
…
Pressione
…
…
…
…
Umidità
…
Quindi, premere
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
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
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
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
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.