- Žiroskops
- Akselerometrs
- Magnetometrs
- Temperatūra
- Barometriskais spiediens
- Mitrums
Šajā rakstā es jums parādīšu, kā izveidot Python API balstītu laika staciju tīmekļa lietojumprogrammu, izmantojot temperatūra, barometriskais spiediens, un mitrums Raspberry Pi Sense Hat sensori. Lai sekotu šim rakstam, jums būs nepieciešams:
- Aveņu Pi 3 vai Raspberry Pi 4 ar tīkla savienojamību.
- Aveņu Pi Sense Hat modulis.
- Mikro USB (Raspberry Pi 3) vai C tipa USB (Raspberry Pi 4) strāvas adapteris.
- 16 GB vai 32 GB microSD karte ar Raspberry Pi OS.
- Klēpjdators vai galddators, lai piekļūtu VNC attālajai darbvirsmai vai SSH piekļuvei Raspberry Pi.
PIEZĪME: Šajā rakstā mēs izveidosim savienojumu ar Raspberry Pi attālināti, izmantojot VNC vai SSH, izmantojot Raspberry Pi iestatījumu bez galvas. Ja nevēlaties piekļūt savam Raspberry Pi attālināti, izmantojot SSH vai VNC, Raspberry Pi būs jāpievieno monitors, tastatūra un pele.
Lai uzzinātu, kā mirgot Raspberry Pi OS attēlu uz microSD kartes, lūdzu, skatiet rakstu Kā instalēt un izmantot Raspberry Pi Imager. Ja jums nepieciešama palīdzība Raspberry Pi OS instalēšanā savā Raspberry Pi, izlasiet rakstu Raspberry Pi OS instalēšana Raspberry Pi 4. Ja jums nepieciešama palīdzība ar Raspberry Pi iestatīšanu bez galvas, skatiet sadaļu Kā Raspberry Pi OS instalēt un konfigurēt Raspberry Pi 4 bez ārēja monitora.
Raspberry Pi Sense cepures savienošana ar Raspberry Pi
Raspberry Pi Sense Hat komplektā ir Raspberry Pi Sense Hat pievienojumprogramma, 40 kontaktu galvene no vīrieša uz sievieti, kā arī dažas skrūves un starplikas.
Pirms jūs varat piestiprināt Sense Hat plāksni pie Raspberry Pi, jums ir jāpievieno 40 kontaktu galvene Sense Hat. Savienojiet 40 kontaktu vīriešu-sieviešu galvenes vīriešu tapas ar Sense Hat, kā parādīts zemāk esošajos attēlos.
Raspberry Pi viena borta datoriem ir 4 atveres, kuras var izmantot, lai piestiprinātu papildu plāksnes vai korpusu. Lai piestiprinātu papildplati, ievietojiet skrūves no Raspberry Pi aizmugures, kā parādīts zemāk esošajos attēlos.
Pēc tam pievienojiet starpliku pie skrūves.
Kad esat pievienojis visas četras skrūves un starplikas, jūsu Raspberry Pi vajadzētu izskatīties tā, kā parādīts zemāk esošajā attēlā.
Pievienojiet Raspberry Pi Sense Hat ar Raspberry Pi 40 kontaktu GPIO vīriešu galveni, kā parādīts zemāk esošajos attēlos.
PIEZĪME: Esiet piesardzīgs, atvienojot Raspberry Pi Sense cepuri no Raspberry Pi 40 kontaktu GPIO galvenes, lai izvairītos no Raspberry Pi GPIO tapu locīšanas.
Ar četrām atlikušajām skrūvēm piestipriniet Raspberry Pi Sense cepuri, kā parādīts zemāk esošajos attēlos.
Ieslēdzot Raspberry Pi
Tagad, kad Raspberry Pi Sense Hat ir pievienota Raspberry Pi, ievietojiet microSD karti ar Raspberry Pi OS Raspberry Pi microSD kartes slotā, pievienojiet strāvas kabeli Raspberry Pi un ieslēdziet to.
Raspberry Pi Sense Hat Python bibliotēkas instalēšana
Lai Raspberry Pi lietotu Raspberry Pi Sense cepuri, jēgas cepure Python bibliotēka ir jāinstalē Raspberry Pi OS. The jēgas cepure bibliotēka ir pieejama Raspberry Pi OS oficiālajā pakotņu krātuvē.
Lai instalētu Raspberry Pi jēgas cepure Python bibliotēka Raspberry Pi OS, vispirms atjauniniet APT pakotnes krātuves kešatmiņu ar šādu komandu:
$ sudo apt atjauninājums
Pēc tam izpildiet šādu komandu:
$ sudo apt instalējiet sense-hat -y
Flask Micro Web Framework Python bibliotēkas instalēšana
Lai izveidotu laika apstākļu lietojumprogrammu, mēs izmantosim Flask Python sistēmu. Jūs varat instalēt kolbu no Raspberry Pi OS oficiālās pakotņu krātuves ar šādu komandu:
$ sudo apt instalējiet python3-flask -y
Projektu direktorija izveide
Laba ideja ir izveidot projekta direktoriju, lai kārtotu projekta failus. Lai izveidotu projekta direktoriju ~ / darbs, izmantojiet šādu komandu:
$ mkdir ~ / darbs
Kad projekta direktorijs ir izveidots, dodieties uz projekta direktoriju šādi:
$ cd ~ / darbs
Raspberry Pi Sense cepures pārbaude
Lai pārbaudītu, vai Raspberry Pi Sense Hat darbojas, mēs varam uzrakstīt vienkāršu testa Python skriptu. Jūs varat izveidot jaunu Python skriptu ar nosaukumu pārbaude.py Ar nano teksta redaktors šādi:
$ nano tests.py
Ievadiet šādu kodu pārbaude.py failu. 1. rindas imports SenseHat no sense_hat modulis, 3. rinda izveido a SenseHat objektu un saglabā atsauci jēga mainīgs, un 5. – 6. rindā visu 8 × 8 gaismas diožu krāsa ir sarkana. Kad esat pabeidzis, nospiediet
Jūs varat palaist pārbaude.py Python skripts ar šādu komandu:
$ python3 tests.py
8 × 8 LED matricai jāspīd sarkanā krāsā, kā parādīts attēlā zemāk.
Lai izslēgtu Sense Hat gaismas diodes, palaidiet skaidrs () metode bez krāsas vērtības pārbaude.py Python skripts, kā parādīts zemāk esošajā ekrānuzņēmumā, un palaidiet pārbaude.py Atkal Python skripts.
Tagad Sense Hat gaismas diodēm jābūt izslēgtām, kā parādīts attēlā zemāk.
Ja Sense Hat darbojas pareizi, pārejiet uz nākamo sadaļu.
Laika datu iegūšana no Sense Hat
Sensora datus no Sense Hat var iegūt ļoti viegli, izmantojot jēgas cepure Python bibliotēka. Lai izgūtu sensora datus no Sense Hat, varat izveidot jaunu Python skriptu lasīt_sensora_datus.py sekojoši:
$ nano lasīšanas_sensora_dati.py
Ievadiet šādu kodu lasīt_sensora_datus.py Python fails.
no sense_hat importēt SenseHatno laika importa miegs
jēga = SenseHat ()
jēga.skaidrs ()
kamēr patiess:
tempC = jēga.get_temperature ()
tempF = tempC * (9/5) + 32
spiediens = jēga.get_pressure ()
mitrums = sajūta.get_humidity ()
drukāt ("Temperatūra:%.2f ° C /%.2f ° F \ n "% (tempC, tempF))
drukāt ("Spiediens:%.2f mb \ n "% (spiediens))
drukāt ("Mitrums:%.2f %% \ n \ n "% (mitrums))
gulēt (5)
Kad esat pabeidzis, nospiediet
Iepriekš kodā 1. un 2. rindā tiek importētas visas nepieciešamās bibliotēkas, 4. rindā tiek izveidota a SenseHat objektu, un 5. līnija izslēdz visas Sense Hat gaismas diodes, izmantojot skaidrs () metodi. Kamēr cilpa 7. rindā ir bezgalīga cilpa, kas uz visiem laikiem darbinās kodu 8. – 16.
8. rindā get_temperature () metodi izmanto, lai nolasītu temperatūras datus (grādos pēc Celsija) no Sense cepures mitruma sensora. 9. rindā temperatūras dati tiek pārvērsti no grādiem pēc Celsija uz grādiem pēc Fārenheita. 10. rindā get_pressure () metodi izmanto, lai nolasītu gaisa spiediena datus (milibāros) no Sense Hat spiediena sensora. 11. rindā get_humidity () metodi izmanto, lai nolasītu mitruma datus (%) no Sense Hat mitruma sensora.
13-15.līnijas tiek izmantotas sensora datu drukāšanai konsolē, un 16.rindas izmantošanai jāgaida 5 sekundes, pirms sensora dati atkal tiek lasīti.
Jūs varat palaist lasīt_sensora_datus.py Python skripts šādi:
$ python3 lasīšanas_sensora_dati.py
Pēc skripta izpildīšanas sensora dati tiks izdrukāti konsolē.
Tagad, kad mēs varam nolasīt sensora datus no Sense Hat, nospiediet
Meteoroloģiskās stacijas tīmekļa lietotnes izveide
Šajā sadaļā mēs parādīsim, kā izmantot Python Flask tīmekļa sistēmu, lai izveidotu laika apstākļu API un laika apstākļu lietojumprogrammu. Laika apstākļu lietojumprogramma piekļūs laika apstākļu API un reāllaikā parādīs laika apstākļu datus. Viss šajā sadaļā aplūkotais kods ir pieejams vietnē GitHub vietnē shovon8 / aveņu-pi-sense-hat-weather-app.
Vispirms izveidojiet a serveris.py Python skripts projekta direktorijā ir šāds:
$ nano serveris.py
Ievadiet šādu kodu serveris.py Python fails.
no kolbas importa kolbano kolbas importa jsonify
no kolbas importēt render_template
no kolbas importēt url_for
no sense_hat importēt SenseHat
app = kolba (__ vārds__)
lietotne.config ['SEND_FILE_MAX_AGE_DEFAULT'] = 0
jēga = SenseHat ()
jēga.skaidrs ()
ar lietotni.test_request_context ():
url_for ('statisks', faila nosaukums = 'stils.css ')
url_for ('static', faila nosaukums = 'app.js ')
@app.maršruts ('/ api')
def api ():
tempC = jēga.get_temperature ()
tempF = tempC * (9/5) + 32
spiediens = jēga.get_pressure ()
spiediensPsi = spiediens * 0.0145038
spiediensP = spiediens * 100
mitrums = sajūta.get_humidity ()
atgriezt jsonify (
"temperatūra": "C": tempC, "F": tempF,
"spiediens": "mb": spiediens, "hPa": spiediens,
"psi": spiediensPsi, "P": spiediensP,
"mitrums": mitrums
)
@app.maršruts ('/')
def home ():
atgriezt render_template ('./mājas.html ')
Pēc tam nospiediet
Iepriekš redzamajā kodā 1. – 5. Rindiņa importē visas nepieciešamās bibliotēkas, 7. rindiņa izveido lietotni Kolba, 11. rindiņa izveido objektu SenseHat un 12. rindiņa izslēdz visus Sense Hat gaismas diodes. 8. rindā tiek atspējota tīmekļa kešatmiņa lietotnei Flask. Tā kā šī lietotne ir viegla, kešatmiņa nav nepieciešama. Ja vēlaties modificēt lietotni, tad, ja tīmekļa kešatmiņa ir atspējota, testēšana būs daudz vienkāršāka.
18. – 31. Rinda nolasa sensora datus no Sense Hat un atgriež API datus JSON formātā, izmantojot HTTP GET pieprasījumu / api tīmekļa servera galapunkts. 37. – 39. Rinda atgriež laika apstākļu tīmekļa lietotnes mājas lapu vietnē / tīmekļa servera galapunkts. Mājas lapa tiek renderēta no mājas.html fails, kuram jābūt veidnes / projekta direktorija direktorija.
14-16. Rindas tiek izmantotas, lai atļautu piekļuvi stils.css un lietotne.js statiskie faili. Šiem failiem jābūt mapē statisks / projekta direktorija direktorija. The stils.css fails tiek izmantots, lai veidotu mājas.html mājas lapu un lietotne.js fails tiek izmantots, lai pieprasītu API datus no / api galapunkts un atjaunināt laika apstākļu datus mājas.html ik pēc 5 sekundēm.
Izveidojiet statisks / un veidnes / direktoriju projekta direktorijā šādi:
$ mkdir -v static, templates
Izveidojiet a mājas.html failu veidnes / direktoriju šādi:
$ nano veidnes / mājas.html
Ievadiet šādu kodu mājas.html failu.
href = "url_for ('static', filename =" stils.css ")" />
Raspberry Pi laika stacija
Temperatūra
…
…
Spiediens
…
…
…
…
Mitrums
…
Pēc tam nospiediet
Izveidojiet a stils.css failu statisks / direktoriju šādi:
$ nano statisks / stils.css
Ievadiet šādus kodus stils.css failu.
@import url ('https: // fonti.googleapis.com / css2?family = Roboto & display = swap ');*
polsterējums: 0;
starpība: 0;
fontu saime: 'Roboto', sans-serif;
ķermenis
fons: # 737373;
h1
displejs: bloks;
krāsa: # 79DC7B;
text-align: center;
fonta svars: 400;
fons: # 000;
polsterējums: 0.5em 0;
h2
displejs: bloks;
fons: # 000;
krāsa: #fff;
text-align: center;
fonta svars: 400;
fonta lielums: 1em;
.datu saturs
piemale: 10px;
apmale: 2px cieta melna;
apmales rādiuss: 5px;
fona krāsa: # 79DC7B;
.datu rinda
displejs: elastīgs;
elastības virziens: rinda;
.datu šūna
platums: 100%;
augstums: 80px;
displejs: elastīgs;
align-items: centrs;
attaisnot-saturs: centrs;
fonta svars: treknrakstā;
fonta lielums: 1.5em;
krāsa: # 006902;
.datu šūna: virziet kursoru
fons: # FFE891;
krāsa: # AA8600;
kursors: rādītājs;
Pēc tam nospiediet
Izveidojiet lietotne.js failu statisks / direktoriju šādi:
$ nano static / app.js
Ievadiet šādu kodu lietotne.js failu.
logs.addEventListener ('slodze', galvenā);funkcija main ()
funkcija getAPIData ()
var http = jauns XMLHttpRequest ();
http.onreadystatechange = function ()
ja (šis.readyState === 4 && šis.statuss === 200)
atjauninājums (JSON.parsēt (šo.responseText));
http.atvērts ("GET", "/ api", patiess);
http.nosūtīt ();
funkciju atjauninājums (apiData)
var tempC = dokuments.getElementById ("tempC");
var tempF = dokuments.getElementById ("tempF");
var pressureMb = dokuments.getElementById ("spiediensMb");
var pressurePsi = dokuments.getElementById ("spiediensPsi");
var pressureHpa = dokuments.getElementById ("spiediensHpa");
var spiediens P = dokuments.getElementById ("spiediensP");
var mitrums = dokuments.getElementById ("mitrums");
tempC.internalHTML = parseFloat (apiData.temperatūra.C).toFiksēts (2) + "° C";
tempF.internalHTML = parseFloat (apiData.temperatūra.F).toFixed (2) + "° F";
spiediensMb.internalHTML = parseFloat (apiData.spiediens.mb).toFiksēts (2) + "mb";
spiediensPsi.internalHTML = parseFloat (apiData.spiediens.psi).toFixed (2) + "psi";
spiediensHpa.internalHTML = parseFloat (apiData.spiediens.hPa).toFixed (2) + "hPa";
spiediensP.internalHTML = parseFloat (apiData.spiediens.P).toFiksēts (2) + "P";
mitrums.internalHTML = parseFloat (apiData.mitrums).toFixed (2) + "%";
funkcija lietotne ()
logs.setInterval (function ()
getAPIData ();
, 5000);
lietotne ();
Pēc tam nospiediet
Šeit 1. rindā darbojas galvenais () funkcija, kad Web lapa ir ielādēta. Iekš galvenais () funkcija, getAPIData () funkcija ielādē laika apstākļu API datus, izmantojot AJAX, un izsauc Atjaunināt() funkcija (10. rindā), kad dati ir veiksmīgi ielādēti. The Atjaunināt() funkcija atjaunina tīmekļa lapas elementu, izmantojot API datus.
20. rindā dokumentu.getElementById () metodi izmanto, lai iegūtu atsauci uz tīmekļa lapas elementu ar id tempC. 28. rindiņa tiek izmantota, lai aizstātu tīmekļa lapas elementa saturu, kuram ir ID tempC ar temperatūru (pēc Celsija) no API. Tādā pašā veidā visu tīmekļa elementu saturs (21. – 26. Rinda) tiek aizstāts ar to attiecīgajiem API datiem.
Iekš lietotne () funkcija, getAPIData () tiek izsaukts ik pēc 5 sekundēm (5000 milisekundes), lai laika apstākļu lietotnē atjauninātu laika apstākļu datus. Visbeidzot 46. rindā lietotne () funkcija tiek izpildīta.
Lai pārbaudītu tīmekļa lietotni, ievadiet šādu komandu:
$ FLASK_APP = serveris.py kolbas darbība - saimnieks = 0.0.0.0
Laika apstākļu lietotnei vajadzētu darboties 5000 ostā (pēc noklusējuma).
Lai pārbaudītu, vai Weather API darbojas, izpildiet šādu komandu:
$ čokurošanās -s http: // localhost: 5000 / api | json_pp
Kā redzat, Weather API dati tiek izdrukāti konsolē. Tāpēc API darbojas.
Lai pārbaudītu lietotni Weather, pārlūkā Chromium apmeklējiet vietni http: // localhost: 5000. Lietotne Laika dati ir jāielādē tīmekļa pārlūkprogrammā, taču vispirms nevajadzētu parādīt laika apstākļu datus.
Pēc dažām sekundēm laika ziņu lietotnei jāpabeidz laika apstākļu datu ielāde no API un tie jāparāda.
Jebkurā brīdī jūs varat nospiest
Systemd pakalpojuma izveidošana Weather Web App
Šajā sadaļā mēs parādīsim, kā izveidot laika ziņu lietotnei systemd servisa failu, lai tas automātiski sāktos pēc palaišanas.
Vispirms izveidojiet a meteoroloģiskā stacija.apkalpošana failu jūsu projekta direktorijā šādi:
$ nano meteostacija.apkalpošana
Ievadiet šādas koda rindas meteoroloģiskā stacija.apkalpošana failu.
[Vienība]Apraksts = Raspberry Pi laika stacijas tīmekļa lietotne, izmantojot Raspberry Pi Sense Hat
Pēc = tīkls.mērķis
[Apkalpošana]
WorkingDirectory = / mājas / pi / darbs
Vide = FLASK_APP = serveris.py
Vide = FLASK_ENV = produkcija
ExecStart = / usr / bin / flask run - host = 0.0.0.0
StandardOutput = mantot
StandardError = mantot
Restartēt = vienmēr
Lietotājs = pi
[Uzstādīt]
WantedBy = daudzlietotāju.mērķis
Pēc tam nospiediet
Nokopējiet meteoroloģiskā stacija.apkalpošana failu uz / etc / systemd / system / direktoriju ar šādu komandu:
$ sudo cp -v meteoroloģiskā stacija.pakalpojums / etc / systemd / system /
Pārlādējiet sistēmasdemonus, lai izmaiņas stātos spēkā šādi:
$ sudo systemctl daemon-reload
The meteoroloģiskā stacija systemd pakalpojumam pašlaik jābūt neaktīvam, kā parādīts zemāk esošajā ekrānuzņēmumā.
$ sudo systemctl statusa meteostacija.apkalpošana
Sāciet meteoroloģiskā stacija pakalpojumu ar šādu komandu:
$ sudo systemctl start meteoroloģiskā stacija.apkalpošana
Kā redzat, meteoroloģiskā stacija pakalpojums tagad darbojas.
$ sudo systemctl statusa meteostacija.apkalpošana
Tagad, kad meteoroloģiskā stacija pakalpojums darbojas, varat to pievienot Raspberry Pi OS sistēmas startēšanai ar šādu komandu:
$ sudo systemctl iespējot meteoroloģisko staciju.apkalpošana
Pārstartējiet Raspberry Pi ar šādu komandu:
$ sudo atsāknēšana
Kad jūsu Raspberry Pi zābaki, meteoroloģiskā stacija pakalpojumam jādarbojas, kā parādīts zemāk esošajā ekrānuzņēmumā.
$ sudo systemctl statusa meteostacija.apkalpošana
Piekļuve lietotnei Weather no citām ierīcēm
Lai piekļūtu laika apstākļu lietotnei no citām ierīcēm jūsu mājas tīklā, jums jāzina Raspberry Pi IP adrese. Raspberry Pi 4 IP adresi varat atrast mājas maršrutētāja tīmekļa pārvaldības saskarnē. Mūsu gadījumā IP adrese ir 192.168. lpp.0.103, taču šī adrese jums būs atšķirīga, tāpēc visos turpmākajos soļos noteikti nomainiet šo adresi ar savu.
Ja jums ir piekļuve Raspberry Pi konsolei, varat palaist šo komandu, lai atrastu arī IP adresi.
$ resursdatora nosaukums -Es
Kad esat uzzinājis sava Raspberry Pi IP adresi, varat tam piekļūt no jebkuras ierīces jūsu mājas tīklā. Kā redzams zemāk redzamajā ekrānuzņēmumā, laika apstākļu lietotnei esam piekļuvuši no Android viedtālruņa.
Secinājums
Šajā rakstā mēs parādījām, kā izmantot Raspberry Pi Sense Hat, lai izveidotu Raspberry Pi laika staciju. Mēs izmantojām jēgas cepure Python bibliotēka, lai iegūtu laika apstākļu datus no Raspberry Pi Sense Hat. Pēc tam mēs izmantojām Flask Python mikro tīmekļa ietvaru, lai izveidotu laika apstākļu API un tīmekļa lietojumprogrammu. Tīmekļa lietotne ik pēc 5 sekundēm iegūst laika apstākļu datus no laika apstākļu API, lai tīmekļa lietotne tiktu atjaunināta ar jaunākajiem laika apstākļu datiem.