Costruisci la tua stazione meteorologica Raspberry Pi

Costruisci la tua stazione meteorologica Raspberry Pi
Raspberry Pi Sense Hat è una scheda componente aggiuntiva che può essere utilizzata con computer a bordo di Raspberry Pi. Il cappello di Sense Raspberry Pi ha un display LED 8 × 8 e un joystick a 5 bottoni, e è 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 Web Station basata su API Python utilizzando il temperatura, pressione barometrica, E umidità Sensori del cappello di Sense Raspberry Pi. Per seguire questo articolo, avrai bisogno di quanto segue:

  1. A Raspberry Pi 3 o Raspberry Pi 4 con connettività di rete.
  2. Un modulo di cappello da lampone.
  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 a Raspberry Pi.

NOTA: In questo articolo, ci connetteremo a Raspberry Pi da remoto tramite VNC o SSH utilizzando la configurazione senza testa di Raspberry Pi. Se non si desidera 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 imparare a flashing dell'immagine del sistema operativo Raspberry Pi su una scheda MicroSD, si prega di 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 senza testa di Raspberry Pi, dai un'occhiata a come installare e configurare il sistema operativo Raspberry Pi su Raspberry Pi 4 senza monitor esterno.

Collegamento del cappello di Sense Raspberry Pi a Raspberry Pi

Il kit di cappelli Sense Raspberry Pi viene fornito con la tavola per componente aggiuntiva Raspberry Pi Sense, un'intestazione da maschio a femmina da 40 pin e alcune viti e distanziali.

Prima di poter attaccare la tavola da cappello sensoriale al Raspberry Pi, è necessario collegare l'intestazione a 40 pin al cappello da senso. Collega i pin maschili dell'intestazione maschio-femmina a 40 pin al cappello di senso come mostrato nelle immagini sottostanti.

I computer a bordo a bordo di Raspberry PI hanno 4 fori che possono essere utilizzati per allegare schede aggiuntive o una custodia. Per collegare la scheda aggiuntiva, inserire viti dal retro di Raspberry Pi, come mostrato nelle immagini sottostanti.

Quindi, collegare un distanziatore alla vite.

Una volta che aggiungi tutte e quattro le viti e i distanziali, il tuo Raspberry Pi dovrebbe apparire come quello mostrato nell'immagine qui sotto.

Collegare il cappello di Sense Raspberry Pi alla testata maschile GPIO a 40 pin di Raspberry Pi, come mostrato nelle immagini sottostanti.

NOTA: Fai attenzione mentre scollega il cappello di Sense Raspberry Pi dall'intestazione GPIO da 40 pin di lampone per evitare di piegare i pin del lampone PI GPIO.

Con le quattro viti rimanenti, fissare il cappello di Sense Raspberry Pi, come mostrato nelle immagini sottostanti.

Accensione sul Raspberry Pi

Ora che il cappello di Sense Raspberry Pi è collegato al Raspberry Pi, inserire la scheda MicroSD con sistema operativo Raspberry Pi nello slot per schede microSD del Raspberry Pi, collegare il cavo di alimentazione al Raspberry Pi e accenderla.

Installazione della libreria Python di Raspberry Pi Sense Hat

Per usare il cappello di Sense Raspberry Pi su Raspberry Pi, il Hat-Hat La libreria Python deve essere installata sul sistema operativo Raspberry Pi. IL Hat-Hat La libreria è disponibile nel repository di pacchetti ufficiali di Raspberry Pi OS.

Per installare il Raspberry Pi Hat-Hat 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 Installa Sense -Hat -y

Installazione della libreria Python Framework Micro Framework Flask

Useremo il framework Python Flask per creare la nostra applicazione meteorologica. È possibile installare il pallone dal repository del pacchetto ufficiale 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, vai alla directory del progetto come segue:

$ cd ~/lavoro

Testare il cappello di Sense Raspberry Pi

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

$ nano test.Py

Immettere il seguente codice in test.Py file. Principe della riga 1 Sensehat dal Sense_hat Modulo, la riga 3 crea a Sensehat oggetto e memorizza un riferimento in senso variabile e righe 5-6 Imposta il colore di tutti i LED 8 × 8 su rosso. Una volta terminato, premere + X seguito da Y E .

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

Test $ Python3.Py

La matrice LED 8 × 8 dovrebbe brillare di colore rosso come mostrato nell'immagine sottostante.

