Raspberry Pi

Izgradite vlastitu meteorološku stanicu Raspberry Pi

Izgradite vlastitu meteorološku stanicu Raspberry Pi
Raspberry Pi Sense Hat je dodatna ploča koja se može koristiti s Raspberry Pi računarima s jednom pločom. Šešir Raspberry Pi Sense ima 8 × 8 LED zaslon i navigacijsku tipku s 5 tipki, a isporučuje se sa sljedećim senzorima:

  1. Žiroskop
  2. Brzinomjer
  3. Magnetometar
  4. Temperatura
  5. Tlak zraka
  6. Vlažnost

U ovom članku pokazat ću vam kako stvoriti web aplikaciju koja temelji se na Python API-ju pomoću temperatura, tlak zraka, i vlažnost senzori Raspberry Pi Sense Hat-a. Da biste slijedili ovaj članak, trebat će vam sljedeće:

  1. Raspberry Pi 3 ili Raspberry Pi 4 s mrežnom povezanošću.
  2. Modul Raspberry Pi Sense Hat.
  3. Mikro-USB (Raspberry Pi 3) ili USB Type-C (Raspberry Pi 4) adapter za napajanje.
  4. MicroSD kartica od 16 GB ili 32 GB s OS Raspberry Pi.
  5. Prijenosno ili stolno računalo za VNC pristup udaljenoj radnoj površini ili SSH pristup Raspberry Pi-u.

BILJEŠKA: U ovom ćemo se članku daljinski povezati s Raspberry Pi putem VNC-a ili SSH-a pomoću bezglavog postavljanja Raspberry Pi-a. Ako ne želite daljinski pristupiti Raspberry Pi-u putem SSH-a ili VNC-a, morat ćete spojiti monitor, tipkovnicu i miša na svoj Raspberry Pi.

Da biste naučili kako bljesnuti sliku OS Raspberry Pi na microSD karticu, pogledajte Kako instalirati i koristiti Raspberry Pi Imager. Ako trebate pomoć pri instaliranju Raspberry Pi OS-a na vaš Raspberry Pi, pročitajte Kako instalirati Raspberry Pi OS na Raspberry Pi 4. Ako trebate pomoć oko bezglavog postavljanja Raspberry Pi, pogledajte Kako instalirati i konfigurirati OS Raspberry Pi na Raspberry Pi 4 bez vanjskog monitora.

Povezivanje šešira Raspberry Pi Sense Hat s Raspberry Pi

Komplet šešira Raspberry Pi dolazi s pločom za dodatak Raspberry Pi Sense Hat, zaglavljem muško-žensko s 40 pina i nekim vijcima i odstojnicima.

Prije nego što možete pričvrstiti ploču Sense Hat na Raspberry Pi, morate spojiti 40-pinsko zaglavlje na Sense Hat. Spojite muške iglice 40-pinskog zaglavlja muško-žensko na Sense Hat kako je prikazano na slikama dolje.

Računala s jednom pločom Raspberry Pi imaju 4 rupe koje se mogu koristiti za pričvršćivanje dodatnih ploča ili kućišta. Da biste pričvrstili dodatnu ploču, umetnite vijke sa stražnje strane Raspberry Pi, kao što je prikazano na slikama u nastavku.

Zatim spojite odstojnik na vijak.

Jednom kada dodate sva četiri vijka i odstojnike, vaš Raspberry Pi trebao bi izgledati poput prikazanog na donjoj slici.

Spojite Raspberry Pi Sense Hat na 40-pinsko GPIO muško zaglavlje Raspberry Pi, kao što je prikazano na slikama ispod.

BILJEŠKA: Budite oprezni dok odspajate kapu Raspberry Pi Sense Hat od zaglavlja Raspberry Pi 40-pinskog GPIO-a kako biste izbjegli savijanje iglica Raspberry Pi GPIO.

Pomoću četiri preostala vijka pričvrstite Raspberry Pi Sense Hat, kao što je prikazano na slikama dolje.

