Hindbær Pi

Byg din egen Raspberry Pi Vejrstation

Byg din egen Raspberry Pi Vejrstation
Raspberry Pi Sense Hat er et add-on board, der kan bruges med Raspberry Pi single-board computere. Raspberry Pi Sense Hat har en 8 × 8 LED-skærm og et joystick med 5 knapper, og den er udstyret med følgende sensorer:

  1. Gyroskop
  2. Accelerometer
  3. Magnetometer
  4. Temperatur
  5. Barometrisk tryk
  6. Fugtighed

I denne artikel vil jeg vise dig, hvordan du opretter en Python API-baseret vejrstation-webapplikation ved hjælp af temperatur, barometertryk, og fugtighed sensorer af Raspberry Pi Sense Hat. For at følge med denne artikel skal du have følgende:

  1. En Raspberry Pi 3 eller Raspberry Pi 4 med netværksforbindelse.
  2. Et 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 computer eller en stationær computer til VNC fjernadgang til desktop eller SSH-adgang til Raspberry Pi.

BEMÆRK: I denne artikel vil vi oprette forbindelse til Raspberry Pi eksternt via VNC eller SSH ved hjælp af den hovedløse opsætning af Raspberry Pi. Hvis du ikke ønsker at få adgang til din Raspberry Pi eksternt via SSH eller VNC, skal du forbinde en skærm, et tastatur og en mus til din Raspberry Pi.

For at lære at blinke Raspberry Pi OS-billedet på et microSD-kort, se venligst Sådan installeres og bruges Raspberry Pi Imager. Hvis du har brug for hjælp til at installere Raspberry Pi OS på din Raspberry Pi, skal du læse Sådan installeres Raspberry Pi OS på Raspberry Pi 4. Hvis du har brug for hjælp til den hovedløse opsætning af Raspberry Pi, skal du tjekke Sådan installeres og konfigureres Raspberry Pi OS på Raspberry Pi 4 uden ekstern skærm.

Forbinder Raspberry Pi Sense Hat til Raspberry Pi

Raspberry Pi Sense Hat kit leveres med Raspberry Pi Sense Hat add-on board, en 40-pin mand til kvinde header og nogle skruer og afstandsstykker.

Inden du kan fastgøre Sense Hat-kortet til Raspberry Pi, skal du forbinde 40-bens header til Sense Hat. Forbind de mandlige stifter på 40-bens mand-kvind-header til Sense Hat som vist på billederne nedenfor.

Raspberry Pi single-board computere har 4 huller, der kan bruges til at fastgøre add-on boards eller en kasse. For at fastgøre tilføjelseskortet skal du indsætte skruer bag på Raspberry Pi, som vist på billederne nedenfor.

Tilslut derefter et afstandsstykke til skruen.

Når du har tilføjet alle fire skruer og afstandsstykker, skal din Raspberry Pi se ud som vist på billedet nedenfor.

Tilslut Raspberry Pi Sense Hat til den 40-pin GPIO mandlige header på Raspberry Pi, som vist på billederne nedenfor.

BEMÆRK: Vær forsigtig, mens du frakobler Raspberry Pi Sense Hat fra Raspberry Pi 40-pin GPIO-header for at undgå at bøje stifterne på Raspberry Pi GPIO.

Fastgør Raspberry Pi Sense Hat med de fire resterende skruer som vist på billederne nedenfor.

Tænd for Raspberry Pi

Nu hvor Raspberry Pi Sense Hat er sluttet til Raspberry Pi, skal du indsætte microSD-kortet med Raspberry Pi OS i microSD-kortsporet på Raspberry Pi, tilslutte strømkablet til Raspberry Pi og tænde det.

Installation af Raspberry Pi Sense Hat Python Library

For at bruge Raspberry Pi Sense Hat på Raspberry Pi, er sense-hat Python-biblioteket skal være installeret på Raspberry Pi OS. Det sense-hat biblioteket er tilgængeligt i det officielle pakkeopbevaringssted for Raspberry Pi OS.

