Bygg din egen Raspberry Pi værstasjon

Bygg din egen Raspberry Pi værstasjon
Raspberry Pi Sense Hat er et tilleggsbrett som kan brukes sammen med Raspberry Pi-datamaskiner. Raspberry Pi Sense Hat har en 8 × 8 LED-skjerm og en 5-knapps joystick, og den er utstyrt med følgende sensorer:
  1. Gyroskop
  2. Akselerometer
  3. Magnetometer
  4. Temperatur
  5. Barometrisk trykk
  6. Luftfuktighet

I denne artikkelen skal jeg vise deg hvordan du oppretter en Python API -basert værstasjons webapplikasjon ved å bruke temperatur, barometrisk trykk, og luftfuktighet Sensorer av Raspberry Pi Sense Hat. For å følge med denne artikkelen, trenger du følgende:

  1. En Raspberry Pi 3 eller Raspberry Pi 4 med nettverkstilkobling.
  2. En Raspberry Pi Sense Hat -modul.
  3. En mikro-USB (Raspberry Pi 3) eller USB Type-C (Raspberry Pi 4) Power Adapter.
  4. Et 16 GB eller 32 GB MICROSD -kort med Raspberry Pi OS.
  5. En bærbar PC eller en stasjonær datamaskin for VNC Remote Desktop Access eller SSH -tilgang til Raspberry Pi.

MERK: I denne artikkelen vil vi koble til Raspberry Pi eksternt via VNC eller SSH ved å bruke det hodeløse oppsettet av Raspberry Pi. Hvis du ikke vil få tilgang til bringebærpi -en din via SSH eller VNC, må du koble til en skjerm, et tastatur og en mus til Raspberry Pi.

For å lære å blinke Raspberry Pi OS -bildet på et microSD -kort, vennligst referer hvordan du installerer og bruker Raspberry Pi Image. Hvis du trenger hjelp til å installere Raspberry Pi OS på Raspberry Pi, kan du lese hvordan du installerer Raspberry Pi OS på Raspberry Pi 4. Hvis du trenger hjelp med det hodeløse oppsettet av Raspberry Pi, kan du sjekke ut hvordan du installerer og konfigurerer Raspberry Pi OS på Raspberry Pi 4 uten ekstern skjerm.

Koble Raspberry Pi Sense Hat til Raspberry Pi

Raspberry Pi Sense Hat Kit lever.

Før du kan knytte sansehattbrettet til Raspberry Pi, må du koble 40-pinners overskriften til Sense Hat. Koble de mannlige pinnene til den 40 pinners hann-kvinnelige overskriften til sansehatten som vist på bildene nedenfor.

Raspberry Pi-datamaskiner har 4 hull som kan brukes til å feste tilleggsbrett eller en sak. For å feste tilleggskortet, sett inn skruer fra baksiden av Raspberry Pi, som vist på bildene nedenfor.

Koble deretter en avstand til skruen.

Når du har lagt til alle fire skruene og avstandsstykkene, skal Raspberry Pi se ut som det som vises på bildet nedenfor.

Koble Raspberry Pi Sense Hat til 40-pinners GPIO mannlige overskrift på Raspberry Pi, som vist på bildene nedenfor.

MERK: Vær forsiktig mens du kobler fra Raspberry Pi Sense Hat fra Raspberry Pi 40-pinners GPIO-header for å unngå å bøye pinnene til Raspberry Pi GPIO.

Med de fire gjenværende skruene, fest Raspberry Pi Sense Hat, som vist på bildene nedenfor.

Kraft på Raspberry Pi

Nå som Raspberry Pi Sense Hat er koblet til Raspberry Pi, sett inn microSD -kortet med Raspberry Pi OS i MicroSD -kortsporet til Raspberry Pi, koble strømkabelen til Raspberry Pi og slå den på.

Installere Raspberry Pi Sense Hat Python Library

For å bruke Raspberry Pi Sense Hat på Raspberry Pi, Sense-hat Python -biblioteket må installeres på Raspberry Pi OS. De Sense-hat Bibliotek er tilgjengelig i det offisielle pakkelagde av Raspberry Pi OS.