Uključivanje Raspberry Pi-a

Sada kada je Raspberry Pi Sense Hat povezan s Raspberry Pi, umetnite microSD karticu s OS Raspberry Pi u utor za microSD karticu Raspberry Pi, spojite kabel za napajanje na Raspberry Pi i uključite ga.

Instaliranje Raspberry Pi Sense Hat Python knjižnice

Da biste koristili Raspberry Pi Sense Hat na Raspberry Pi, osjetilni šešir Python knjižnica mora biti instalirana na OS Raspberry Pi. The osjetilni šešir Biblioteka je dostupna u službenom spremištu paketa OS Raspberry Pi.

Da biste instalirali Raspberry Pi osjetilni šešir Python biblioteka na OS Raspberry Pi, prvo ažurirajte predmemoriju spremišta APT paketa sljedećom naredbom:

$ sudo apt ažuriranje

Zatim pokrenite sljedeću naredbu:

$ sudo apt instalirati sense-hat -y

Instaliranje Python knjižnice Flask Micro Web Framework

Upotrijebit ćemo okvir Flask Python za izradu naše vremenske aplikacije. Flask možete instalirati iz službenog spremišta paketa OS Raspberry Pi pomoću sljedeće naredbe:

$ sudo apt instalirati python3-flask -y

Izrada direktorija projekata

Dobra je ideja stvoriti direktorij projekta za organiziranje datoteka projekta. Za stvaranje direktorija projekta ~ / raditi, upotrijebite sljedeću naredbu:

$ mkdir ~ / rad

Kada se kreira direktorij projekta, dođite do direktorija projekta na sljedeći način:

$ cd ~ / posao

Testiranje šešira Raspberry Pi

Da bismo testirali radi li Raspberry Pi Sense Hat, možemo napisati jednostavnu testnu Python skriptu. Možete stvoriti novu Python skriptu pod nazivom test.py s nano uređivač teksta kako slijedi:

$ nano test.py

Unesite sljedeći kod u test.py datoteka. Redak 1 uvoz SenseHat od smisao_hat modul, redak 3 stvara a SenseHat objekt i pohranjuje referencu u osjećaj varijabilna, a linije 5-6 postavljaju boju svih 8 × 8 LED na crvenu. Kada završite, pritisnite + x nakon čega slijedi Y i .

Možete pokrenuti test.py Python skripta sa sljedećom naredbom:

$ python3 test.py

8 × 8 LED matrica trebala bi svijetliti crvenom bojom kao što je prikazano na donjoj slici.

Da biste isključili LED diode Sense Hat, pokrenite čisto() metoda bez ikakve vrijednosti boje u test.py Python skriptu, kao što je prikazano na snimci zaslona u nastavku, i pokrenite test.py Ponovo Python skripta.

LED diode Sense Hat-a sada bi trebale biti isključene, kao što je prikazano na donjoj slici.

Ako Sense Hat radi ispravno, prijeđite na sljedeći odjeljak.

Dobivanje vremenskih podataka iz Sense Hat-a

Podatke senzora iz Sense Hat-a možete vrlo lako dobiti pomoću osjetilni šešir Python knjižnica. Da biste dohvatili podatke senzora iz Sense Hat-a, možete stvoriti novu Python skriptu read_sensor_data.py kako slijedi:

$ nano read_sensor_data.py

Unesite sljedeći kod u read_sensor_data.py Python datoteka.

iz sense_hat uvozi SenseHat
od vremena uvoz san
sense = SenseHat ()
osjećaj.čisto()
dok je Istina:
tempC = osjećaj.get_temperature ()
tempF = tempC * (9/5) + 32
pritisak = osjećaj.get_pressure ()
vlaga = osjet.get_humidity ()
print ("Temperatura:%.2 ° C /%.2f ° F \ n "% (tempC, tempF))
print ("Tlak:%.2f mb \ n "% (tlak))
print ("Vlažnost:%.2f %% \ n \ n "% (vlaga))
spavanje (5)