For at installere Raspberry Pi sense-hat Python-bibliotek på Raspberry Pi OS, opdater først APT-pakkeopbevaringscachen med følgende kommando:

$ sudo apt opdatering

Kør derefter følgende kommando:

$ sudo apt installer sense-hat -y

Installation af Flyth Micro Web Framework Python Library

Vi bruger Flask Python-rammen til at oprette vores vejrapplikation. Du kan installere Flask fra den officielle pakkeopbevaring af Raspberry Pi OS med følgende kommando:

$ sudo apt installere python3-kolbe -y

Oprettelse af et projektmappe

Det er en god idé at oprette et projektmappe til at organisere dine projektfiler. For at oprette et projektmappe ~ / arbejde, Brug følgende kommando:

$ mkdir ~ / arbejde

Når projektmappen er oprettet, skal du navigere til projektmappen som følger:

$ cd ~ / arbejde

Test af Raspberry Pi Sense Hat

For at teste, om Raspberry Pi Sense Hat fungerer, kan vi skrive et simpelt test Python-script. Du kan oprette et nyt Python-script kaldet prøve.py med nano teksteditor som følger:

$ nano test.py

Indtast følgende kode i prøve.py fil. Linje 1 importeres SenseHat fra sense_hat modul opretter linje 3 en SenseHat objekt og gemmer en reference i følelse variabel, og linje 5-6 indstiller farven på alle 8 × 8 lysdioder til rød. Når du er færdig, skal du trykke på + x efterfulgt af Y og .

Du kan køre prøve.py Python-script med følgende kommando:

$ python3 test.py

8 × 8 LED-matrixen skal lyse i rød farve som vist på billedet nedenfor.

For at slukke for Sense Hat-lysdioderne skal du køre klar() metode uden farveværdi i prøve.py Python-script, som vist på skærmbilledet nedenfor, og kør prøve.py Python-script igen.

Sense Hatens lysdioder skal nu være slukket som vist på billedet nedenfor.

Hvis Sense Hat fungerer korrekt, skal du gå videre til næste afsnit.

Få vejrdata fra Sense Hat

Du kan få sensordata fra Sense Hat meget let ved hjælp af sense-hat Python-bibliotek. For at hente sensordata fra Sense Hat kan du oprette et nyt Python-script read_sensor_data.py som følger:

$ nano read_sensor_data.py

Indtast følgende kode i read_sensor_data.py Python-fil.

fra sense_hat importerer SenseHat
fra tidspunktet import søvn
sense = SenseHat ()
følelse.klar()
mens det er sandt:
tempC = følelse.get_temperature ()
tempF = tempC * (9/5) + 32
tryk = sans.get_pressure ()
fugtighed = følelse.få_fugtighed ()
print ("Temperatur:%.2f ° C /%.2f ° F \ n "% (tempC, tempF))
print ("Tryk:%.2f mb \ n "% (tryk))
print ("Fugtighed:%.2f %% \ n \ n "% (fugtighed))
sove (5)

Når du er færdig, skal du trykke på + x efterfulgt af Y og .

I koden ovenfor importerer linje 1 og 2 alle de krævede biblioteker, linje 4 opretter en SenseHat objekt, og linje 5 slukker alle lysdioderne på Sense Hat ved hjælp af klar() metode. Mens loop i linje 7 er en uendelig løkke, der kører koden i linier 8-16 for evigt.

I linje 8 er get_temperature () metoden bruges til at læse temperaturdata (i grader Celsius) fra fugtighedssensoren på Sense Hat. I linje 9 konverteres temperaturdataene fra grader Celsius til grader Fahrenheit. I linje 10 viser get_pressure () metoden bruges til at læse lufttrykdataene (i millibarer) fra tryksensoren på Sense Hat. I linje 11 er få_fugtighed () metoden bruges til at læse fugtighedsdataene (i%) fra fugtighedssensoren på Sense Hat.

