Bringebær Pi

Bygg din egen Raspberry Pi værstasjon

Bygg din egen Raspberry Pi værstasjon
Raspberry Pi Sense Hat er et tilleggskort som kan brukes med Raspberry Pi enkeltkortcomputere. Raspberry Pi Sense Hat har en 8 × 8 LED-skjerm og en 5-knappers 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 et Python API-basert værstasjonsprogram ved hjelp av temperatur, barometrisk trykk, og luftfuktighet sensorer av Raspberry Pi Sense Hat. For å følge med på 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 micro-USB (Raspberry Pi 3) eller USB Type-C (Raspberry Pi 4) strømadapter.
  4. Et 16 GB eller 32 GB microSD-kort med Raspberry Pi OS.
  5. En bærbar eller stasjonær datamaskin for ekstern tilgang til VNC eller SSH-tilgang til Raspberry Pi.

MERK: I denne artikkelen vil vi koble oss til Raspberry Pi eksternt via VNC eller SSH ved hjelp av hodeløst oppsett av Raspberry Pi. Hvis du ikke vil ha tilgang til Raspberry Pi eksternt via SSH eller VNC, må du koble en skjerm, et tastatur og en mus til din Raspberry Pi.

Hvis du vil lære å blinke Raspberry Pi OS-bildet på et microSD-kort, kan du se hvordan du installerer og bruker Raspberry Pi Imager. Hvis du trenger hjelp til å installere Raspberry Pi OS på Raspberry Pi, kan du lese Slik installerer du Raspberry Pi OS på Raspberry Pi 4. Hvis du trenger hjelp med hodeløst oppsett av Raspberry Pi, sjekk ut Hvordan installere og konfigurere Raspberry Pi OS på Raspberry Pi 4 uten ekstern skjerm.

Koble Raspberry Pi Sense Hat til Raspberry Pi

Raspberry Pi Sense Hat-sett leveres med Raspberry Pi Sense Hat-tilleggsbrett, en 40-pinners mann-til-hunn-topptekst og noen skruer og avstandsstykker.

Før du kan feste Sense Hat-kortet til Raspberry Pi, må du koble 40-pinners topptekst til Sense Hat. Koble hannpinnene til den 40-pinners mann-kvinneoverskriften til Sense Hat som vist på bildene nedenfor.

Raspberry Pi enkeltkortcomputere har 4 hull som kan brukes til å feste tilleggskort eller et etui. For å feste tilleggskortet, sett inn skruene fra baksiden av Raspberry Pi, som vist på bildene nedenfor.

Koble deretter et avstandsstykke til skruen.

Når du har lagt til alle fire skruene og avstandsstykkene, bør din Raspberry Pi se ut som vist på bildet nedenfor.

Koble Raspberry Pi Sense Hat til 40-pin GPIO mannlig topptekst på Raspberry Pi, som vist på bildene nedenfor.

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

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

Slår på Raspberry Pi

Nå som Raspberry Pi Sense Hat er koblet til Raspberry Pi, setter du inn microSD-kortet med Raspberry Pi OS i microSD-kortsporet på Raspberry Pi, kobler strømkabelen til Raspberry Pi og slår den på.

Installere Raspberry Pi Sense Hat Python Library

For å bruke Raspberry Pi Sense Hat på Raspberry Pi, sanselue Python-biblioteket må være installert på Raspberry Pi OS. De sanselue biblioteket er tilgjengelig i det offisielle pakkelageret til Raspberry Pi OS.

For å installere Raspberry Pi sansehatt Python-biblioteket på Raspberry Pi OS, oppdater først APT-pakkelagerbufferen med følgende kommando:

$ sudo apt oppdatering

Kjør deretter følgende kommando:

$ sudo apt installer sense-hat -y

Installere Python-biblioteket Flask Micro Web Framework

Vi vil bruke Flask Python-rammeverket til å lage vår værapplikasjon. Du kan installere Flask fra det offisielle pakkelageret til Raspberry Pi OS med følgende kommando:

$ sudo apt installere python3-kolbe -y

Opprette en prosjektkatalog

Det er lurt å lage en prosjektkatalog for å organisere prosjektfilene. Å 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 Raspberry Pi Sense Hat

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

$ nano test.py

Skriv inn følgende kode i test.py fil. Linje 1 importerer SenseHat fra sense_hat modul oppretter linje 3 en SenseHat objekt og lagrer en referanse i føle variabel, og linjene 5-6 setter fargen på alle 8 × 8 lysdioder til rødt. Når du er ferdig, trykker du på + 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 lyse i rød farge som vist på bildet nedenfor.

For å slå av lysdiodene til Sense Hat, kjør klar() metoden uten noen fargeverdi i test.py Python-skript, som vist på skjermbildet nedenfor, og kjør test.py Python-skript igjen.

Lysdiodene til Sense Hat bør nå være slått av, som vist på bildet nedenfor.

Hvis Sense Hat fungerer som den skal, går du videre til neste seksjon.

Få værdata fra Sense Hat

Du kan få sensordata fra Sense Hat veldig enkelt ved å bruke sansehatt Python-bibliotek. For å hente sensordata fra Sense Hat, kan du opprette et nytt Python-skript read_sensor_data.py som følger:

$ nano read_sensor_data.py

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

fra sense_hat importerer SenseHat
fra tid importerer søvn
sense = SenseHat ()
føle.klar()
mens det er sant:
tempC = sans.get_temperature ()
tempF = tempC * (9/5) + 32
trykk = sans.få_trykk ()
fuktighet = sans.få_fuktighet ()
utskrift ("Temperatur:%.2f ° C /%.2f ° F \ n "% (tempC, tempF))
utskrift ("Trykk:%.2f mb \ n "% (trykk))
utskrift ("Fuktighet:%.2f %% \ n \ n "% (fuktighet))
sove (5)

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

I koden ovenfor importerer linje 1 og 2 alle nødvendige biblioteker, linje 4 oppretter en SenseHat objekt, og linje 5 slår av alle lysdiodene på Sense Hat ved hjelp av klar() metode. Mens loop i linje 7 er en uendelig løkke som vil kjøre koden i linje 8-16 for alltid.

I linje 8, get_temperature () metoden brukes til å lese temperaturdataene (i grader Celsius) fra fuktighetssensoren til Sense Hat. I linje 9 blir temperaturdataene omgjort fra grader Celsius til grader Fahrenheit. I linje 10, få_trykk () metoden brukes til å lese lufttrykkdata (i millibar) fra trykksensoren til Sense Hat. I linje 11, få_fuktighet () metoden brukes til å lese fuktighetsdataene (i%) fra fuktighetssensoren til Sense Hat.

Linje 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-skript som følger:

$ python3 read_sensor_data.py

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

Nå som vi kan lese sensordataene fra Sense Hat, trykk + C for å stoppe programmet.

Opprette en Weather Station Web App

I denne delen vil vi vise deg hvordan du bruker Python Flask-nettrammeverket til å lage et vær-API og en værapplikasjon. Værprogrammet får tilgang til værdata-API-en og viser værdataene i sanntid. All koden som er diskutert i denne seksjonen er tilgjengelig på GitHub på shovon8 / bringebær-pi-sense-hatt-vær-app.

Opprett først en server.py Python-skript i prosjektkatalogen som følger:

$ nano-server.py

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

fra kolbeimport Kolbe
fra kolbeimport jsonify
fra kolbeimport render_template
fra kolbeimport url_for
fra sense_hat importerer SenseHat
app = kolbe (__ navn__)
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 = sans.get_temperature ()
tempF = tempC * (9/5) + 32
trykk = sans.få_trykk ()
trykkPsi = trykk * 0.0145038
trykkP = trykk * 100
fuktighet = sans.få_fuktighet ()
returner jsonify (
"temperatur": "C": tempC, "F": tempF,
"trykk": "mb": trykk, "hPa": trykk,
"psi": trykkPsi, "P": trykkP,
"fuktighet": fuktighet
)
@app.rute('/')
def hjem ():
returner render_template ('./hjem.html ')

