Raspberry Pi

Bygg din egen Raspberry Pi-väderstation

Bygg din egen Raspberry Pi-väderstation
Raspberry Pi Sense Hat är ett tilläggskort som kan användas med Raspberry Pi-kort. Raspberry Pi Sense Hat har en 8 × 8 LED-skärm och en 5-knapps joystick, och den är utrustad med följande sensorer:

  1. Gyroskop
  2. Accelerometer
  3. Magnetometer
  4. Temperatur
  5. Barometertryck
  6. Fuktighet

I den här artikeln ska jag visa dig hur du skapar en Python API-baserad webbapplikation för väderstationer med hjälp av temperatur, barometertryck, och fuktighet sensorer på Raspberry Pi Sense Hat. För att följa med den här artikeln behöver du följande:

  1. En Raspberry Pi 3 eller Raspberry Pi 4 med nätverksanslutning.
  2. En Raspberry Pi Sense Hat-modul.
  3. En micro-USB (Raspberry Pi 3) eller USB Type-C (Raspberry Pi 4) nätadapter.
  4. Ett 16 GB eller 32 GB microSD-kort med Raspberry Pi OS.
  5. En bärbar dator eller en stationär dator för VNC fjärrskrivbordsåtkomst eller SSH-åtkomst till Raspberry Pi.

NOTERA: I den här artikeln kommer vi att fjärransluta till Raspberry Pi via VNC eller SSH med den huvudlösa installationen av Raspberry Pi. Om du inte vill komma åt din Raspberry Pi på distans via SSH eller VNC måste du ansluta en bildskärm, ett tangentbord och en mus till din Raspberry Pi.

För att lära dig hur du flashar Raspberry Pi OS-bilden på ett microSD-kort, se hur man installerar och använder Raspberry Pi Imager. Om du behöver hjälp med att installera Raspberry Pi OS på din Raspberry Pi, läs Så här installerar du Raspberry Pi OS på Raspberry Pi 4. Om du behöver hjälp med den huvudlösa installationen av Raspberry Pi, kolla in hur man installerar och konfigurerar Raspberry Pi OS på Raspberry Pi 4 utan extern bildskärm.

Anslut Raspberry Pi Sense Hat till Raspberry Pi

Raspberry Pi Sense Hat-kit levereras med Raspberry Pi Sense Hat-tilläggsbräda, ett 40-stifts man-till-hon-sidhuvud och några skruvar och distanser.

Innan du kan ansluta Sense Hat-kortet till Raspberry Pi måste du ansluta 40-stifthuvudet till Sense Hat. Anslut manliga stift på 40-stiftet man-hon-huvudet till Sense Hat som visas på bilderna nedan.

Raspberry Pi en-kortdatorer har fyra hål som kan användas för att fästa tilläggskort eller ett fodral. För att fästa tilläggskortet, sätt i skruvarna på baksidan av Raspberry Pi, som visas på bilderna nedan.

Anslut sedan ett mellanlägg till skruven.

När du har lagt till alla fyra skruvar och distanser ska din Raspberry Pi se ut som den som visas i bilden nedan.

Anslut Raspberry Pi Sense Hat till den 40-stifts GPIO-manrubriken på Raspberry Pi, som visas på bilderna nedan.

NOTERA: Var försiktig när du kopplar bort Raspberry Pi Sense Hat från Raspberry Pi 40-stifts GPIO-huvud för att undvika att böja stiften på Raspberry Pi GPIO.

Fäst Raspberry Pi Sense Hat med de fyra återstående skruvarna, som visas på bilderna nedan.

Slår på Raspberry Pi

Nu när Raspberry Pi Sense Hat är ansluten till Raspberry Pi, sätt in microSD-kortet med Raspberry Pi OS i microSD-kortplatsen på Raspberry Pi, anslut strömkabeln till Raspberry Pi och slå på den.

Installera Raspberry Pi Sense Hat Python Library