For å installere Raspberry Pi Sense-hat Python -biblioteket på Raspberry Pi OS, oppdater først APT Package Repository Cache med følgende kommando:

$ sudo apt oppdatering

Kjør deretter følgende kommando:

$ sudo apt install sense -hat -y

Installere Flask Micro Web Framework Python Library

Vi vil bruke Flask Python Framework for å lage vår værprogram. Du kan installere kolben fra det offisielle pakkelagde av Raspberry Pi OS med følgende kommando:

$ sudo apt install python3 -kolbe -y

Opprette en prosjektkatalog

Det er lurt å lage en prosjektkatalog for å organisere prosjektfilene dine. For å lage en prosjektkatalog ~/arbeid, Bruk følgende kommando:

$ mkdir ~/arbeid

Når prosjektkatalogen er opprettet, navigerer du til prosjektkatalogen som følger:

$ cd ~/arbeid

Testing av Raspberry Pi Sense Hat

For å teste om Raspberry Pi Sense Hat fungerer, kan vi skrive et enkelt test Python -skript. Du kan lage et nytt Python -skript som heter test.py med Nano Text Editor som følger:

$ nano test.py

Skriv inn følgende kode i test.py fil. Linje 1 importerer Sensehat fra Sense_hat modul, linje 3 skaper en Sensehat objekt og lagrer en referanse i føle variabel, og linjer 5-6 setter fargen på alle 8 × 8 lysdioder til rødt. Når du er ferdig, trykk + X etterfulgt av Y og .

Du kan kjøre test.py Python -skript med følgende kommando:

$ python3 -test.py

8 × 8 LED -matrisen skal gløde i rød farge som vist på bildet nedenfor.

For å slå av lysdiodene til sansehatten, kjører du klar() metode uten noen fargeverdi i test.py Python -skriptet, som vist på skjermbildet nedenfor, og kjører test.py Python -manus igjen.

Ledene til sansehatten skal nå slås av, som vist på bildet nedenfor.

Hvis sansehatten fungerer som den skal, kan du gå videre til neste avsnitt.

Få værdata fra Sense Hat

Du kan skaffe sensordata fra sansehatten veldig enkelt ved å bruke Sense-hat Python Library. For å hente sensordata fra sansehatten, kan du opprette et nytt Python -skript read_sensor_data.py følgende:

$ nano read_sensor_data.py

Skriv inn følgende kode i read_sensor_data.py Python -fil.

fra Sense_hat import sansehat
Fra tid importer søvn
Sense = Sensehat ()
føle.klar()
Mens sant:
tempc = fornuft.get_temperature ()
tempf = tempc * (9/5) + 32
trykk = fornuft.get_pressure ()
Fuktighet = fornuft.get_humidity ()
Print ("Temperatur: %.2F ° C/%.2f ° f \ n " % (tempc, tempf))
Print ("Trykk: %.2f mb \ n " % (trykk))
Print ("Fuktighet: %.2f %% \ n \ n "%(fuktighet))
søvn (5)

Når du er ferdig, trykk + X etterfulgt av Y og .

I koden over importerer linjer 1 og 2 alle nødvendige biblioteker, Line 4 oppretter en Sensehat objekt, og linje 5 slår av alle lysdiodene i sansehatten ved å bruke klar() metode. Mens sløyfe i linje 7 er en uendelig sløyfe som kjører koden i linjer 8-16 for alltid.

På linje 8, den get_temperature () Metoden brukes til å lese temperaturdataene (i grader Celsius) fra fuktighetssensoren til sansehatten. På linje 9 konverteres temperaturdataene fra grader Celsius til grader Fahrenheit. I linje 10, den get_pressure () Metoden brukes til å lese lufttrykksdataene (i Millibars) fra trykktesensoren til sansehatten. I linje 11, den get_humidity () Metoden brukes til å lese fuktighetsdataene (i %) fra fuktighetssensoren til sansehatten.

Linjer 13-15 brukes til å skrive ut sensordataene til konsollen, og linje 16 brukes til å vente i 5 sekunder før du leser sensordataene igjen.