Per spegnere i LED del cappello da sensazione, eseguire il chiaro() metodo senza alcun valore di colore in test.Py Script Python, come mostrato nello screenshot seguente, ed eseguire il test.Py Script di Python di nuovo.

I LED del cappello da senso dovrebbero ora essere disattivati, come mostrato nell'immagine qui sotto.

Se il cappello da senso funziona correttamente, passa alla sezione successiva.

Ottenere dati meteorologici da Sense Hat

È possibile ottenere i dati del sensore dal cappello di sensazione molto facilmente usando il Hat-Hat Biblioteca Python. Per recuperare i dati dei sensori dal cappello da sensazione, è possibile creare un nuovo script Python read_sensor_data.Py come segue:

$ nano read_sensor_data.Py

Immettere il seguente codice in read_sensor_data.Py File Python.

da Sense_hat Import Sensehat
Dal tempo Import Sleep
Sense = SenseHat ()
senso.chiaro()
mentre è vero:
tempc = senso.get_temperature ()
tempf = tempc * (9/5) + 32
Pressione = senso.get_pressure ()
umidità = senso.get_humidità ()
Stampa ("Temperatura: %.2F ° C/%.2f ° f \ n " % (tempc, tempf))
Stampa ("Pressione: %.2f Mb \ n " % (pressione))
Stampa ("Umidità: %.2F %% \ n \ n "%(umidità))
sonno (5)

Una volta terminato, premere + X seguito da Y E .

Nel codice sopra, le righe 1 e 2 importano tutte le librerie richieste, la riga 4 crea a Sensehat oggetto, e la riga 5 disattiva tutti i LED del cappello da senso usando il 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 get_temperature () Il metodo viene utilizzato per leggere i dati di temperatura (in gradi Celsius) dal sensore di umidità del Cappello Sense. Nella riga 9, i dati di temperatura vengono convertiti da gradi Celsius in gradi Fahrenheit. Nella riga 10, il get_pressure () Il metodo viene utilizzato per leggere i dati di pressione dell'aria (in millibar) dal sensore di pressione del cappello sensoriale. Nella riga 11, il get_humidità () Il metodo viene utilizzato per leggere i dati sull'umidità (in %) dal sensore di umidità del cappello sensato.

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 di nuovo i dati del sensore.

Puoi eseguire il read_sensor_data.Py Script Python come segue:

$ python3 read_sensor_data.Py

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

Ora che possiamo leggere i dati del sensore dal Cappello Sense, premere + C per fermare il programma.

Creazione di un'app Web della stazione meteorologica

In questa sezione, ti mostreremo come utilizzare il framework Web Python Flask per creare un'API meteorologica e un'applicazione meteorologica. L'applicazione meteorologica accederà all'API dei dati meteorologici e mostrerà i dati meteorologici in tempo reale. Tutto il codice discusso in questa sezione è disponibile su GitHub su Shovon8/Raspberry-PI-HAT-HAT-Weather-app.

Innanzitutto, crea un server.Py Script Python nella directory del progetto come segue:

$ nano server.Py

Immettere il seguente codice in server.Py File Python.

Dal pallone di importazione di pallone
da Flask Import Jsonify
Dall'importazione del pallone render_template
da Flask Import Url_For
da Sense_hat Import Sensehat
app = pallone (__ nome__)
app.config ['send_file_max_age_default'] = 0
Sense = SenseHat ()
senso.chiaro()
con app.test_request_context ():
url_for ('static', filename = 'stile.CSS ')
url_for ('static', filename = 'app.js ')
@App.Route ('/API')
def api ():
tempc = senso.get_temperature ()
tempf = tempc * (9/5) + 32
Pressione = senso.get_pressure ()
presspesi = pressione * 0.0145038
pressPp = pressione * 100
umidità = senso.get_humidità ()
return jsonify (
"temperatura": "c": tempc, "f": tempf,
"Pressione": "MB": pressione, "HPA": pressione,
"psi": presspesi, "p": pressp,
"Umidità": umidità
)
@App.itinerario('/')
def home ():
return render_template ('./casa.html ')

Quindi, premere + X seguito da Y E per salvare il server.Py Script di Python.

Nel codice sopra, le righe 1-5 importano tutte le librerie richieste, la riga 7 crea un'app di pallone, la riga 11 crea un oggetto Sensehat e la riga 12 disattiva tutti i LED di Sense Hat. La riga 8 disabilita la memorizzazione nella cache Web per l'app Fask. Poiché questa app è leggera, non è necessario la memorizzazione nella cache. Se si desidera modificare l'app, avere disabilitato nella cache Web renderà i test molto più facili.