Linie 13-15 bruges til at udskrive sensordataene til konsollen, og linje 16 bruges til at vente i 5 sekunder, før sensordataene læses igen.

Du kan køre read_sensor_data.py Python-script som følger:

$ python3 read_sensor_data.py

Når scriptet er kørt, udskrives sensordata til konsollen.

Nu hvor vi kan læse sensordataene fra Sense Hat, skal du trykke på + C for at stoppe programmet.

Oprettelse af en webstation til Weather Station

I dette afsnit viser vi dig, hvordan du bruger Python Flask-webrammen til at oprette en vejr-API og en vejrapplikation. Vejrprogrammet får adgang til vejrdata-API'en og viser vejrdataene i realtid. Al den kode, der diskuteres i dette afsnit, er tilgængelig på GitHub på shovon8 / raspberry-pi-sense-hat-weather-app.

Opret først en server.py Python-script i projektmappen som følger:

$ nano-server.py

Indtast 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ølelse.klar()
med app.test_forespørgsel_kontekst ():
url_for ('statisk', filnavn = 'stil.css ')
url_for ('statisk', filnavn = 'app.js ')
@app.rute ('/ api')
def api ():
tempC = følelse.get_temperature ()
tempF = tempC * (9/5) + 32
tryk = sans.get_pressure ()
trykPsi = tryk * 0.0145038
trykP = tryk * 100
fugtighed = følelse.få_fugtighed ()
returner jsonify (
"temperatur": "C": tempC, "F": tempF,
"tryk": "mb": tryk, "hPa": tryk,
"psi": trykPsi, "P": trykP,
"fugtighed": fugtighed
)
@app.rute('/')
def hjem ():
returner render_template ('./hjem.html ')

Tryk derefter på + x efterfulgt af Y og for at redde server.py Python-script.

I koden ovenfor importerer linje 1-5 alle de krævede biblioteker, linje 7 opretter en Flask-app, linje 11 opretter et SenseHat-objekt, og linje 12 slukker alle lysdioder i Sense Hat. Linje 8 deaktiverer webcaching for Flask-appen. Da denne app er let, er der ikke behov for caching. Hvis du vil ændre appen, bliver det meget lettere at have webcaching deaktiveret.

Linjer 18-31 læser sensordataene fra Sense Hat og returnerer API-data i JSON-format på HTTP GET-anmodning i / api slutpunkt for webserveren. Linjer 37-39 returnerer hjemmesiden til vejrwebapp på / slutpunkt for webserveren. Hjemmesiden gengives fra hjem.html fil, som skal være i skabeloner / projektmappe.

Linjer 14-16 bruges til at give adgang til stil.css og app.js statiske filer. Disse filer skal være i statisk / projektmappe. Det stil.css filen bruges til at style hjem.html hjemmeside og app.js -fil bruges til at anmode om API-data fra / api slutpunkt og opdatere vejrdataene på hjem.html side hvert 5. sekund.

Opret statisk / og skabeloner / katalog i projektmappen som følger:

$ mkdir -v statisk, skabeloner

Lave en hjem.html fil i skabeloner / katalog som følger:

$ nano-skabeloner / hjem.html

Indtast følgende kode i hjem.html fil.





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



Raspberry Pi Vejrstation



Temperatur




..


..




Tryk




..


..




..


..




Fugtighed




..






Tryk derefter på + x efterfulgt af Y og for at redde hjem.html fil.

Lave en stil.css fil i statisk / katalog som følger:

$ nano statisk / stil.css

Indtast følgende koder i stil.css fil.

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

krop
baggrund: # 737373;

h1
display: blok;
farve: # 79DC7B;
tekstjustering: center;
fontvægt: 400;
baggrund: # 000;
polstring: 0.5em 0;

h2
display: blok;
baggrund: # 000;
farve: #fff;
tekstjustering: center;
fontvægt: 400;
skriftstørrelse: 1 em;

.dataindhold
margen: 10 px;
kant: 2 px solid sort;
border-radius: 5px;
baggrundsfarve: # 79DC7B;