Du kan kjøre read_sensor_data.py Python -manus som følger:

$ python3 read_sensor_data.py

Når skriptet er kjørt, vil sensordata bli skrevet ut til konsollen.

Nå som vi kan lese sensordataene fra sansehatten, trykk + C For å stoppe programmet.

Opprette en Weather Station Web App

I denne delen vil vi vise deg hvordan du bruker Python Flask Web Framework for å lage et vær -API og en værprogram. Værprogrammet får tilgang til værdata -API og viser værdataene i sanntid. All koden som er omtalt i denne delen er tilgjengelig på GitHub på Shovon8/Raspberry-Pi-Sense-Hat-Weather-App.

Først må du lage en server.py Python -skript i prosjektkatalogen som følger:

$ Nano Server.py

Skriv inn følgende kode i server.py Python -fil.

Fra kolbeimportkolbe
fra kolbeimport jsonify
fra kolbe import render_template
fra kolbeimport url_for
fra Sense_hat import sansehat
app = kolbe (__ name__)
app.config ['send_file_max_age_default'] = 0
Sense = Sensehat ()
føle.klar()
med app.test_request_context ():
url_for ('statisk', filnavn = 'stil.CSS ')
url_for ('statisk', filnavn = 'app.JS ')
@App.rute ('/api')
def api ():
tempc = fornuft.get_temperature ()
tempf = tempc * (9/5) + 32
trykk = fornuft.get_pressure ()
trykkPSI = trykk * 0.0145038
trykkp = trykk * 100
Fuktighet = fornuft.get_humidity ()
Returner jSonify (
"Temperatur": "C": tempc, "f": tempf,
"Trykk": "MB": trykk, "HPA": trykk,
"Psi": PressurePsi, "P": PressureP,
"Fuktighet": Fuktighet
)
@App.rute('/')
def home ():
Retur Render_Template ('./hjem.html ')

Trykk deretter + X etterfulgt av Y og For å redde server.py Python -manus.

I koden over, linjer 1-5 importerer alle nødvendige biblioteker, Line 7 oppretter en kolbe-app, Line 11 oppretter et Sensehat-objekt, og linje 12 slår av alle lysdioder i sansehatten. Linje 8 deaktiverer nettbufring for Flask -appen. Fordi denne appen er lett, er det ikke behov for hurtigbufring. Hvis du vil endre appen, vil det å ha netthåndverk gjøre tester mye enklere å ha nettbufring.

Linjer 18-31 Les sensordataene fra Sense Hat og returner API-dataene i JSON-format på HTTP Få forespørsel i /api endepunkt på webserveren. Linjer 37-39 Returner hjemmesiden til været på / endepunkt på webserveren. Hjemmesiden er gjengitt fra hjem.html fil, som skal være i Maler/ Katalog for prosjektkatalogen.

Linjer 14-16 brukes til å gi tilgang til stil.CSS og app.JS statiske filer. Disse filene skal være i statisk/ Katalog for prosjektkatalogen. De stil.CSS fil brukes til å style hjem.html hjemmeside, og app.JS fil brukes til å be om API -dataene fra /api endepunkt og oppdatere værdataene på hjem.html Side hvert 5. sekund.

Opprett statisk/ og Maler/ Katalog i prosjektkatalogen som følger:

$ mkdir -v statisk, maler

Lage en hjem.html fil i Maler/ Katalog som følger:

$ nano maler/hjemme.html

Skriv inn følgende kode i hjem.html fil.





Raspberry Pi værstasjon
href = "url_for ('statisk', filnavn =" stil.css ")"/>



Raspberry Pi værstasjon



Temperatur




..


..




Press




..


..




..


..




Luftfuktighet




..






Trykk deretter + X etterfulgt av Y og For å redde hjem.html fil.

Lage en stil.CSS fil i statisk/ Katalog som følger:

$ nano statisk/stil.CSS

Skriv inn følgende koder i stil.CSS fil.