Righe 18-31 Leggi i dati del sensore dal cappello di sensazione e restituisci i dati API in formato JSON su HTTP OTTIENI CHE OTTIENI NELLA RICHIESTA /API Endpoint del server web. Righe 37-39 Restituisci la home page dell'app Web meteo su / Endpoint del server web. La homepage è resa da casa.html file, che dovrebbe essere in modelli/ Directory della directory del progetto.

Le righe 14-16 vengono utilizzate per consentire l'accesso a stile.CSS E app.js file statici. Questi file dovrebbero essere in statico/ Directory della directory del progetto. IL stile.CSS Il file viene utilizzato per modellare il casa.html home page e il app.js Il file viene utilizzato per richiedere i dati API da /API endpoint e aggiornare i dati meteorologici su casa.html pagina ogni 5 secondi.

Creare il statico/ E modelli/ Directory nella directory del progetto come segue:

$ mkdir -v statico, modelli

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

$ nano modelli/casa.html

Immettere il seguente codice in casa.html file.





Raspberry Pi Weather Station
href = "url_for ('static', fileName =" stile.css ")"/>



Raspberry Pi Weather Station



Temperatura




..


..




Pressione




..


..




..


..




Umidità




..






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

Creare un stile.CSS file in statico/ directory come segue:

$ nano statico/stile.CSS

Immettere i seguenti codici in stile.CSS file.

@import url ('https: // caratteri.Googleapis.com/css2?famiglia = roboto & display = swap ');
*
imbottitura: 0;
Margine: 0;
Font-Family: 'Roboto', sans-serif;

corpo
Background: #737373;

H1
blocco di visualizzazione;
Colore: #79DC7B;
Testo-align: centro;
Font-Weight: 400;
Background: #000;
imbottitura: 0.5em 0;

H2
blocco di visualizzazione;
Background: #000;
Colore: #FFF;
Testo-align: centro;
Font-Weight: 400;
Font-size: 1EM;

.dati di dati
Margine: 10px;
Bordo: 2px Black solido;
raggio di confine: 5px;
Background-color: #79DC7B;

.DATA-ROW
display: flex;
Direzione flessibile: riga;

.Data-cell
larghezza: 100%;
Altezza: 80px;
display: flex;
ALIGE-ITMS: CENTRO;
giustificare contento: centro;
Font-weight: audace;
Font-Size: 1.5em;
Colore: #006902;

.Data-cell: Hover
Background: #ffe891;
Colore: #AA8600;
Cursore: puntatore;

Quindi, premere + X seguito da Y E per salvare il stile.CSS file.

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

$ nano statico/app.js

Immettere il seguente codice in app.js file.

finestra.addEventListener ('carico', main);
funzione main ()
funzione getApidata ()
var http = new xmlhttpRequest ();
http.onreadystatechange = function ()
se questo.ReadyState === 4 && questo.status === 200)
Aggiornamento (JSON.analizzare (questo.risposta));


http.aperto ("get", "/api", true);
http.Inviare();

Aggiornamento della funzione (apidata)
var tempc = documento.getElementById ("tempc");
var tempf = documento.getElementById ("tempf");
var pressuremb = documento.getElementById ("pressuremb");
var presspsi = documento.getElementById ("pressoni");
var pressingHpa = documento.getElementById ("presshpa");
var pressp = documento.getElementById ("pressp");
var umidità = documento.getElementById ("umidità");
tempc.InnerHtml = ParseFloat (Apidata.temperatura.C).tofixed (2) + "° C";
tempf.InnerHtml = ParseFloat (Apidata.temperatura.F).tofixed (2) + "° F";
pressuremb.InnerHtml = ParseFloat (Apidata.pressione.MB).tofixed (2) + "mb";
Presspsi.InnerHtml = ParseFloat (Apidata.pressione.psi).tofixed (2) + "psi";
presshpa.InnerHtml = ParseFloat (Apidata.pressione.HPA).tofixed (2) + "HPA";
Pressp.InnerHtml = ParseFloat (Apidata.pressione.P).tofixed (2) + "p";
umidità.InnerHtml = ParseFloat (Apidata.umidità).tofixed (2) + " %";

function app ()
finestra.setInterval (function ()
getApidata ();
, 5000);

app ();

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