För att använda Raspberry Pi Sense Hat på Raspberry Pi, är sense-hatt Python-biblioteket måste installeras på Raspberry Pi OS. De sense-hatt biblioteket finns tillgängligt i det officiella paketförvaret för Raspberry Pi OS.

För att installera Raspberry Pi sense-hatt Python-biblioteket på Raspberry Pi OS, uppdatera först APT-paketets förvaringscache med följande kommando:

$ sudo apt uppdatering

Kör sedan följande kommando:

$ sudo apt installera sense-hat -y

Installera Python-biblioteket Flask Micro Web Framework

Vi kommer att använda Flask Python-ramverket för att skapa vår väderapplikation. Du kan installera Flask från det officiella paketförvaret för Raspberry Pi OS med följande kommando:

$ sudo apt installera python3-kolv -y

Skapa en projektkatalog

Det är en bra idé att skapa en projektkatalog för att organisera dina projektfiler. Att skapa en projektkatalog ~ / arbete, använd följande kommando:

$ mkdir ~ / arbete

När projektkatalogen har skapats navigerar du till projektkatalogen enligt följande:

$ cd ~ / arbete

Testar Raspberry Pi Sense Hat

För att testa om Raspberry Pi Sense Hat fungerar kan vi skriva ett enkelt test Python-skript. Du kan skapa ett nytt Python-skript som heter testa.py med nano textredigerare enligt följande:

$ nano-test.py

Ange följande kod i testa.py fil. Linje 1 importerar SenseHat från sense_hat modul skapar rad 3 en SenseHat objekt och lagrar en referens i känsla variabel, och rad 5-6 ställer in färgen på alla 8 × 8 lysdioder till röd. När du är klar trycker du på + X följd av Y och .

Du kan köra testa.py Python-skript med följande kommando:

$ python3-test.py

8 × 8 LED-matrisen ska lysa i röd färg som visas i bilden nedan.

För att stänga av Sense Hat lysdioder, kör klar() metod utan färgvärde i testa.py Python-skript, som visas på skärmdumpen nedan, och kör testa.py Python-skript igen.

Sense Hat-lamporna bör nu stängas av, som visas på bilden nedan.

Om Sense Hat fungerar som det ska går du vidare till nästa avsnitt.

Få väderdata från Sense Hat

Du kan få sensordata från Sense Hat mycket enkelt med hjälp av sense-hatt Python-bibliotek. För att hämta sensordata från Sense Hat kan du skapa ett nytt Python-skript read_sensor_data.py som följer:

$ nano read_sensor_data.py

Ange följande kod i read_sensor_data.py Python-fil.

från sense_hat importerar SenseHat
från tid importera sömn
sense = SenseHat ()
känsla.klar()
medan det är sant:
tempC = känsla.get_temperature ()
tempF = tempC * (9/5) + 32
tryck = känsla.get_pressure ()
luftfuktighet = känsla.få_fuktighet ()
tryck ("Temperatur:%.2f ° C /%.2f ° F \ n "% (tempC, tempF))
tryck ("Tryck:%.2f mb \ n "% (tryck))
tryck ("Luftfuktighet:%.2f %% \ n \ n "% (fuktighet))
sova (5)

När du är klar trycker du på + X följd av Y och .

I koden ovan importerar rad 1 och 2 alla nödvändiga bibliotek, rad 4 skapar en SenseHat objekt, och rad 5 stänger av alla lysdioder i Sense Hat med klar() metod. While-slingan i rad 7 är en oändlig slinga som kör koden i rad 8-16 för alltid.

I rad 8, get_temperature () metoden används för att läsa temperaturdata (i grader Celsius) från fuktighetsgivaren i Sense Hat. I rad 9 omvandlas temperaturdata från grader Celsius till grader Fahrenheit. I rad 10, get_pressure () metoden används för att läsa av lufttrycksdata (i millibar) från trycksensorn på Sense Hat. I rad 11, få_fuktighet () metoden används för att läsa fuktighetsdata (i%) från fuktighetsgivaren i Sense Hat.

Linjer 13-15 används för att skriva ut sensordata till konsolen, och rad 16 används för att vänta i 5 sekunder innan sensordata läses igen.