@import url ('https: // skrifter.Googleapis.com/css2?familie = roboto & display = bytte ');
*
polstring: 0;
Margin: 0;
Font-Family: 'Roboto', Sans-serif;

kropp
Bakgrunn: #737373;

H1
Display: Block;
Farge: #79DC7B;
tekst-align: sentrum;
Fontvekt: 400;
Bakgrunn: #000;
Polstring: 0.5em 0;

H2
Display: Block;
Bakgrunn: #000;
Farge: #FFF;
tekst-align: sentrum;
Fontvekt: 400;
Font-størrelse: 1EM;

.Data-innhold
Margin: 10px;
Grense: 2px solid svart;
Border-Radius: 5px;
Bakgrunnsfarge: #79DC7B;

.Data-rad
Display: Flex;
Flex-regi: rad;

.Data-celle
Bredde: 100%;
Høyde: 80px;
Display: Flex;
Align-elementer: sentrum;
Justify-Content: Center;
Fontvekt: fet;
Fontstørrelse: 1.5em;
Farge: #006902;

.Data-celle: Hopp
Bakgrunn: #FFE891;
Farge: #AA8600;
Markør: peker;

Trykk deretter + X etterfulgt av Y og For å redde stil.CSS fil.

Lage en app.JS fil i statisk/ Katalog som følger:

$ nano statisk/app.JS

Skriv inn følgende kode i app.JS fil.

vindu.AddEventListener ('Last', hoved);
funksjon main ()
funksjon getapidata ()
var http = ny xmlhttpRequest ();
http.onreadyStateChange = funksjon ()
hvis dette.ReadyState === 4 && dette.status === 200)
OPPDATERING (JSON.Analyse (dette.responsext));


http.Åpne ("Get", "/API", True);
http.sende();

funksjonsoppdatering (apidata)
var tempc = dokument.getElementById ("tempc");
var tempf = dokument.getElementById ("tempf");
var PressuRemb = dokument.getElementById ("Pressuremb");
var PressurePsi = Dokument.getElementById ("PressurePsi");
var trykkhpa = dokument.getElementById ("trykkhpa");
var trykkp = dokument.getElementById ("PressureP");
var luftfuktighet = dokument.getElementById ("Fuktighet");
tempc.INNERHTML = ParseFloat (Apidata.temperatur.C).tofixed (2) + "° C";
tempf.INNERHTML = ParseFloat (Apidata.temperatur.).tofixed (2) + "° F";
Pressuremb.INNERHTML = ParseFloat (Apidata.press.MB).tofixed (2) + "MB";
trykkpsi.INNERHTML = ParseFloat (Apidata.press.psi).tofixed (2) + "psi";
Trykkhpa.INNERHTML = ParseFloat (Apidata.press.HPA).tofixed (2) + "HPA";
trykkp.INNERHTML = ParseFloat (Apidata.press.P).tofixed (2) + "p";
luftfuktighet.INNERHTML = ParseFloat (Apidata.luftfuktighet).tofixed (2) + " %";

funksjon app ()
vindu.setInterval (funksjon ()
getapidata ();
, 5000);

app ();

Trykk deretter + X etterfulgt av Y og For å redde app.JS fil.

Her kjører linje 1 hoved() funksjon når websiden er ferdig med lasting. I hoved() funksjon, getapidata () Funksjonen henter Weather API -dataene ved hjelp av Ajax og kaller Oppdater() Funksjon (i linje 10) Når dataene har blitt hentet med hell. De Oppdater() Funksjon oppdaterer websidenelementet ved hjelp av API -dataene.

I linje 20, den dokument.getElementById () Metoden brukes til å få referansen til websideelementet med IDen tempc. Linje 28 brukes til å erstatte innholdet i websideelementet som har ID tempc med temperaturen (i Celsius) fra API. På samme måte erstattes innholdet i alle nettelementer (linjer 21-26) med sine respektive API-data.

I app () funksjon, getapidata () kalles hvert 5. sekund (5000 millisekunder) for å holde værdataene oppdatert i værappen. Til slutt, i linje 46, app () funksjon utføres.

For å teste webappen, skriv inn følgende kommando:

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

