- Gyroskooppi
- Kiihtyvyysmittari
- Magnetometri
- Lämpötila
- Ilmanpaine
- Kosteus
Tässä artikkelissa aion näyttää sinulle, miten voit luoda Python API -pohjaisen sääaseman verkkosovelluksen käyttämällä lämpötila , barometrinen paine ja kosteus Raspberry Pi Sense Hatun anturit. Tämän artikkelin seuraamiseksi tarvitset seuraavat asiat:
- Raspberry Pi 3 tai Raspberry Pi 4, jossa on verkkoyhteys.
- Raspberry Pi Sense Hat -moduuli.
- Micro-USB (Raspberry Pi 3) tai USB Type-C (Raspberry Pi 4) -virtasovitin.
- 16 Gt: n tai 32 Gt: n microSD -kortti Raspberry Pi -käyttöjärjestelmällä.
- Kannettava tietokone tai pöytätietokone VNC -etätyöpöytäkäyttöön tai SSH -yhteys Raspberry Pi: hen.
HUOMAUTUS: Tässä artikkelissa muodostamme yhteyden Raspberry Pi: hen etänä VNC: n tai SSH: n kautta käyttämällä Raspberry Pi: n päätöntä asetusta. Jos et halua käyttää Raspberry Pi -laitettasi etänä SSH: n tai VNC: n kautta, sinun on liitettävä näyttö, näppäimistö ja hiiri Raspberry Pi -laitteeseesi.
Lisätietoja Raspberry Pi OS -kuvan salaamisesta microSD -kortille on artikkelissa Raspberry Pi Imagerin asentaminen ja käyttö. Jos tarvitset apua Raspberry Pi -käyttöjärjestelmän asentamisessa Raspberry Pi -laitteeseesi, lue Raspberry Pi OS: n asentaminen Raspberry Pi 4: een . Jos tarvitset apua Raspberry Pi: n päätön määrityksessä, tutustu Raspberry Pi OS: n asentamiseen ja määrittämiseen Raspberry Pi 4: ssä ilman ulkoista näyttöä.
Raspberry Pi Sense Hatin yhdistäminen Raspberry Pi: hen
Raspberry Pi Sense Hat -sarjan mukana tulee Raspberry Pi Sense Hat -lisälevy, 40-nastainen uros-naaras-otsikko ja joitakin ruuveja ja välikappaleita.
Ennen kuin voit kiinnittää Sense Hat -levyn Raspberry Pi -laitteeseen, sinun on liitettävä 40-nastainen otsikko Sense Hat -hattuun. Liitä 40-nastaisen uros-naarasliittimen urosnastat Sense-hattuun alla olevien kuvien mukaisesti.
Raspberry Pi -piirilevyissä on 4 reikää, joilla voidaan kiinnittää lisälevyt tai kotelo. Kiinnitä lisäkortti asentamalla ruuvit Raspberry Pi -laitteen takaosasta alla olevien kuvien mukaisesti.
Liitä sitten välike ruuviin.
Kun olet lisännyt kaikki neljä ruuvia ja välikappaletta, Raspberry Pi: n pitäisi näyttää alla olevan kuvan mukaiselta.
Liitä Raspberry Pi Sense -hattu Raspberry Pi: n 40-nastaiseen GPIO-urosliitäntään alla olevien kuvien mukaisesti.
HUOMAUTUS: Ole varovainen irrottaessasi Raspberry Pi Sense Hat -hattua Raspberry Pi 40-nastaisesta GPIO-otsikosta, jotta Raspberry Pi GPIO: n tapit eivät taivu.
Kiinnitä Raspberry Pi Sense Hat neljällä jäljellä olevalla ruuvilla alla olevien kuvien mukaisesti.
Käynnistä Raspberry Pi
Nyt kun Raspberry Pi Sense Hat on liitetty Raspberry Pi -laitteeseen, aseta Raspberry Pi -käyttöjärjestelmää sisältävä microSD -kortti Raspberry Pi -laitteen microSD -korttipaikkaan, kytke virtajohto Raspberry Pi -laitteeseen ja käynnistä se.
Raspberry Pi Sense Hat Python -kirjaston asentaminen
Raspberry Pi Sense Hatin käyttämiseksi Raspberry Pi -laitteessa tunne-hattu Python -kirjasto on asennettava Raspberry Pi -käyttöjärjestelmään. The tunne-hattu kirjasto on saatavana Raspberry Pi OS: n virallisessa pakettivarastossa.
Raspberry Pi: n asentaminen tunne-hattu Python -kirjasto Raspberry Pi -käyttöjärjestelmässä, päivitä ensin APT -paketin arkiston välimuisti seuraavalla komennolla:
$ sudo apt päivitys
Suorita sitten seuraava komento:
$ sudo apt asentaa sense -hat -y
Flask Micro Web Framework Python -kirjaston asentaminen
Luomme sääsovelluksemme Flask Python -kehyksen avulla. Voit asentaa Flaskin Raspberry Pi OS: n virallisesta pakettivarastosta seuraavalla komennolla:
$ sudo apt asentaa python3 -flask -y
Projektihakemiston luominen
On hyvä idea luoda projektihakemisto projektitiedostojen järjestämiseksi. Luo projektihakemisto ~/työtä , käytä seuraavaa komentoa:
$ mkdir ~/työ
Kun projektihakemisto on luotu, siirry projektihakemistoon seuraavasti:
$ cd ~/työ
Raspberry Pi Sense Hatin testaus
Testataksemme, toimiiko Raspberry Pi Sense Hat, voimme kirjoittaa yksinkertaisen Python -testikomentosarjan. Voit luoda uuden Python -komentosarjan nimeltä test.py kanssa nano tekstieditori seuraavasti:
$ nano test.py
Kirjoita seuraava koodi test.py tiedosto. Rivin 1 tuonti SenseHat alkaen sense_hat moduuli, rivi 3 luo a SenseHat objekti ja tallentaa viitteen järkeä ja rivit 5–6 asettavat kaikkien 8 × 8 LEDien värin punaiseksi. Kun olet valmis, paina + X jonka jälkeen JA ja .
Voit suorittaa test.py Python -komentosarja seuraavalla komennolla:
$ python3 test.py
8 × 8 LED -matriisin pitäisi hehkua punaisena alla olevan kuvan mukaisesti.
Voit sammuttaa Sense Hat -merkkivalot suorittamalla asia selvä() menetelmässä ilman väriarvoa test.py Python -komentosarja, kuten alla olevassa kuvakaappauksessa näkyy, ja suorita test.py Python -skripti jälleen.
Sense Hatin LED -valot on nyt sammutettava, kuten alla olevassa kuvassa näkyy.
Jos Sense Hat toimii oikein, siirry seuraavaan osaan.
Säätietojen hakeminen Sense Hatista
Voit hakea sensoritietoja Sense Hatista erittäin helposti käyttämällä tunne-hattu Python -kirjasto. Voit noutaa sensoritietoja Sense Hatista luomalla uuden Python -komentosarjan read_sensor_data.py seuraavasti:
$ nano read_sensor_data.py
Kirjoita seuraava koodi read_sensor_data.py Python -tiedosto.
alkaensense_hattuontiSenseHatalkaen aika tuontinukkua
järkeä=SenseHat()
järkeä.asia selvä()
sillä aikaa Totta:
tempC=järkeä.get_temperature()
tempF=tempC *(9/5)+32
paine=järkeä.saada_paine()
kosteus=järkeä.get_humidity()
Tulosta('Lämpötila: %.2f ° C/ %.2f ° F n''%(tempC,tempF))
Tulosta('Paine: %.2f mb n''%(paine))
Tulosta('Kosteus:%.2f %% n n''%(kosteus))
nukkua(5)
Kun olet valmis, paina + X jonka jälkeen JA ja .
Yllä olevassa koodissa rivit 1 ja 2 tuovat kaikki tarvittavat kirjastot, rivi 4 luo a SenseHat objekti, ja rivi 5 sammuttaa kaikki Sense Hat -merkkivalot käyttämällä asia selvä() menetelmä. Vaikka silmukka rivillä 7 on ääretön silmukka, joka suorittaa koodin riveillä 8–16 ikuisesti.
Rivillä 8, get_temperature () -menetelmää käytetään lämpötilatietojen (celsiusasteina) lukemiseen Sense Hatin kosteusanturista. Rivillä 9 lämpötilatiedot muutetaan Celsius -asteista Fahrenheit -asteiksi. Rivillä 10, get_pressure () Menetelmää käytetään ilmanpainetietojen (millibaareina) lukemiseen Sense Hatin paineanturista. Rivillä 11, get_humidity () menetelmää käytetään kosteustietojen ( %) lukemiseen Sense Hatin kosteusanturista.
Rivejä 13–15 käytetään anturitietojen tulostamiseen konsoliin ja rivillä 16 odotetaan 5 sekuntia ennen anturitietojen lukemista.
Voit suorittaa read_sensor_data.py Python -skripti seuraavasti:
$ python3 read_sensor_data.py
Kun komentosarja on suoritettu, anturitiedot tulostetaan konsoliin.
Nyt kun voimme lukea anturitiedot Sense Hatista, paina + C ohjelman pysäyttämiseksi.
Sääaseman verkkosovelluksen luominen
Tässä osiossa näytämme sinulle, kuinka voit luoda Python Flask -verkkokehyksen avulla sääsovellusliittymän ja sääsovelluksen. Sääsovellus käyttää säätietojen sovellusliittymää ja näyttää säätiedot reaaliajassa. Kaikki tässä osassa käsitellyt koodit ovat saatavilla GitHubissa osoitteessa shovon8 / vadelma-pi-sense-hat-sää-sovellus .
Luo ensin server.py Python -skripti projektihakemistossa seuraavasti:
$ nano server.py
Kirjoita seuraava koodi server.py Python -tiedosto.
alkaenpullotuontiPulloalkaenpullotuontijsonify
alkaenpullotuontirender_template
alkaenpullotuontiurl_for
alkaensense_hattuontiSenseHat
sovellus=Pullo(__nimi__)
sovellus.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
järkeä=SenseHat()
järkeä.asia selvä()
kanssasovellus.test_request_context():
url_for('staattinen',Tiedoston nimi='style.css')
url_for('staattinen',Tiedoston nimi='app.js')
@sovellus.reitti('/antaa potkut')
defantaa potkut():
tempC=järkeä.get_temperature()
tempF=tempC *(9/5)+32
paine=järkeä.saada_paine()
painePsi=paine *0,0145038
paine P=paine *100
kosteus=järkeä.get_humidity()
palatajsonify({
'lämpötila':{ 'C': lämpötila C, 'F': tempF},
'paine':{ 'mb': paine, 'hPa': paine,
'psi': painePsi, 'P': paineP},
'kosteus': kosteus
})
@sovellus.reitti('/')
defKoti():
palatarender_template('./home.html')
Paina sitten + X jonka jälkeen JA ja pelastamaan server.py Python -käsikirjoitus.
Yllä olevassa koodissa rivit 1–5 tuovat kaikki tarvittavat kirjastot, rivi 7 luo Flask -sovelluksen, rivi 11 luo SenseHat -objektin ja rivi 12 sammuttaa kaikki Sense Hat -merkkivalot. Rivi 8 poistaa Flask -sovelluksen web -välimuistin käytöstä. Koska tämä sovellus on kevyt, välimuistia ei tarvita. Jos haluat muokata sovellusta, web -välimuistin poistaminen käytöstä helpottaa testaamista.
Rivit 18–31 lukevat anturitiedot Sense Hatista ja palauttavat API -tiedot JSON -muodossa HTTP GET -pyynnöllä /antaa potkut verkkopalvelimen päätepiste. Rivit 37–39 palauttavat sääsovelluksen kotisivun / verkkopalvelimen päätepiste. Kotisivu on muodostettu home.html tiedosto, jonka pitäisi olla mallit/ projektihakemiston hakemistosta.
Linjoilla 14–16 käytetään pääsyä style.css ja app.js staattisia tiedostoja. Näiden tiedostojen pitäisi olla staattinen/ projektihakemiston hakemistosta. The style.css tiedostoa käytetään muotoiluun home.html kotisivu ja app.js tiedostoa käytetään API -tietojen pyytämiseen /antaa potkut päätepiste ja päivitä säätiedot home.html sivu 5 sekunnin välein.
Luo staattinen/ ja mallit/ hakemistosta projektihakemistossa seuraavasti:
$ mkdir -v {static, templates}
Luo home.html tiedosto mallit/ hakemisto seuraavasti:
$ nano templates/home.html
Kirjoita seuraava koodi home.html tiedosto.
< html >
< pää >
< meta nimi='näkymä' sisältö='width = device-width, initial-scale = 1.0'>
< otsikko >Raspberry Pi -sääasema</ otsikko >
< linkki rel='tyylitaulukko' tyyppi='text/css'
href='{{url_for (' static ', tiedostonimi =' style.css ')}}'/>
</ pää >
< vartalo >
< div id='sisältö'>
< h1 >Raspberry Pi -sääasema</ h1 >
< div luokka='data-sisältö'>
< h2 >Lämpötila</ h2 >
< div luokka='data-rivi'>
< div luokka='datasolu' id='tempC'>
...
</ div >
< div luokka='datasolu' id='tempF'>
...
</ div >
</ div >
</ div >
< div luokka='data-sisältö'>
< h2 >Paine</ h2 >
< div luokka='data-rivi'>
< div luokka='datasolu' id='paineMb'>
...
</ div >
< div luokka='datasolu' id='painePsi'>
...
</ div >
</ div >
< div luokka='data-rivi'>
< div luokka='datasolu' id='paineHpa'>
...
</ div >
< div luokka='datasolu' id='paineP'>
...
</ div >
</ div >
</ div >
< div luokka='data-sisältö'>
< h2 >Kosteus</ h2 >
< div luokka='data-rivi'>
< div luokka='datasolu' id='kosteus'>
...
</ div >
</ div >
</ div >
</ div >
< käsikirjoitus tyyppi='text/javascript' src='{{url_for (' static ', tiedostonimi =' app.js ')}}'></ käsikirjoitus >
</ vartalo >
</ html >
Paina sitten + X jonka jälkeen JA ja pelastamaan home.html tiedosto.
Luo style.css tiedosto staattinen/ hakemisto seuraavasti:
$ nano static/style.css
Kirjoita seuraavat koodit kohtaan style.css tiedosto.
@tuonti url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');* {
pehmuste: 0;
marginaali: 0;
fonttiperhe: 'Robotti', sans-serif;
}
vartalo{
tausta: # 737373;
}
h1{
näyttö: lohko;
väri: #79DC7B;
tekstin tasaus: keskusta;
fontin paino: 400;
tausta: # 000;
pehmuste: 0,5 em 0;
}
h2{
näyttö: lohko;
tausta: # 000;
väri: #F F F;
tekstin tasaus: keskusta;
fontin paino: 400;
Fonttikoko: 1em;
}
.data-content {
marginaali: 10 kuvapistettä;
raja: 2px kiinteä musta;
raja-säde: 5 kuvapistettä;
taustaväri: #79DC7B;
}
.datarivi {
näyttö:taipua;
joustava suunta:rivi;
}
.datasolu {
leveys: 100%;
korkeus: 80px;
näyttö:taipua;
kohdista kohteet: keskusta;
perustella sisältöä: keskusta;
fontin paino: lihavoitu;
Fonttikoko: 1.5em;
väri: # 006902;
}
.datasolu:leijua {
tausta: # FFE891;
väri: # AA8600;
kohdistin: osoitin;
}
Paina sitten + X jonka jälkeen JA ja pelastamaan style.css tiedosto.
Luo app.js tiedosto staattinen/ hakemisto seuraavasti:
$ nano static/app.js
Kirjoita seuraava koodi app.js tiedosto.
ikkuna.addEventListener('ladata',tärkein);toimintotärkein() {
toimintogetAPIData() {
missähttp= UusiXMLHttpRequest();
http.jo vaihdossa = toiminto() {
jos(Tämä.readyState === 4 && Tämä.Tila === 200) {
päivittää(JSON.jäsentää(Tämä.responseText));
}
}
http.avata('SAADA', '/antaa potkut', totta);
http.lähettää();
}
toimintopäivittää(apiData) {
missätempC=asiakirja.getElementById('tempC');
missätempF=asiakirja.getElementById('tempF');
missäpaineMb=asiakirja.getElementById('paineMb');
missäpainePsi=asiakirja.getElementById('painePsi');
missäpaineHpa=asiakirja.getElementById('paineHpa');
missäpaine P=asiakirja.getElementById('paineP');
missäkosteus=asiakirja.getElementById('kosteus');
tempC.sisäinenHTML =parseFloat(apiData.lämpötila.C).toFixed(2) + '° C';
tempF.sisäinenHTML =parseFloat(apiData.lämpötila.F).toFixed(2) + '° F';
paineMb.sisäinenHTML =parseFloat(apiData.paine.mb).toFixed(2) + 'mb';
painePsi.sisäinenHTML =parseFloat(apiData.paine.psi).toFixed(2) + 'psi';
paineHpa.sisäinenHTML =parseFloat(apiData.paine.hPa).toFixed(2) + 'hPa';
paine P.sisäinenHTML =parseFloat(apiData.paine.P).toFixed(2) + 'P';
kosteus.sisäinenHTML =parseFloat(apiData.kosteus).toFixed(2) + '%';
}
toimintosovellus() {
ikkuna.setInterval(toiminto() {
getAPIData();
}, 5000);
}
sovellus();
}
Paina sitten + X jonka jälkeen JA ja pelastamaan app.js tiedosto.
Tässä rivi 1 kulkee pää () -toimintoa, kun verkkosivu latautuu. Kohteessa pää () toiminto, getAPIData () -toiminto hakee sää -API -tiedot AJAX: n avulla ja kutsuu päivittää() toiminto (rivillä 10), kun tiedot on haettu onnistuneesti. The päivittää() -toiminto päivittää verkkosivuelementin käyttämällä API -tietoja.
Rivillä 20, document.getElementById () -menetelmää käytetään verkkosivuelementin viitteen saamiseen tunnuksella tempC . Riviä 28 käytetään korvaamaan sen verkkosivuelementin sisältö, jolla on tunnus tempC lämpötilasta (Celsius) API: sta. Samalla tavalla kaikkien verkkoelementtien (rivit 21–26) sisältö korvataan vastaavilla API -tiedoilla.
Kohteessa sovellus() toiminto, getAPIData () soitetaan 5 sekunnin välein (5000 millisekuntia) pitääkseen säätiedot ajan tasalla sääsovelluksessa. Lopuksi rivillä 46, sovellus() toiminto suoritetaan.
Testaa verkkosovellus antamalla seuraava komento:
$ FLASK_APP = server.py -pullo suoritetaan -isäntä = 0.0.0.0
Sääsovelluksen pitäisi toimia portissa 5000 (oletuksena).
Testaa, toimiiko sääsovellusliittymä, suorittamalla seuraava komento:
$ curl -s http: // localhost: 5000/api | json_pp
Kuten näette, Weather API -tiedot tulostetaan konsoliin. Siksi API toimii.
Testaa Sää -sovellus osoitteessa http: // localhost: 5000 Chromium -selaimelta. Sääsovellus on ladattava verkkoselaimeen, mutta säätietoja ei tule näyttää aluksi.
Muutaman sekunnin kuluttua sääsovelluksen pitäisi lopettaa säätietojen noutaminen sovellusliittymästä ja näyttää se.
Voit milloin tahansa painaa + C verkkopalvelimen pysäyttämiseksi.
Systemd -palvelun luominen Weather Web Appille
Tässä osiossa näytämme sinulle, kuinka luoda järjestelmäsovellustiedosto sääsovellukselle, jotta se käynnistyy automaattisesti käynnistyksen yhteydessä.
Luo ensin sää-asema. palvelu tiedosto projektihakemistossasi seuraavasti:
$ nano-sääasema. palvelu
Kirjoita seuraavat koodirivit kohtaan sää-asema. palvelu tiedosto.
[Yksikkö]Kuvaus = Raspberry Pi Weather Station -sovellus, joka käyttää Raspberry Pi Sense Hat -hattua
Jälkeen = network.target
[Palvelu]
WorkingDirectory =/koti/pi/työ
Ympäristö = FLASK_APP = server.py
Ympäristö = FLASK_ENV = tuotanto
ExecStart =/usr/bin/flask run -isäntä = 0.0.0.0
StandardOutput = peri
Vakiovirhe = peri
Käynnistä uudelleen = aina
Käyttäjä = pi
[Asentaa]
WantedBy = usean käyttäjän.target
Paina sitten + X jonka jälkeen JA ja pelastamaan sää-asema. palvelu tiedosto.
Kopioi sää-asema. palvelu tiedosto /etc/systemd/system/ hakemistoon seuraavalla komennolla:
$ sudo cp -v sää -asema.palvelu/etc/systemd/system/
Lataa järjestelmädemonit uudelleen, jotta muutokset tulevat voimaan seuraavasti:
$ sudo systemctl daemon-reload
The sääasema systemd -palvelun pitäisi olla tällä hetkellä passiivinen, kuten alla olevassa kuvakaappauksessa näkyy.
$ sudo systemctl status weather-station.service
Käynnistä sääasema palvelu seuraavalla komennolla:
$ sudo systemctl käynnistä sää-station.service
Kuten näette, sääasema palvelu on nyt käynnissä.
$ sudo systemctl status weather-station.service
Nyt kun sääasema palvelu toimii, voit lisätä sen Raspberry Pi OS -järjestelmän käynnistykseen seuraavalla komennolla:
$ sudo systemctl ota käyttöön sää-station.service
Käynnistä Raspberry Pi uudelleen seuraavalla komennolla:
$ sudo uudelleenkäynnistys
Kun Raspberry Pi -kengät on saapunut, sääasema palvelun pitäisi olla käynnissä, kuten alla olevassa kuvakaappauksessa näkyy.
$ sudo systemctl status weather-station.service
Sääsovelluksen käyttäminen muista laitteista
Jotta voit käyttää sääsovellusta muista kotiverkon laitteista, sinun on tiedettävä Raspberry Pi -laitteesi IP -osoite. Löydät Raspberry Pi 4 -laitteesi IP -osoitteen kotireitittimen web -käyttöliittymästä. Meidän tapauksessamme IP -osoite on 192.168.0.103, mutta tämä osoite on erilainen sinulle, joten muista korvata tämä osoite omasi kaikissa seuraavissa vaiheissa.
Jos sinulla on pääsy Raspberry Pi -konsoliin, voit suorittaa IP -osoitteen myös suorittamalla seuraavan komennon.
$ hostname -I
Kun tiedät Raspberry Pi -laitteen IP -osoitteen, voit käyttää sitä miltä tahansa kotiverkon laitteelta. Kuten alla olevasta kuvakaappauksesta näkyy, olemme päässeet sääsovellukseen Android -älypuhelimesta.
Johtopäätös
Tässä artikkelissa näytimme sinulle, miten voit käyttää Raspberry Pi Sense -hattua Raspberry Pi -sääaseman rakentamiseen. Käytimme tunne-hattu Python -kirjasto poimii säätiedot Raspberry Pi Sense Hatista. Sitten loimme sääsovellusliittymän ja verkkosovelluksen Flask Python -mikroverkkokehyksen avulla. Verkkosovellus saa säätiedot sovellusliittymästä 5 sekunnin välein pitääkseen verkkosovelluksen ajan tasalla uusimmista säätiedoista.