Du kan köra read_sensor_data.py Python-skript enligt följande:

$ python3 read_sensor_data.py

När skriptet har körts kommer sensordata att skrivas ut på konsolen.

Nu när vi kan läsa sensordata från Sense Hat, tryck + C för att stoppa programmet.

Skapa en väderstation webbapp

I det här avsnittet visar vi dig hur du använder Python Flask webbramverk för att skapa ett väder-API och en väderapplikation. Väderapplikationen kommer åt väderdata API och visar väderdata i realtid. All kod som diskuteras i detta avsnitt finns på GitHub på shovon8 / hallon-pi-sense-hat-weather-app.

Skapa först en server.py Python-skript i projektkatalogen enligt följande:

$ nano-server.py

Ange följande kod i server.py Python-fil.

från kolvimport Kolv
från kolvimport jsonify
från kolvimport render_template
från kolvimport url_for
från sense_hat importerar SenseHat
app = kolv (__ namn__)
app.config ['SEND_FILE_MAX_AGE_DEFAULT'] = 0
sense = SenseHat ()
känsla.klar()
med app.test_request_context ():
url_for ('statisk', filnamn = 'stil.css ')
url_for ('static', filename = 'app.js ')
@app.rutt ('/ api')
def api ():
tempC = känsla.get_temperature ()
tempF = tempC * (9/5) + 32
tryck = känsla.get_pressure ()
tryckPsi = tryck * 0.0145038
tryckP = tryck * 100
luftfuktighet = känsla.få_fuktighet ()
returnera jsonify (
"temperatur": "C": tempC, "F": tempF,
"tryck": "mb": tryck, "hPa": tryck,
"psi": tryckPsi, "P": tryckP,
"fuktighet": fuktighet
)
@app.rutt('/')
def hem ():
returnera render_template ('./Hem.html ')

Tryck sedan på + X följd av Y och för att spara server.py Python-skript.

I koden ovan importerar rad 1-5 alla nödvändiga bibliotek, rad 7 skapar en Flask-app, rad 11 skapar ett SenseHat-objekt och rad 12 stänger av alla lysdioder i Sense Hat. Rad 8 inaktiverar webbcaching för Flask-appen. Eftersom den här appen är lätt behöver det inte cachas. Om du vill ändra appen blir det mycket enklare att stänga av webbcaching.

Rad 18-31 läser sensordata från Sense Hat och returnerar API-data i JSON-format på HTTP GET-begäran i / api slutpunkt för webbservern. Linjer 37-39 returnerar hemsidan för väderwebapp på / slutpunkt för webbservern. Hemsidan återges från Hem.html filen, som borde finnas i mallar / projektkatalogens katalog.

Linjerna 14-16 används för att ge åtkomst till stil.css och app.js statiska filer. Dessa filer ska finnas i statisk/ projektkatalogens katalog. De stil.css filen används för att utforma Hem.html hemsida och app.js filen används för att begära API-data från / api slutpunkt och uppdatera väderdata på Hem.html sida var 5: e sekund.

Skapa statisk/ och mallar / katalog i projektkatalogen enligt följande:

$ mkdir -v statisk, mallar

Skapa en Hem.html filen i mallar / katalog enligt följande:

$ nano-mallar / hem.html

Ange följande kod i Hem.html fil.





Raspberry Pi väderstation
href = "url_for ('statisk', filnamn =" stil.css ")" />



Raspberry Pi väderstation



Temperatur




..


..




Tryck




..


..




..


..




Fuktighet




..






Tryck sedan på + X följd av Y och för att spara Hem.html fil.

Skapa en stil.css filen i statisk/ katalog enligt följande:

$ nano statisk / stil.css

Ange följande koder i stil.css fil.

@import url ('https: // typsnitt.googleapis.com / css2?familj = Roboto & display = swap ');
*
stoppning: 0;
marginal: 0;
font-family: 'Roboto', sans-serif;

kropp
bakgrund: # 737373;