Trykk deretter på + X etterfulgt av Y og for å redde server.py Python-skript.

I koden ovenfor importerer linje 1-5 alle nødvendige biblioteker, linje 7 oppretter en Flask-app, linje 11 oppretter et SenseHat-objekt, og linje 12 slår av alle lysdioder på Sense Hat. Linje 8 deaktiverer nettbufring for Flask-appen. Fordi denne appen er lett, er det ikke behov for caching. Hvis du vil endre appen, vil det være enklere å ha nettbuffering deaktivert.

Linje 18-31 leser sensordataene fra Sense Hat og returnerer API-dataene i JSON-format på HTTP GET-forespørsel i / api sluttpunktet til webserveren. Linjene 37-39 returnerer hjemmesiden for værnettappen på / sluttpunktet til webserveren. Hjemmesiden er gjengitt fra hjem.html filen, som skal være i maler / katalog av prosjektkatalogen.

Linjene 14-16 brukes til å gi tilgang til stil.css og app.js statiske filer. Disse filene skal være i statisk / katalog av prosjektkatalogen. De stil.css filen brukes til å style hjem.html hjemmesiden, og app.js filen brukes til å be om API-data fra / api endepunkt og oppdater værdataene på hjem.html siden hvert 5. sekund.

Opprett statisk / og maler / katalog i prosjektkatalogen som følger:

$ mkdir -v statisk, maler

Lage en hjem.html filen i maler / katalog som følger:

$ nano maler / hjem.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 på + X etterfulgt av Y og for å redde hjem.html fil.

Lage en stil.css filen i statisk / katalog som følger:

$ nano statisk / stil.css

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

@import url ('https: // fonter.googleapis.com / css2?familie = Roboto & display = bytte ');
*
polstring: 0;
margin: 0;
font-familie: 'Roboto', sans-serif;

kropp
bakgrunn: # 737373;

h1
skjerm: blokk;
farge: # 79DC7B;
tekstjustering: sentrum;
skriftvekt: 400;
bakgrunn: # 000;
polstring: 0.5em 0;

h2
skjerm: blokk;
bakgrunn: # 000;
farge: #fff;
tekstjustering: sentrum;
skriftvekt: 400;
skriftstørrelse: 1 em;

.datainnhold
margin: 10px;
kant: 2 px solid sort;
border-radius: 5px;
bakgrunnsfarge: # 79DC7B;

.datarad
skjerm: flex;
flex-retning: rad;

.datacelle
bredde: 100%;
høyde: 80px;
skjerm: flex;
align-items: sentrum;
rettferdiggjøre innhold: sentrum;
skriftvekt: fet;
skriftstørrelse: 1.5em;
farge: # 006902;

.datacelle: sveve
bakgrunn: # FFE891;
farge: # AA8600;
markør: peker;

Trykk deretter på + X etterfulgt av Y og for å redde stil.css fil.

Lag en app.js filen 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.analysere (dette.responsText));


http.åpen ("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 pressHpa = dokument.getElementById ("pressureHpa");
var pressP = dokument.getElementById ("pressureP");
var fuktighet = dokument.getElementById ("fuktighet");
tempC.innerHTML = parseFloat (apiData.temperatur.C).til Fast (2) + "° C";
tempF.innerHTML = parseFloat (apiData.temperatur.F).toFixed (2) + "° F";
trykkMb.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) + "%";

funksjonsapp ()
vindu.setInterval (funksjon ()
getAPIData ();
, 5000);

app ();

Trykk deretter på + X etterfulgt av Y og for å redde app.js fil.