Kada završite, pritisnite + x nakon čega slijedi Y i .

U kodu iznad, retci 1 i 2 uvoze sve potrebne knjižnice, redak 4 stvara a SenseHat objekt, a linija 5 isključuje sve LED diode Sense Hat-a pomoću čisto() metoda. Petlja while u retku 7 beskonačna je petlja koja će zauvijek pokretati kod u redovima 8-16.

U retku 8, get_temperature () metoda koristi se za očitavanje podataka o temperaturi (u stupnjevima Celzijusa) sa senzora vlažnosti Sense Hat-a. U retku 9, podaci o temperaturi pretvaraju se iz stupnjeva Celzijevih u stupnjeve Fahrenheita. U retku 10, get_pressure () metoda koristi se za očitavanje podataka o tlaku zraka (u milibarima) sa senzora tlaka na Sense Hat. U retku 11, get_humidity () metoda se koristi za očitavanje podataka o vlažnosti (u%) sa senzora vlažnosti na Sense Hat.

Redovi 13-15 koriste se za ispis podataka senzora na konzolu, a redak 16 za čekanje 5 sekundi prije ponovnog čitanja podataka senzora.

Možete pokrenuti read_sensor_data.py Python skripta kako slijedi:

$ python3 read_sensor_data.py

Nakon pokretanja skripte, podaci senzora ispisat će se na konzolu.

Sada kada možemo pročitati podatke senzora iz Sense Hat-a, pritisnite + C zaustaviti program.

Izrada web aplikacije Meteorološke stanice

U ovom ćemo odjeljku pokazati kako koristiti web okvir Python Flask za stvaranje vremenskog API-ja i vremenske aplikacije. Aplikacija za vrijeme pristupit će API-ju za vremenske podatke i prikazati vremenske podatke u stvarnom vremenu. Sav kôd o kojem se govori u ovom odjeljku dostupan je na GitHubu na shovon8 / raspberry-pi-sense-hat-weather-app.

Prvo stvorite a poslužitelju.py Python skripta u direktoriju projekta kako slijedi:

$ nano poslužitelj.py

Unesite sljedeći kod u poslužitelju.py Python datoteka.

iz tikvice uvoz Tikvica
iz tikvice import jsonify
iz uvoza tikvice render_template
iz uvoza tikvice url_for
iz sense_hat uvozi SenseHat
app = tikvica (__ ime__)
app.config ['SEND_FILE_MAX_AGE_DEFAULT'] = 0
osjećaj = SenseHat ()
osjećaj.čisto()
s aplikacijom.test_request_context ():
url_for ('statični', naziv datoteke = 'stil.css ')
url_for ('statički', naziv datoteke = 'app.js ')
@app.ruta ('/ api')
def api ():
tempC = osjećaj.get_temperature ()
tempF = tempC * (9/5) + 32
pritisak = osjećaj.get_pressure ()
tlakPsi = tlak * 0.0145038
tlakP = tlak * 100
vlaga = osjet.get_humidity ()
vrati jsonify (
"temperatura": "C": tempC, "F": tempF,
"tlak": "mb": tlak, "hPa": tlak,
"psi": tlakPsi, "P": tlakP,
"vlaga": vlaga
)
@app.ruta ('/')
def home ():
vrati render_template ('./Dom.html ')

Zatim pritisnite + x nakon čega slijedi Y i spasiti poslužitelju.py Python skripta.

U gornjem kodu, retci 1-5 uvoze sve potrebne knjižnice, redak 7 stvara aplikaciju Flask, redak 11 stvara objekt SenseHat, a red 12 isključuje sve LED diode Sense Hat-a. Redak 8 onemogućuje predmemoriranje weba za aplikaciju Flask. Budući da je ova aplikacija lagana, nema potrebe za predmemoriranjem. Ako želite izmijeniti aplikaciju, onemogućivanje web predmemoriranja znatno će olakšati testiranje.