Qui, la riga 1 esegue il principale() funzione Quando la pagina Web termina il caricamento. Nel principale() funzione, il getApidata () La funzione recupera i dati dell'API meteorologica utilizzando AJAX e chiama il aggiornamento() funzione (nella riga 10) una volta che i dati sono stati recuperati correttamente. IL aggiornamento() La funzione aggiorna l'elemento pagina Web utilizzando i dati API.

Nella riga 20, il documento.getElementById () Il metodo viene utilizzato per ottenere il riferimento dell'elemento pagina web con l'ID tempc. La riga 28 viene utilizzata per sostituire il contenuto dell'elemento 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) sono sostituiti con i rispettivi dati API.

Nel app () funzione, il getApidata () è chiamato ogni 5 secondi (5000 millisecondi) per mantenere aggiornati i dati meteorologici nell'app meteorologica. Finalmente, nella riga 46, il app () la funzione viene eseguita.

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

$ Flask_app = server.py blask run -host = 0.0.0.0

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

Per verificare se l'API meteorologica funziona, eseguire il seguente comando:

$ CURL -S http: // localhost: 5000/API | json_pp

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

Per testare l'app meteorologica, visitare http: // localhost: 5000 da un browser Web Chromium. L'app meteo dovrebbe essere caricata sul browser Web, ma all'inizio non è necessario visualizzare dati meteorologici.

Dopo alcuni secondi, l'app meteorologica dovrebbe finire di recuperare i dati meteorologici dall'API e visualizzarli.

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

Creazione del servizio SystemD per l'app Web meteo

In questa sezione, ti mostreremo come creare un file di servizio SystemD per l'app meteorologica in modo che inizi automaticamente all'avvio.

Innanzitutto, crea un Stazione metereologica.servizio File nella directory del progetto come segue:

$ nano stazione meteorologica.servizio

Immettere le seguenti righe di codice in Stazione metereologica.servizio file.

[Unità]
Descrizione = app Web di Raspberry Pi Metel Station utilizzando il cappello di Sense Raspberry Pi
Dopo = rete.bersaglio
[Servizio]
WorkingDirectory =/home/pi/lavoro
Environment = Flask_App = Server.Py
Ambiente = flask_env = produzione
ExecStart =/usr/bin/blask run -host = 0.0.0.0
StandardOutput = eredità
Standarderror = eredità
Riavvia = sempre
Utente = pi
[Installare]
WANTEDBY = Multi-utente.bersaglio

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

Copia il Stazione metereologica.servizio file a /etc/systemd/system/ Directory con il seguente comando:

$ sudo cp -v stazione meteorologica.Servizio/etc/systemd/system/

Ricarica i demoni Systemd per le modifiche per avere effetto come segue:

$ sudo systemctl demone-ricaricamento

IL Stazione metereologica Il servizio SystemD dovrebbe essere inattivo al momento, come mostrato nello screenshot seguente.

$ sudo systemctl stazione meteorologica.servizio

Iniziare il Stazione metereologica Servizio con il seguente comando:

$ sudo systemctl Inizia stazione meteorologica.servizio

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

$ sudo systemctl stazione meteorologica.servizio

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

$ sudo systemctl abilita stazione meteorologica.servizio

Riavvia il tuo Raspberry Pi con il seguente comando:

$ sudo riavvia

Una volta i tuoi stivali di lampone, il Stazione metereologica Il servizio dovrebbe essere in esecuzione, come mostrato nello screenshot seguente.

$ sudo systemctl stazione meteorologica.servizio

Accesso all'app meteorologica da altri dispositivi

Per accedere all'app meteorologica da altri dispositivi nella tua rete domestica, è necessario conoscere l'indirizzo IP del tuo Raspberry Pi. Puoi trovare l'indirizzo IP del tuo Raspberry Pi 4 dall'interfaccia di gestione web del router Home. 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, è possibile 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 di seguito, abbiamo accettato l'app meteo da uno smartphone Android.

Conclusione

In questo articolo, ti abbiamo mostrato come usare il cappello di Sense Raspberry Pi per costruire una stazione meteorologica Raspberry Pi. Abbiamo usato il Hat-Hat Biblioteca Python per estrarre i dati meteorologici dal cappello di Sense Raspberry Pi. Quindi, abbiamo usato il framework Web Python Python Python per creare un'API meteorologica e un'applicazione Web. L'app Web ottiene i dati meteorologici dall'API meteorologica ogni 5 secondi per mantenere aggiornata l'app Web con gli ultimi dati meteorologici.