- Žiroskop
- Brzinomjer
- Magnetometar
- Temperatura
- Tlak zraka
- 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:
- Raspberry Pi 3 ili Raspberry Pi 4 s mrežnom povezanošću.
- Modul Raspberry Pi Sense Hat.
- Mikro-USB (Raspberry Pi 3) ili USB Type-C (Raspberry Pi 4) adapter za napajanje.
- MicroSD kartica od 16 GB ili 32 GB s OS Raspberry Pi.
- 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
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 SenseHatod 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
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
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 Tikvicaiz 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
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.
href = "url_for ('static', filename =" style.css ")" />
Meteorološka stanica Raspberry Pi
Temperatura
..
..
Pritisak
..
..
..
..
Vlažnost
..
Zatim pritisnite
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
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
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
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
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.