Linije 18-31 očitavaju podatke senzora iz Sense Hat-a i vraćaju API podatke u JSON formatu na HTTP GET zahtjev u / api krajnja točka web poslužitelja. Linije 37-39 vraćaju početnu stranicu web aplikacije za vremenske prilike na / krajnja točka web poslužitelja. Početna stranica prikazuje se iz Dom.html datoteka, koja bi trebala biti u predlošci / direktorij direktorija projekta.

Linije 14-16 koriste se za omogućavanje pristupa stil.css i app.js statičke datoteke. Te bi datoteke trebale biti u statički/ direktorij direktorija projekta. The stil.css datoteka koristi se za oblikovanje datoteke Dom.html početnu stranicu i app.js datoteka koristi se za traženje API podataka od / api krajnju točku i ažurirajte vremenske podatke na Dom.html stranicu svakih 5 sekundi.

Stvorite statički/ i predlošci / direktorij u direktoriju projekta kako slijedi:

$ mkdir -v static, predlošci

Stvoriti Dom.html datoteku u predlošci / direktorij kako slijedi:

$ nano predlošci / home.html

Unesite sljedeći kod u Dom.html datoteka.





Meteorološka stanica Raspberry Pi
href = "url_for ('static', filename =" style.css ")" />



Meteorološka stanica Raspberry Pi



Temperatura




..


..




Pritisak




..


..




..


..




Vlažnost




..






Zatim pritisnite + x nakon čega slijedi Y i spasiti Dom.html datoteka.

Stvoriti stil.css datoteku u statički/ direktorij kako slijedi:

$ nano statički / stil.css

Unesite sljedeće kodove u stil.css datoteka.

@import url ('https: // fontovi.googleapis.com / css2?obitelj = Roboto & display = swap ');
*
popunjavanje: 0;
marža: 0;
obitelj fontova: 'Roboto', sans-serif;

tijelo
pozadina: # 737373;

h1
prikaz: blok;
boja: # 79DC7B;
poravnanje teksta: središte;
težina fonta: 400;
pozadina: # 000;
popunjavanje: 0.5em 0;

h2
prikaz: blok;
pozadina: # 000;
boja: #fff;
poravnanje teksta: središte;
težina fonta: 400;
veličina slova: 1em;

.data-content
marža: 10 piksela;
obrub: 2px jednobojno crno;
radijus obruba: 5 piksela;
boja pozadine: # 79DC7B;

.data-row
zaslon: flex;
flex-smjer: red;

.data-cell
širina: 100%;
visina: 80px;
zaslon: flex;
align-items: sredina;
justify-content: centar;
font-weight: podebljano;
veličina slova: 1.5em;
boja: # 006902;

.data-cell: hover
pozadina: # FFE891;
boja: # AA8600;
kursor: pokazivač;

Zatim pritisnite + x nakon čega slijedi Y i spasiti stil.css datoteka.

Izradite app.js datoteku u statički/ direktorij kako slijedi:

$ nano static / app.js

Unesite sljedeći kod u app.js datoteka.

prozor.addEventListener ('učitavanje', glavno);
funkcija main ()
funkcija getAPIData ()
var http = novi XMLHttpRequest ();
http.onreadystatechange = function ()
ako ovo.readyState === 4 && ovo.status === 200)
ažuriranje (JSON.raščlaniti (ovo.responseText));


http.otvoreno ("GET", "/ api", true);
http.poslati();