h1
display: blockera;
färg: # 79DC7B;
textjustera: centrum;
font-vikt: 400;
bakgrund: # 000;
stoppning: 0.5em 0;

h2
display: blockera;
bakgrund: # 000;
färg: #fff;
textjustera: centrum;
font-vikt: 400;
teckenstorlek: 1 em;

.datainnehåll
marginal: 10px;
kant: 2 pixlar fast svart;
gränsradie: 5 pixlar;
bakgrundsfärg: # 79DC7B;

.datarad
display: flex;
flexriktning: rad;

.datacell
bredd: 100%;
höjd: 80px;
display: flex;
align-items: center;
justify-content: center;
font-vikt: fet;
font-storlek: 1.5em;
färg: # 006902;

.datacell: sväva
bakgrund: # FFE891;
färg: # AA8600;
markör: pekare;

Tryck sedan på + X följd av Y och för att spara stil.css fil.

Skapa en app.js filen i statisk/ katalog enligt följande:

$ nano statisk / app.js

Ange följande kod i app.js fil.

fönster.addEventListener ('load', main);
funktion huvud ()
funktion getAPIData ()
var http = ny XMLHttpRequest ();
http.onreadystatechange = funktion ()
om det här.readyState === 4 && detta.status === 200)
uppdatering (JSON.analysera (detta.responseText));


http.öppen ("GET", "/ api", true);
http.skicka();

funktionsuppdatering (apiData)
var tempC = dokument.getElementById ("tempC");
var tempF = dokument.getElementById ("tempF");
var pressureMb = dokument.getElementById ("pressureMb");
var pressurePsi = dokument.getElementById ("pressurePsi");
var pressureHpa = dokument.getElementById ("pressureHpa");
var tryckP = dokument.getElementById ("pressureP");
var luftfuktighet = dokument.getElementById ("fuktighet");
tempC.innerHTML = parseFloat (apiData.temperatur.C).toFixed (2) + "° C";
tempF.innerHTML = parseFloat (apiData.temperatur.F).toFixed (2) + "° F";
tryckMb.innerHTML = parseFloat (apiData.tryck.mb).toFixed (2) + "mb";
tryckPsi.innerHTML = parseFloat (apiData.tryck.psi).toFixed (2) + "psi";
tryckHpa.innerHTML = parseFloat (apiData.tryck.hPa).toFixed (2) + "hPa";
tryckP.innerHTML = parseFloat (apiData.tryck.P).toFixed (2) + "P";
fuktighet.innerHTML = parseFloat (apiData.fuktighet).toFixed (2) + "%";

funktionsapp ()
fönster.setInterval (funktion ()
getAPIData ();
, 5000);

app();

Tryck sedan på + X följd av Y och för att spara app.js fil.

Här kör rad 1 huvud () funktion när webbsidan är laddad. I huvud () funktion, den getAPIData () -funktionen hämtar väder-API-data med AJAX och anropar uppdatering() funktion (i rad 10) när data har hämtats. De uppdatering() funktionen uppdaterar webbsidelementet med API-data.

I rad 20, dokumentera.getElementById () metoden används för att få referens för webbsidens element med id tempC. Rad 28 används för att ersätta innehållet på webbsidens element som har id tempC med temperaturen (i Celsius) från API: et. På samma sätt ersätts innehållet i alla webbelement (raderna 21-26) med deras respektive API-data.

I app() funktion, getAPIData () kallas var 5: e sekund (5000 millisekunder) för att hålla väderdata uppdaterade i väderappen. Slutligen, i rad 46, app() funktionen körs.

För att testa webbappen, ange följande kommando:

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

Väderappen ska köras på port 5000 (som standard).

För att testa om Weather API fungerar, kör du följande kommando:

$ curl -s http: // localhost: 5000 / api | json_pp

Som du kan se skrivs Weather API-data ut till konsolen. Därför fungerar API: et.

För att testa Weather-appen, besök http: // localhost: 5000 från en Chromium-webbläsare. Weather-appen ska laddas i webbläsaren, men ingen väderinformation bör visas först.