Værappen skal kjøre på port 5000 (som standard).

For å teste om vær -API fungerer, kjør følgende kommando:

$ Curl -S http: // localhost: 5000/api | JSON_PP

Som du kan se, skrives Weather API -dataene på konsollen. Derfor fungerer API.

For å teste værappen, besøk http: // localhost: 5000 fra en kromnettleser. Værappen skal lastes på nettleseren, men ingen værdata skal vises med det første.

Etter noen sekunder skal værappen fullføre å hente værdataene fra API og vise den.

Når som helst kan du trykke på + C å stoppe webserveren.

Opprette SystemD -tjeneste for Weather Web App

I denne delen vil vi vise deg hvordan du oppretter en SystemD -tjenestefil for værappen slik at den automatisk starter ved oppstart.

Først må du lage en værstasjon.service fil i prosjektkatalogen din som følger:

$ Nano værstasjon.service

Skriv inn følgende kodelinjer i værstasjon.service fil.

[Enhet]
Beskrivelse = Raspberry Pi Weather Station Web App ved hjelp av Raspberry Pi Sense Hat
Etter = nettverk.mål
[Service]
WorkingDirectory =/Home/Pi/Work
Miljø = flask_app = server.py
Miljø = Flask_env = Produksjon
ExecStart =/usr/bin/kolbe Run - -vert = 0.0.0.0
StandardOutput = arve
StandardError = arve
Start på nytt = alltid
Bruker = pi
[Installere]
WantedBy = Multi-User.mål

Trykk deretter + X etterfulgt av Y og For å redde værstasjon.service fil.

Kopier værstasjon.service fil til /etc/systemd/system/ Katalog med følgende kommando:

$ sudo cp -v værstasjon.service/etc/systemd/system/

Last inn Systemd -demonene på nytt for at endringene skal tre i kraft som følger:

$ sudo SystemCTL Daemon-Reload

De værstasjon SystemD -tjenesten skal være inaktiv for øyeblikket, som vist på skjermdumpen nedenfor.

$ sudo systemctl status værstasjon.service

Start værstasjon Tjeneste med følgende kommando:

$ sudo systemctl start værstasjon.service

Som du kan se, værstasjon Tjenesten kjører nå.

$ sudo systemctl status værstasjon.service

Nå som værstasjon Tjenesten fungerer, du kan legge den til systemstart av Raspberry Pi OS med følgende kommando:

$ SUDO SystemCTL Aktiver værstasjon.service

Start Raspberry Pi på nytt med følgende kommando:

$ sudo omstart

Når Raspberry Pi -støvlene værstasjon Tjenesten skal kjøres, som vist på skjermdumpen nedenfor.

$ sudo systemctl status værstasjon.service

Få tilgang til værappen fra andre enheter

For å få tilgang til værappen fra andre enheter i hjemmenettverket ditt, må du kjenne IP -adressen til Raspberry Pi. Du kan finne IP -adressen til Raspberry Pi 4 fra webadministrasjonsgrensesnittet til hjemmeruteren din. I vårt tilfelle er IP -adressen 192.168.0.103, men denne adressen vil være annerledes for deg, så sørg for å erstatte denne adressen med din i alle påfølgende trinn.

Hvis du har tilgang til Raspberry Pi -konsollen, kan du også kjøre følgende kommando for å finne IP -adressen.

$ hostname -i

Når du kjenner IP -adressen til Raspberry Pi, kan du få tilgang til den fra hvilken som helst enhet i hjemmenettverket. Som vist på skjermbildet nedenfor, har vi fått tilgang til værappen fra en Android -smarttelefon.

Konklusjon

I denne artikkelen viste vi deg hvordan du bruker Raspberry Pi Sense Hat for å bygge en Raspberry Pi Weather Station. Vi brukte Sense-hat Python -biblioteket for å hente ut værdata fra Raspberry Pi Sense Hat. Deretter brukte vi Flask Python Micro Web Framework for å lage et vær -API og en webapplikasjon. Nettappen får værdataene fra Weather API hvert 5. sekund for å holde webappen oppdatert med de nyeste værdataene.