Aveņu Pi

Izveidojiet savu Raspberry Pi laika staciju

Izveidojiet savu Raspberry Pi laika staciju
Raspberry Pi Sense Hat ir papilddēlis, kuru var izmantot kopā ar Raspberry Pi viena borta datoriem. Raspberry Pi Sense Hat ir 8 × 8 LED displejs un 5 taustiņu kursorsvira, un tas ir aprīkots ar šādiem sensoriem:

  1. Žiroskops
  2. Akselerometrs
  3. Magnetometrs
  4. Temperatūra
  5. Barometriskais spiediens
  6. 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:

  1. Aveņu Pi 3 vai Raspberry Pi 4 ar tīkla savienojamību.
  2. Aveņu Pi Sense Hat modulis.
  3. Mikro USB (Raspberry Pi 3) vai C tipa USB (Raspberry Pi 4) strāvas adapteris.
  4. 16 GB vai 32 GB microSD karte ar Raspberry Pi OS.
  5. 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 + X sekoja un .

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 SenseHat
no 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 + X sekoja un .

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 + C lai apturētu programmu.

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 kolba
no 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 + X sekoja un lai saglabātu serveris.py Python skripts.

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.





Raspberry Pi laika stacija
href = "url_for ('static', filename =" stils.css ")" />



Raspberry Pi laika stacija



Temperatūra












Spiediens




















Mitrums











Pēc tam nospiediet + X sekoja un lai saglabātu mājas.html failu.

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 + X sekoja un lai saglabātu stils.css failu.

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 + X sekoja un lai saglabātu lietotne.js failu.

Š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 + C lai apturētu tīmekļa serveri.

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 + X sekoja un lai saglabātu meteoroloģiskā stacija.apkalpošana failu.

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.

Noderīgi rīki Linux spēlētājiem
Ja jums patīk spēlēt spēles Linux, iespējams, ka spēļu pieredzes uzlabošanai, iespējams, esat izmantojis tādas lietotnes un utilītprogrammas kā Wine, ...
HD Remastered spēles operētājsistēmai Linux, kurām nekad agrāk nebija Linux laidiena
Daudzi spēļu izstrādātāji un izdevēji nāk klajā ar veco spēļu HD remaster, lai pagarinātu franšīzes darbības laiku. Lūdzu, faniem, kas pieprasa saderī...
Kā izmantot AutoKey, lai automatizētu Linux spēles
AutoKey ir darbvirsmas automatizācijas lietderība operētājsistēmām Linux un X11, kas ieprogrammēta Python 3, GTK un Qt. Izmantojot skriptu un MACRO fu...