ažuriranje funkcije (apiData)
var tempC = dokument.getElementById ("tempC");
var tempF = dokument.getElementById ("tempF");
var pressureMb = dokument.getElementById ("pressureMb");
var pressurePsi = dokument.getElementById ("pressurePsi");
var pritisakHpa = dokument.getElementById ("pritisakHpa");
var tlakP = dokument.getElementById ("pritisakP");
var vlažnost = dokument.getElementById ("vlaga");
tempC.unutarnjiHTML = parseFloat (apiData.temperatura.C).fiksno (2) + "° C";
tempF.unutarnjiHTML = parseFloat (apiData.temperatura.F).fiksno (2) + "° F";
tlakMb.unutarnjiHTML = parseFloat (apiData.pritisak.mb).fiksirano (2) + "mb";
pritisakPsi.unutarnjiHTML = parseFloat (apiData.pritisak.psi).fiksirano (2) + "psi";
pritisakHpa.unutarnjiHTML = parseFloat (apiData.pritisak.hPa).fiksno (2) + "hPa";
pritisakP.unutarnjiHTML = parseFloat (apiData.pritisak.P).fiksirano (2) + "P";
vlažnost.unutarnjiHTML = parseFloat (apiData.vlažnost).u Fiksno (2) + "%";

funkcija app ()
prozor.setInterval (function ()
getAPIData ();
, 5000);

app ();

Zatim pritisnite + x nakon čega slijedi Y i spasiti app.js datoteka.

Ovdje linija 1 pokreće glavni() funkcija kada se web stranica završi s učitavanjem. U glavni() funkcija, getAPIData () funkcija dohvaća podatke API-ja vremena pomoću AJAX-a i poziva ažuriranje() funkcija (u retku 10) nakon što podaci budu uspješno dohvaćeni. The ažuriranje() funkcija ažurira element web stranice pomoću API podataka.

U retku 20, dokument.getElementById () metoda koristi se za dobivanje reference elementa web stranice s id-om tempC. Redak 28 koristi se za zamjenu sadržaja elementa web stranice koji ima id tempC s temperaturom (u Celzijusima) iz API-ja. Na isti način, sadržaj svih web elemenata (retci 21-26) zamjenjuje se njihovim odgovarajućim API podacima.

U aplikacija () funkcija, getAPIData () poziva se svakih 5 sekundi (5000 milisekundi) kako bi se podaci o vremenu ažurirali u aplikaciji za vrijeme. Napokon, u retku 46, aplikacija () funkcija se izvršava.

Da biste testirali web aplikaciju, unesite sljedeću naredbu:

$ FLASK_APP = poslužitelj.py tikvica pokrenut --host = 0.0.0.0

Vremenska aplikacija trebala bi se izvoditi na portu 5000 (prema zadanim postavkama).

Da biste testirali radi li Weather API, pokrenite sljedeću naredbu:

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

Kao što vidite, podaci API-ja za vrijeme ispisuju se na konzoli. Stoga API radi.

Da biste testirali aplikaciju Weather, posjetite http: // localhost: 5000 iz web preglednika Chromium. Aplikacija Weather trebala bi se učitati u web preglednik, ali isprva ne bi trebali biti prikazani vremenski podaci.

Nakon nekoliko sekundi, vremenska aplikacija trebala bi dovršiti dohvaćanje vremenskih podataka iz API-ja i prikazati ih.

U bilo kojem trenutku možete pritisnuti + C zaustaviti web poslužitelj.

Stvaranje Systemd usluge za Weather Web aplikaciju

U ovom ćemo vam odjeljku pokazati kako stvoriti sistemsku datoteku usluge za vremensku aplikaciju tako da se automatski pokreće nakon pokretanja.

Prvo stvorite a meteorološka stanica.servis datoteku u vašem direktoriju projekta kako slijedi:

$ nano meteorološka stanica.servis

Unesite sljedeće retke koda u meteorološka stanica.servis datoteka.

[Jedinica]
Opis = Web aplikacija Raspberry Pi Weather Station pomoću šešira Raspberry Pi Sense
Nakon = mreža.cilj
[Servis]
WorkingDirectory = / home / pi / work
Okruženje = FLASK_APP = poslužitelj.py
Okoliš = FLASK_ENV = proizvodnja
ExecStart = / usr / bin / tikvica pokrenut --host = 0.0.0.0
StandardOutput = naslijedi
StandardError = naslijedi
Restart = uvijek
Korisnik = pi
[Instalirati]
WantedBy = višekorisnički.cilj