.datarække
display: flex;
flex-retning: række;

.datacelle
bredde: 100%;
højde: 80px;
display: flex;
align-items: center;
retfærdiggør-indhold: center;
font-vægt: fed;
skriftstørrelse: 1.5em;
farve: # 006902;

.datacelle: svæver
baggrund: # FFE891;
farve: # AA8600;
markør: markør;

Tryk derefter på + x efterfulgt af Y og for at redde stil.css fil.

Opret en app.js fil i statisk / katalog som følger:

$ nano statisk / app.js

Indtast følgende kode i app.js fil.

vindue.addEventListener ('load', main);
funktion main ()
funktion getAPIData ()
var http = ny XMLHttpRequest ();
http.onreadystatechange = funktion ()
hvis (dette.readyState === 4 && dette.status === 200)
opdatering (JSON.parse (dette.responsText));


http.åben ("FÅ", "/ api", sand);
http.sende();

funktionsopdatering (apiData)
var tempC = dokument.getElementById ("tempC");
var tempF = dokument.getElementById ("tempF");
var pressureMb = dokument.getElementById ("pressureMb");
var pressurePsi = dokument.getElementById ("trykPsi");
var pressureHpa = dokument.getElementById ("pressureHpa");
var trykP = dokument.getElementById ("trykP");
var fugtighed = dokument.getElementById ("fugtighed");
tempC.innerHTML = parseFloat (apiData.temperatur.C).til fast (2) + "° C";
tempF.innerHTML = parseFloat (apiData.temperatur.F).til fast (2) + "° F";
trykMb.innerHTML = parseFloat (apiData.tryk.mb).toFixed (2) + "mb";
trykPsi.innerHTML = parseFloat (apiData.tryk.psi).toFixed (2) + "psi";
trykHpa.innerHTML = parseFloat (apiData.tryk.hPa).toFixed (2) + "hPa";
trykP.innerHTML = parseFloat (apiData.tryk.P).toFixed (2) + "P";
fugtighed.innerHTML = parseFloat (apiData.fugtighed).til Fast (2) + "%";

funktionsapp ()
vindue.setInterval (funktion ()
getAPIData ();
, 5000);

app ();

Tryk derefter på + x efterfulgt af Y og for at redde app.js fil.

Her kører linje 1 hoved () funktion, når websiden er færdig med indlæsning. I hoved () funktion, den getAPIData () -funktion henter vejr-API-data ved hjælp af AJAX og kalder opdater () funktion (i linje 10), når dataene er hentet. Det opdater () funktion opdaterer websideelementet ved hjælp af API-data.

I linje 20 viser dokument.getElementById () metoden bruges til at få henvisningen til websideelementet med id'et tempC. Linie 28 bruges til at erstatte indholdet af det websideelement, der har id'et tempC med temperaturen (i Celsius) fra API'en. På samme måde erstattes indholdet af alle webelementer (linje 21-26) med deres respektive API-data.

I app () funktion, den getAPIData () kaldes hvert 5. sekund (5000 millisekunder) for at holde vejrdataene opdaterede i vejrappen. Endelig i linje 46, app () funktion udføres.

For at teste webappen skal du indtaste følgende kommando:

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

Vejrappen skal køre i port 5000 (som standard).

For at teste, om Weather API fungerer, skal du køre følgende kommando:

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

Som du kan se, udskrives Weather API-data til konsollen. Derfor fungerer API'en.

For at teste Weather-appen skal du besøge http: // localhost: 5000 fra en Chromium-webbrowser. Weather-appen skal indlæses i webbrowseren, men ingen vejrdata skal vises i starten.

Efter et par sekunder skal vejrappen færdig med at hente vejrdataene fra API'en og vise dem.

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

Oprettelse af Systemd Service til Weather Web App

I dette afsnit viser vi dig, hvordan du opretter en systemd-servicefil til vejr-appen, så den automatisk starter ved opstart.

Opret først en vejrstation.service fil i din projektmappe som følger:

$ nano vejrstation.service

Indtast følgende linier med kode i vejrstation.service fil.

[Enhed]
Beskrivelse = Raspberry Pi Weather Station Web App ved hjælp af Raspberry Pi Sense Hat
Efter = netværk.mål
[Service]
WorkingDirectory = / hjem / pi / arbejde
Miljø = FLASK_APP = server.py
Miljø = FLASK_ENV = produktion
ExecStart = / usr / bin / flask run --host = 0.0.0.0
StandardOutput = arve
StandardError = arve
Genstart = altid
Bruger = pi
[Installere]
WantedBy = flerbruger.mål

Tryk derefter på + x efterfulgt af Y og for at redde vejrstation.service fil.

Kopier vejrstation.service fil til / etc / systemd / system / bibliotek med følgende kommando:

$ sudo cp -v vejrstation.service / etc / systemd / system /

Genindlæs systemdæmonerne, så ændringerne træder i kraft som følger:

$ sudo systemctl dæmon-genindlæsning

Det vejrstation systemd-tjenesten skal være inaktiv i øjeblikket, som vist på skærmbilledet nedenfor.

$ sudo systemctl status vejrstation.service

Start vejrstation service med følgende kommando:

$ sudo systemctl start vejrstation.service

Som du kan se, er vejrstation tjenesten kører nu.

$ sudo systemctl status vejrstation.service

Nu hvor vejrstation tjenesten fungerer, kan du tilføje den til systemstart af Raspberry Pi OS med følgende kommando:

$ sudo systemctl aktiver vejrstation.service

Genstart din Raspberry Pi med følgende kommando:

$ sudo genstart

Når din Raspberry Pi er startet, er vejrstation tjenesten skal køre som vist på skærmbilledet nedenfor.

$ sudo systemctl status vejrstation.service

Adgang til Weather App fra andre enheder

For at få adgang til vejrappen fra andre enheder i dit hjemmenetværk skal du kende IP-adressen på din Raspberry Pi. Du kan finde IP-adressen på din Raspberry Pi 4 fra webadministrationsgrænsefladen på din hjemmerouter. I vores tilfælde er IP-adressen 192.168.0.103, men denne adresse vil være anderledes for dig, så sørg for at erstatte denne adresse med din i alle efterfølgende trin.

Hvis du har adgang til Raspberry Pi-konsollen, kan du også køre følgende kommando for at finde IP-adressen.

$ værtsnavn -I

Når du kender IP-adressen på din Raspberry Pi, kan du få adgang til den fra enhver enhed i dit hjemmenetværk. Som vist i skærmbilledet nedenfor har vi adgang til vejrappen fra en Android-smartphone.

Konklusion

I denne artikel viste vi dig, hvordan du bruger Raspberry Pi Sense Hat til at bygge en Raspberry Pi vejrstation. Vi brugte sense-hat Python-bibliotek for at udtrække vejrdata fra Raspberry Pi Sense Hat. Derefter brugte vi Flask Python micro web framework til at oprette en vejr-API og en webapplikation. Webappen henter vejrdataene fra vejr-API'et hvert 5. sekund for at holde webappen opdateret med de nyeste vejrdata.

Mus Sådan ændres musemarkør og markørstørrelse, farve og skema på Windows 10
Sådan ændres musemarkør og markørstørrelse, farve og skema på Windows 10
Musemarkøren og markøren i Windows 10 er meget vigtige aspekter af operativsystemet. Dette kan også siges om andre operativsystemer, så i sandhed er d...
Gratis og open source-spilmotorer til udvikling af Linux-spil
Denne artikel dækker en liste over gratis og open source-spilmotorer, der kan bruges til at udvikle 2D- og 3D-spil på Linux. Der er mange sådanne spil...
Shadow of the Tomb Raider til Linux-vejledning
Shadow of the Tomb Raider er den tolvte tilføjelse til Tomb Raider-serien - en action-adventure-spilfranchise oprettet af Eidos Montreal. Spillet blev...