Efter några sekunder ska väderappen hämta väderdata från API: n och visa den.

När som helst kan du trycka på + C för att stoppa webbservern.

Skapa Systemd Service för Weather Web App

I det här avsnittet visar vi dig hur du skapar en systemd-servicefil för väderappen så att den automatiskt startar vid start.

Skapa först en väderstation.service filen i din projektkatalog enligt följande:

$ nano väderstation.service

Ange följande kodrader i väderstation.service fil.

[Enhet]
Beskrivning = Raspberry Pi Weather Station Web App med Raspberry Pi Sense Hat
Efter = nätverk.mål
[Service]
WorkingDirectory = / hem / pi / arbete
Miljö = FLASK_APP = server.py
Miljö = FLASK_ENV = produktion
ExecStart = / usr / bin / flask run --host = 0.0.0.0
StandardOutput = ärva
StandardError = ärva
Starta om = alltid
Användare = pi
[Installera]
WantedBy = fleranvändare.mål

Tryck sedan på + X följd av Y och för att spara väderstation.service fil.

Kopiera väderstation.service fil till / etc / systemd / system / katalog med följande kommando:

$ sudo cp -v väderstation.service / etc / systemd / system /

Ladda om systemdemonerna så att ändringarna träder i kraft enligt följande:

$ sudo systemctl daemon-reload

De väderstation systemd-tjänsten bör vara inaktiv just nu, som visas på skärmdumpen nedan.

$ sudo systemctl status väderstation.service

Starta väderstation tjänst med följande kommando:

$ sudo systemctl starta väderstation.service

Som du kan se väderstation tjänsten körs nu.

$ sudo systemctl status väderstation.service

Nu när väderstation tjänsten fungerar kan du lägga till den i systemstart av Raspberry Pi OS med följande kommando:

$ sudo systemctl aktiverar väderstation.service

Starta om din Raspberry Pi med följande kommando:

$ sudo omstart

När din Raspberry Pi startar, är väderstation tjänsten ska köras, som visas på skärmdumpen nedan.

$ sudo systemctl status väderstation.service

Åtkomst till Weather App från andra enheter

För att komma åt väderappen från andra enheter i ditt hemnätverk måste du veta IP-adressen till din Raspberry Pi. Du hittar IP-adressen till din Raspberry Pi 4 från webbhanteringsgränssnittet på din hemrouter. I vårt fall är IP-adressen 192.168.0.103, men den här adressen kommer att vara annorlunda för dig, så se till att ersätta den här adressen med din i alla efterföljande steg.

Om du har tillgång till Raspberry Pi-konsolen kan du köra följande kommando för att hitta IP-adressen också.

$ värdnamn -I

När du väl vet IP-adressen till din Raspberry Pi kan du komma åt den från vilken enhet som helst i ditt hemnätverk. Som visas på skärmdumpen nedan har vi öppnat väderappen från en Android-smartphone.

Slutsats

I den här artikeln visade vi dig hur du använder Raspberry Pi Sense Hat för att bygga en Raspberry Pi väderstation. Vi använde sense-hatt Python-bibliotek för att extrahera väderdata från Raspberry Pi Sense Hat. Sedan använde vi Flask Python micro web framework för att skapa ett väder-API och en webbapplikation. Webbappen hämtar väderdata från väder-API var femte sekund för att hålla webbappen uppdaterad med de senaste väderuppgifterna.

Hur man förbättrar FPS i Linux?
FPS står för Bildrutor per sekund. FPS: s uppgift är att mäta bildfrekvensen i videouppspelningar eller spelprestanda. Med enkla ord betecknas antalet...
De bästa Oculus App Lab-spelen
Om du är Oculus-headsetägare måste du vara förtjust i sidoladdning. Sideladdning är processen för att installera icke-butiksinnehåll på ditt headset. ...
Topp 10 spel att spela på Ubuntu
Windows-plattformen har varit en av de dominerande plattformarna för spel på grund av den enorma andelen spel som utvecklas idag för att stödja Window...