Zatim pritisnite + x nakon čega slijedi Y i spasiti meteorološka stanica.servis datoteka.

Kopirajte meteorološka stanica.servis datoteke na / etc / systemd / system / direktorij sa sljedećom naredbom:

$ sudo cp -v meteorološka stanica.usluga / etc / systemd / system /

Ponovo učitajte systemd demone kako bi promjene stupile na snagu na sljedeći način:

$ sudo systemctl daemon-reload

The meteorološka stanica usluga systemd trenutno bi trebala biti neaktivna, kao što je prikazano na snimci zaslona u nastavku.

Meteorološka stanica $ sudo systemctl status.servis

Pokrenite meteorološka stanica usluga sa sljedećom naredbom:

$ sudo systemctl pokretanje meteorološke stanice.servis

Kao što vidite, meteorološka stanica usluga je sada pokrenuta.

Meteorološka stanica $ sudo systemctl status.servis

Sad kad je meteorološka stanica usluga radi, možete je dodati pokretanju sustava Raspberry Pi OS sljedećom naredbom:

$ sudo systemctl omogućuje meteorološku stanicu.servis

Ponovno pokrenite Raspberry Pi sljedećom naredbom:

$ sudo ponovno pokretanje

Jednom kad se Raspberry Pi pokrene, meteorološka stanica usluga bi trebala biti pokrenuta, kao što je prikazano na snimci zaslona u nastavku.

Meteorološka stanica $ sudo systemctl status.servis

Pristup aplikaciji Weather s drugih uređaja

Da biste pristupili vremenskoj aplikaciji s drugih uređaja u vašoj kućnoj mreži, morate znati IP adresu vašeg Raspberry Pi. IP adresu vašeg Raspberry Pi 4 možete pronaći na web sučelju za upravljanje kućnim usmjerivačem. U našem je slučaju IP adresa 192.168.0.103, ali ova će adresa za vas biti drugačija, stoga u svim sljedećim koracima pobrinite se da ovu adresu zamijenite vašom.

Ako imate pristup konzoli Raspberry Pi, možete pokrenuti sljedeću naredbu da biste pronašli i IP adresu.

$ hostname -I

Nakon što saznate IP adresu vašeg Raspberry Pi, možete joj pristupiti s bilo kojeg uređaja u vašoj kućnoj mreži. Kao što je prikazano na snimci zaslona u nastavku, aplikaciji za vrijeme pristupili smo s Android pametnog telefona.

Zaključak

U ovom smo članku pokazali kako se koristi Raspberry Pi Sense Hat za izgradnju meteorološke stanice Raspberry Pi. Koristili smo osjetilni šešir Python biblioteka za izdvajanje vremenskih podataka iz Raspberry Pi Sense Hat-a. Zatim smo koristili mikro web okvir Flask Python za stvaranje vremenskog API-ja i web aplikacije. Web aplikacija dobiva vremenske podatke iz vremenskog API-ja svakih 5 sekundi kako bi web aplikacija bila u toku s najnovijim vremenskim podacima.

Kako instalirati i igrati Doom na Linuxu
Uvod u Doom Serija Doom nastala je 90-ih nakon izlaska originalnog Dooma. To je bio trenutni hit i od tog vremena nadalje igraća serija dobila je broj...
Vulkan za korisnike Linuxa
Sa svakom novom generacijom grafičkih kartica vidimo da programeri igara pomiču granice grafičke vjernosti i dolaze na korak od fotorealizma. No, bez ...
OpenTTD vs Simutrans
Stvaranje vlastite simulacije prijevoza može biti zabavno, opuštajuće i izuzetno primamljivo. Zbog toga morate isprobati što više igara kako biste pro...