Her kjører linje 1 hoved() funksjon når websiden er ferdig lastet. I hoved() funksjon, getAPIData () -funksjonen henter API-været for været ved hjelp av AJAX og kaller Oppdater() funksjon (i linje 10) når dataene er hentet. De Oppdater() funksjon oppdaterer nettsideelementet ved hjelp av API-data.

I linje 20, dokument.getElementById () metoden brukes til å få referansen til nettsideelementet med id tempC. Linje 28 brukes til å erstatte innholdet på nettsideelementet som har ID-en tempC med temperaturen (i Celsius) fra API. På samme måte erstattes innholdet i alle webelementer (linje 21-26) med deres respektive API-data.

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

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

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

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

For å teste om Weather API fungerer, kjør følgende kommando:

$ krøll-s http: // localhost: 5000 / api | json_pp

Som du ser, blir Weather API-data skrevet ut til konsollen. Derfor fungerer API.

For å teste Weather-appen, besøk http: // localhost: 5000 fra en Chromium-nettleser. Weather-appen skal lastes inn i nettleseren, men ingen værdata skal vises først.

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

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

Opprette Systemd Service for Weather Web App

I denne delen vil vi vise deg hvordan du oppretter en systemd-servicefil for været-appen, slik at den automatisk starter ved oppstart.

Opprett først en værstasjon.service filen 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 bruker Raspberry Pi Sense Hat
Etter = nettverk.mål
[Service]
WorkingDirectory = / hjem / pi / arbeid
Miljø = FLASK_APP = server.py
Miljø = FLASK_ENV = produksjon
ExecStart = / usr / bin / flask run --host = 0.0.0.0
Standardutgang = arve
StandardError = arve
Start på nytt = alltid
Bruker = pi
[Installere]
WantedBy = flerbruker.mål

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

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

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

Last systemdemonene 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å skjermbildet nedenfor.

$ sudo systemctl status værstasjon.service

Start værstasjon tjenesten med følgende kommando:

$ sudo systemctl start værstasjon.service

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

$ sudo systemctl status værstasjon.service

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

$ sudo systemctl aktiverer værstasjon.service

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

$ sudo omstart

Når Raspberry Pi har startet, er værstasjon tjenesten skal kjøre, som vist på skjermbildet nedenfor.

$ sudo systemctl status værstasjon.service

Få tilgang til Weather-appen fra andre enheter

For å få tilgang til værappen fra andre enheter i hjemmenettverket ditt, må du vite IP-adressen til Raspberry Pi. Du finner IP-adressen til Raspberry Pi 4 fra nettadministrasjonsgrensesnittet til hjemmeruteren. 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 kjøre følgende kommando for å finne IP-adressen også.

$ vertsnavn -I

Når du vet 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 tilgang til værappen fra en Android-smarttelefon.

Konklusjon

I denne artikkelen viste vi deg hvordan du bruker Raspberry Pi Sense Hat til å bygge en Raspberry Pi værstasjon. Vi brukte sanselue Python-bibliotek for å trekke ut værdata fra Raspberry Pi Sense Hat. Deretter brukte vi Flask Python micro web framework for å lage en weather API og en webapplikasjon. Nettappen får værinformasjonen fra været API hvert 5. sekund for å holde nettappen oppdatert med de siste værmeldingene.

Installer nyeste Dolphin Emulator for Gamecube & Wii på Linux
Dolphin Emulator lar deg spille de valgte Gamecube- og Wii-spillene dine på Linux Personal Computers (PC). Som en fritt tilgjengelig og åpen kildekod...
Hvordan bruke GameConqueror Cheat Engine i Linux
Artikkelen dekker en guide om bruk av GameConqueror-juksemotoren i Linux. Mange brukere som spiller spill på Windows bruker ofte "Cheat Engine" -appli...
Beste spillkonsollemulatorer for Linux
Denne artikkelen vil liste opp populære programvare for spillkonsollemulering tilgjengelig for Linux. Emulation er et programvarekompatibilitetslag so...