Avietė Pi

Sukurkite savo aviečių Pi orų stotį

Sukurkite savo aviečių Pi orų stotį
„Raspberry Pi Sense Hat“ yra papildoma plokštė, kurią galima naudoti su „Raspberry Pi“ vieno borto kompiuteriais. „Raspberry Pi Sense Hat“ turi 8 × 8 LED ekraną ir 5 mygtukų vairasvirtę. Jame yra šie jutikliai:

  1. Giroskopas
  2. Akselerometras
  3. Magnetometras
  4. Temperatūra
  5. Barometrinis slėgis
  6. Drėgmė

Šiame straipsnyje aš jums parodysiu, kaip sukurti „Python“ API pagrįstą meteorologijos stoties žiniatinklio programą naudojant temperatūra, barometrinis slėgis, ir drėgmė „Raspberry Pi Sense Hat“ jutikliai. Norėdami sekti šį straipsnį, jums reikės:

  1. „Raspberry Pi 3“ arba „Raspberry Pi 4“ su tinklo ryšiu.
  2. „Raspberry Pi Sense Hat“ modulis.
  3. „Micro-USB“ („Raspberry Pi 3“) arba „Type-C“ („Raspberry Pi 4“) maitinimo adapteris.
  4. 16 arba 32 GB „microSD“ kortelė su „Raspberry Pi OS“.
  5. Nešiojamas kompiuteris arba stacionarus kompiuteris, skirtas VNC nuotoliniam darbalaukiui arba SSH prieigai prie „Raspberry Pi“.

PASTABA: Šiame straipsnyje mes prisijungsime prie „Raspberry Pi“ nuotoliniu būdu per VNC arba SSH, naudodami „Raspberry Pi“ sąranką be galvos. Jei nenorite pasiekti „Raspberry Pi“ nuotoliniu būdu per SSH ar VNC, prie „Raspberry Pi“ turėsite prijungti monitorių, klaviatūrą ir pelę.

Norėdami sužinoti, kaip „Raspberry Pi OS“ vaizdą mirksėti ant „microSD“ kortelės, žr. Kaip įdiegti ir naudoti „Raspberry Pi Imager“. Jei jums reikia pagalbos įdiegiant „Raspberry Pi OS“ į „Raspberry Pi“, skaitykite „Kaip įdiegti„ Raspberry Pi OS “į„ Raspberry Pi 4 “. Jei jums reikia pagalbos nustatant „Raspberry Pi“ be galvos, patikrinkite, kaip įdiegti ir konfigūruoti „Raspberry Pi“ OS „Raspberry Pi 4“ be išorinio monitoriaus.

„Raspberry Pi Sense“ skrybėlės sujungimas su „Raspberry Pi“

„Raspberry Pi Sense Hat“ rinkinyje yra „Raspberry Pi Sense Hat“ papildoma plokštė, 40 kontaktų antgalis nuo vyro iki moters ir kai kurie varžtai bei tarpikliai.

Norėdami pritvirtinti „Sense Hat“ lentą prie „Raspberry Pi“, turite prijungti 40 kontaktų antraštę prie „Sense Hat“. Prijunkite 40 smeigtukų vyriškos lyties antgalio kištukus su „Sense Hat“, kaip parodyta žemiau esančiuose paveikslėliuose.

Vieno plokštės „Raspberry Pi“ kompiuteriuose yra 4 skylės, kuriomis galima pritvirtinti papildomas lentas ar dėklą. Norėdami pritvirtinti papildomą plokštę, įdėkite varžtus iš „Raspberry Pi“ galinės pusės, kaip parodyta toliau pateiktuose paveikslėliuose.

Tada prie varžto prijunkite tarpiklį.

Pridėjus visus keturis varžtus ir tarpiklius, jūsų „Raspberry Pi“ turėtų atrodyti taip, kaip parodyta žemiau esančiame paveikslėlyje.

Prijunkite „Raspberry Pi Sense“ skrybėlę prie „Raspberry Pi“ 40 kontaktų GPIO vyriškos antraštės, kaip parodyta toliau pateiktuose paveikslėliuose.

PASTABA: Būkite atsargūs atjungdami „Raspberry Pi Sense“ skrybėlę nuo „Raspberry Pi“ 40 kontaktų GPIO antraštės, kad nesulenktumėte „Raspberry Pi GPIO“ kaiščių.

Keturiais likusiais varžtais pritvirtinkite „Raspberry Pi Sense“ skrybėlę, kaip parodyta žemiau esančiuose paveikslėliuose.

Maitinimas „Raspberry Pi“

Dabar, kai „Raspberry Pi Sense“ skrybėlė yra prijungta prie „Raspberry Pi“, įdėkite „microSD“ kortelę su „Raspberry Pi OS“ į „Raspberry Pi“ „microSD“ kortelės angą, prijunkite maitinimo laidą prie „Raspberry Pi“ ir įjunkite jį.

„Raspberry Pi Sense Hat Python“ bibliotekos diegimas

Norėdami naudoti "Raspberry Pi Sense" skrybėlę ant aviečių Pi, jausmo kepurė „Raspberry Pi OS“ turi būti įdiegta „Python“ biblioteka. The pojūčių kepurė biblioteka yra oficialioje „Raspberry Pi OS“ paketų saugykloje.

Norėdami įdiegti „Raspberry Pi“ jausmo kepurė „Python“ bibliotekoje „Raspberry Pi OS“ pirmiausia atnaujinkite APT paketų saugyklos talpyklą naudodami šią komandą:

$ sudo apt atnaujinimas

Tada paleiskite šią komandą:

$ sudo apt įdiekite sense-hat -y

„Flask Micro Web Framework Python“ bibliotekos diegimas

Norėdami sukurti savo orų programą, naudosime „Flask Python“ sistemą. „Flask“ galite įdiegti iš oficialios „Raspberry Pi OS“ paketų saugyklos naudodami šią komandą:

$ sudo apt įdiekite python3-flask -y

Projektų katalogo kūrimas

Geriausia sukurti projekto katalogą, kad būtų tvarkomi projekto failai. Norėdami sukurti projekto katalogą ~ / darbas, naudokite šią komandą:

$ mkdir ~ / darbas

Sukūrę projekto katalogą, eikite į projekto katalogą taip:

$ cd ~ / darbas

„Raspberry Pi Sense“ kepurės testavimas

Norėdami patikrinti, ar „Raspberry Pi Sense Hat“ veikia, galime parašyti paprastą bandomąjį „Python“ scenarijų. Galite sukurti naują „Python“ scenarijų, vadinamą testas.py su nano teksto redaktorius taip:

$ nano testas.py

Įveskite šį kodą į testas.py failą. 1 eilutė importuoja „SenseHat“ nuo sense_hat modulis, 3 eilutė sukuria a „SenseHat“ objektą ir išsaugo nuorodą prasme kintamas, o 5-6 eilutės nustato visų 8 × 8 šviesos diodų spalvą raudonai. Baigę paspauskite + X paskui Y ir .

Galite paleisti testas.py „Python“ scenarijus su šia komanda:

$ python3 testas.py

8 × 8 LED matrica turėtų švyti raudona spalva, kaip parodyta paveikslėlyje žemiau.

Norėdami išjungti „Sense Hat“ šviesos diodus, paleiskite aišku () metodas be spalvų vertės testas.py „Python“ scenarijų, kaip parodyta toliau pateiktame paveikslėlyje, ir paleiskite testas.py Vėl „Python“ scenarijus.

Dabar „Sense Hat“ šviesos diodai turėtų būti išjungti, kaip parodyta paveikslėlyje žemiau.

Jei „Sense Hat“ veikia tinkamai, pereikite prie kito skyriaus.

Kaip gauti orų duomenis iš „Sense Hat“

Galite lengvai gauti jutiklio duomenis iš „Sense Hat“ naudodami pojūčių kepurė Python biblioteka. Norėdami gauti jutiklio duomenis iš „Sense Hat“, galite sukurti naują „Python“ scenarijų read_sensor_data.py taip:

$ nano skaitymo_jutiklio_duomenys.py

Įveskite šį kodą į read_sensor_data.py „Python“ failas.

iš „sense_hat“ importo „SenseHat“
nuo laiko importuoti miegą
prasmė = SenseHat ()
prasme.aišku ()
o tiesa:
tempC = prasmė.get_temperature ()
tempF = tempC * (9/5) + 32
slėgis = jausmas.get_pressure ()
drėgmė = pojūtis.get_humidity ()
spausdinti ("Temperatūra:%.2f ° C /%.2f ° F \ n "% (tempC, tempF))
spausdinti ("Slėgis:%.2f mb \ n "% (slėgis))
spausdinti ("Drėgmė:%.2f %% \ n \ n "% (drėgmė))
miegas (5)

Baigę paspauskite + X paskui Y ir .

Pirmiau pateiktame kode 1 ir 2 eilutės importuoja visas reikiamas bibliotekas, 4 eilutėje sukuriamas a „SenseHat“ objektą, o 5 eilutė išjungia visus „Sense Hat“ šviesos diodus naudodami aišku () metodas. 7 eilutės „while“ kilpa yra begalinė kilpa, kuri amžinai vykdys kodą 8–16 eilutėse.

8 eilutėje get_temperature () metodas naudojamas temperatūros duomenims (Celsijaus laipsniais) nuskaityti iš „Sense Hat“ drėgmės jutiklio. 9 eilutėje temperatūros duomenys konvertuojami iš Celsijaus laipsnių į Farenheito laipsnius. 10 eilutėje get_pressure () metodas naudojamas oro slėgio duomenims (milibarais) nuskaityti iš „Sense Hat“ slėgio jutiklio. 11 eilutėje get_humidity () metodas naudojamas drėgmės duomenims (%) nuskaityti iš „Sense Hat“ drėgmės jutiklio.

13-15 eilutės naudojamos spausdinti jutiklio duomenis į konsolę, o 16 eilutė naudojama laukti 5 sekundes, kol vėl bus skaitomi jutiklio duomenys.

Galite paleisti read_sensor_data.py „Python“ scenarijus taip:

$ python3 skaitymo_sensoriaus_duomenys.py

Paleidus scenarijų, jutiklio duomenys bus spausdinami į konsolę.

Dabar, kai galime perskaityti jutiklio duomenis iš „Sense Hat“, paspauskite + C sustabdyti programą.

Meteorologinės stoties žiniatinklio programos kūrimas

Šiame skyriuje mes parodysime, kaip naudoti „Python Flask“ žiniatinklio sistemą kuriant orų API ir orų programą. Orų programa pasieks orų duomenų API ir realiuoju laiku rodys orų duomenis. Visą šiame skyriuje aptartą kodą galite rasti „GitHub“ adresu shovon8 / aviečių-pi-sense-hat-weather-app.

Pirmiausia sukurkite a serverio.py „Python“ scenarijus projekto kataloge:

$ nano serveris.py

Įveskite šį kodą į serverio.py „Python“ failas.

iš kolbos importo kolba
iš kolbos importo jsonify
iš kolbos importuoti render_template
iš kolbos importo URL
iš „sense_hat“ importo „SenseHat“
app = kolba (__ vardas__)
programa.config ['SEND_FILE_MAX_AGE_DEFAULT'] = 0
prasmė = SenseHat ()
prasme.aišku ()
su programa.test_request_context ():
url_for ('statinis', failo pavadinimas = 'stilius.css ')
url_for ('static', failo pavadinimas = 'app.js ')
@app.maršrutas ('/ api')
def api ():
tempC = prasmė.get_temperature ()
tempF = tempC * (9/5) + 32
slėgis = jausmas.get_pressure ()
slėgisPsi = slėgis * 0.0145038
slėgis P = slėgis * 100
drėgmė = pojūtis.get_humidity ()
grąžinti jsonify (
„temperatūra“: „C“: tempC, „F“: tempF,
"slėgis": "mb": slėgis, "hPa": slėgis,
"psi": slėgisPsi, "P": slėgisP,
"drėgmė": drėgmė
)
@app.maršrutas ('/')
def home ():
grąžinti render_template ('./namai.html ')

Tada paspauskite + X paskui Y ir išsaugoti serverio.py „Python“ scenarijus.

Aukščiau pateiktame kode 1–5 eilutės importuoja visas reikiamas bibliotekas, 7 eilutė sukuria programą „Kolba“, 11 eilutė sukuria objektą „SenseHat“, o 12 eilutė išjungia visus „Sense Hat“ šviesos diodus. 8 eilutė išjungia žiniatinklio talpyklą programai „Kolba“. Kadangi ši programa yra lengva, talpyklos nereikia. Jei norite modifikuoti programą, išjungus žiniatinklio talpyklą, testavimas bus daug lengvesnis.

18-31 eilutėse skaitomi jutiklio duomenys iš „Sense Hat“ ir pateikiami API duomenys JSON formatu, naudojant HTTP GET užklausą / api žiniatinklio serverio galinis taškas. 37-39 eilutėse pateikiamas orų žiniatinklio programos pagrindinis puslapis / žiniatinklio serverio galinis taškas. Pagrindinis puslapis pateikiamas iš namai.HTML failą, kuris turėtų būti šablonai / projekto katalogo katalogas.

14-16 eilutės naudojamos norint patekti į stiliaus.css ir programa.js statiniai failai. Šie failai turėtų būti statinis/ projekto katalogo katalogas. The stiliaus.css failas naudojamas namai.HTML pagrindinis puslapis ir programa.js failas naudojamas norint prašyti API duomenų iš / api galutinis taškas ir atnaujinti orų duomenis namai.HTML puslapis kas 5 sekundes.

Sukurkite statinis/ ir šablonai / katalogą projekto kataloge taip:

$ mkdir -v static, templates

Sukurti namai.HTML failą šablonai / katalogą taip:

$ nano šablonai / namai.HTML

Įveskite šį kodą į namai.HTML failą.





Aviečių Pi orų stotis
href = "url_for ('static', failo pavadinimas =" stilius.css ")" />



Aviečių Pi orų stotis



Temperatūra












Slėgis




















Drėgmė











Tada paspauskite + X paskui Y ir išsaugoti namai.HTML failą.

Sukurti stiliaus.css failą statinis/ katalogą taip:

$ nano statinis / stilius.css

Įveskite šiuos kodus į stiliaus.css failą.

@import url ('https: // šriftai.googleapis.com / css2?family = Roboto & display = swap ');
*
užpildas: 0;
paraštė: 0;
šriftų šeima: 'Roboto', sans-serif;

kūnas
fonas: # 737373;

h1
rodyti: blokuoti;
spalva: # 79DC7B;
text-align: centre;
šrifto svoris: 400;
fonas: # 000;
užpildas: 0.5em 0;

h2
rodyti: blokuoti;
fonas: # 000;
spalva: #fff;
text-align: centre;
šrifto svoris: 400;
šrifto dydis: 1em;

.duomenų turinys
paraštė: 10 taškų;
kraštinė: 2px vientisa juoda;
krašto spindulys: 5 tšk
fono spalva: # 79DC7B;

.duomenų eilutė
ekranas: lankstus;
lankstumo kryptis: eilutė;

.duomenų langelis
plotis: 100%;
aukštis: 80 taškų;
ekranas: lankstus;
lygiuoti daiktai: centras;
pateisinti-turinys: centras;
šrifto svoris: paryškintas;
šrifto dydis: 1.5em;
spalva: # 006902;

.duomenų langelis: užveskite pelės žymeklį
fonas: # FFE891;
spalva: # AA8600;
žymeklis: rodyklė;

Tada paspauskite + X paskui Y ir išsaugoti stiliaus.css failą.

Sukurkite programa.js failą statinis/ katalogą taip:

„$ nano static“ / programa.js

Įveskite šį kodą į programa.js failą.

langas.addEventListener ('apkrova', pagrindinis);
funkcija main ()
funkcija getAPIData ()
var http = naujas XMLHttpRequest ();
http.onreadystatechange = function ()
jei tai.readyState === 4 && tai.statusas === 200)
atnaujinimas (JSON.analizuoti (tai.responseText));


http.atidaryti („GET“, „/ api“, tiesa);
http.siųsti ();

funkcijos atnaujinimas (apiData)
var tempC = dokumentas.„getElementById“ („tempC“);
var tempF = dokumentas.„getElementById“ („tempF“);
var pressureMb = dokumentas.„getElementById“ („pressureMb“);
var pressurePsi = dokumentas.„getElementById“ („pressurePsi“);
var pressureHpa = dokumentas.„getElementById“ („pressureHpa“);
var pressureP = dokumentas.getElementById („slėgisP“);
var drėgmė = dokumentas.getElementById ("drėgmė");
tempC.vidinisHTML = parseFloat (apiData.temperatūra.C).toFixed (2) + "° C";
tempF.vidinisHTML = parseFloat (apiData.temperatūra.F).toFixed (2) + "° F";
slėgisMb.vidinisHTML = parseFloat (apiData.spaudimas.mb).toFixed (2) + "mb";
slėgisPsi.vidinisHTML = parseFloat (apiData.spaudimas.psi).toFixed (2) + "psi";
slėgisHpa.vidinisHTML = parseFloat (apiData.spaudimas.hPa).toFixed (2) + "hPa";
slėgisP.vidinisHTML = parseFloat (apiData.spaudimas.P).toFixed (2) + "P";
drėgmė.vidinisHTML = parseFloat (apiData.drėgmė).toFixed (2) + "%";

funkcija programa ()
langas.setInterval (function ()
getAPIData ();
, 5000);

programa ();

Tada paspauskite + X paskui Y ir išsaugoti programa.js failą.

Čia 1 eilutė eina pagrindinis () funkciją, kai baigsis tinklalapio įkėlimas. Viduje konors pagrindinis () funkcija getAPIData () funkcija nuskaito orų API duomenis naudodama AJAX ir iškviečia atnaujinti () funkcija (10 eilutėje), kai duomenys bus sėkmingai gauti. The atnaujinti () funkcija atnaujina tinklalapio elementą naudodama API duomenis.

20 eilutėje dokumentas.„getElementById“ () metodas naudojamas norint gauti nuorodą į tinklalapio elementą su ID tempC. 28 eilutė naudojama pakeisti tinklalapio elemento, kurio ID yra, turinį tempC su temperatūra (Celsijaus laipsniais) iš API. Tuo pačiu būdu visų žiniatinklio elementų (21–26 eilutės) turinys pakeičiamas atitinkamais jų API duomenimis.

Viduje konors programa () funkcija getAPIData () skambinama kas 5 sekundes (5000 milisekundžių), kad orų programoje būtų atnaujinami orų duomenys. Galiausiai, 46 eilutėje, programa () funkcija vykdoma.

Norėdami išbandyti žiniatinklio programą, įveskite šią komandą:

$ FLASK_APP = serveris.py kolba paleista - šeimininkas = 0.0.0.0

Orų programa turėtų veikti 5000 uoste (pagal numatytuosius nustatymus).

Norėdami patikrinti, ar veikia „Weather“ API, vykdykite šią komandą:

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

Kaip matote, „Weather“ API duomenys spausdinami į konsolę. Todėl API veikia.

Norėdami išbandyti „Weather“ programą, „Chromium“ žiniatinklio naršyklėje apsilankykite šiuo adresu: http: // localhost: 5000. „Weather“ programa turėtų būti įkelta į interneto naršyklę, tačiau iš pradžių neturėtų būti rodomi orų duomenys.

Po kelių sekundžių orų programa turėtų baigti gauti orų duomenis iš API ir juos rodyti.

Bet kuriuo metu galite paspausti + C norėdami sustabdyti interneto serverį.

„Systemd“ paslaugos kūrimas „Weather Web App“

Šiame skyriuje parodysime, kaip sukurti „systemd“ paslaugos failą orų programai, kad jis būtų automatiškai paleistas paleidus.

Pirmiausia sukurkite a meteorologinė stotis.paslaugą failą savo projekto kataloge taip:

$ nano meteorologinė stotis.paslaugą

Įveskite šias kodo eilutes meteorologinė stotis.paslaugą failą.

[Vienetas]
Aprašymas = „Raspberry Pi“ meteorologijos stoties žiniatinklio programa, naudojanti „Raspberry Pi Sense Hat“
Po = tinklas.taikinys
[Paslauga]
WorkingDirectory = / namai / pi / darbas
Aplinka = FLASK_APP = serveris.py
Aplinka = FLASK_ENV = gamyba
ExecStart = / usr / bin / flask run - host = 0.0.0.0
StandardOutput = paveldėti
StandardError = paveldėti
Paleisti iš naujo = visada
Vartotojas = pi
[Diegti]
WantedBy = daugeliui vartotojų.taikinys

Tada paspauskite + X paskui Y ir išsaugoti meteorologinė stotis.paslaugą failą.

Nukopijuokite meteorologinė stotis.paslaugą failą į / etc / systemd / system / katalogą su šia komanda:

$ sudo cp -v meteorologinė stotis.tarnyba / etc / systemd / system /

Perkraukite „systemd“ demonus, kad pakeitimai įsigaliotų taip:

$ sudo systemctl daemon-reload

The meteorologinė stotis „systemd“ paslauga šiuo metu turėtų būti neaktyvi, kaip parodyta toliau pateiktoje ekrano kopijoje.

$ sudo systemctl būsenos meteorologinė stotis.paslaugą

Paleiskite meteorologinė stotis tarnyba su šia komanda:

$ sudo systemctl start meteorologinė stotis.paslaugą

Kaip matote, meteorologinė stotis paslauga dabar veikia.

$ sudo systemctl būsenos meteorologinė stotis.paslaugą

Dabar, kai meteorologinė stotis paslauga veikia, galite ją pridėti prie „Raspberry Pi OS“ sistemos paleidimo naudodami šią komandą:

$ sudo systemctl įjungti meteorologinę stotį.paslaugą

Perkraukite „Raspberry Pi“ naudodami šią komandą:

$ sudo perkrauti

Kai jūsų aviečių Pi batai, meteorologinė stotis paslauga turėtų veikti, kaip parodyta toliau pateiktoje ekrano kopijoje.

$ sudo systemctl būsenos meteorologinė stotis.paslaugą

Prieiga prie „Weather“ programos iš kitų įrenginių

Norėdami pasiekti orų programą iš kitų namų tinklo įrenginių, turite žinoti savo „Raspberry Pi“ IP adresą. „Raspberry Pi 4“ IP adresą galite rasti savo namų maršrutizatoriaus žiniatinklio valdymo sąsajoje. Mūsų atveju IP adresas yra 192.168.0.103, bet šis adresas jums bus kitoks, todėl atlikdami visus tolesnius veiksmus būtinai pakeiskite šį adresą savo.

Jei turite prieigą prie „Raspberry Pi“ konsolės, galite paleisti šią komandą ir rasti IP adresą.

$ pagrindinio kompiuterio vardas -I

Kai žinosite „Raspberry Pi“ IP adresą, galėsite jį pasiekti iš bet kurio namų tinklo įrenginio. Kaip parodyta toliau pateiktoje ekrano kopijoje, mes pasiekėme orų programą iš „Android“ išmaniojo telefono.

Išvada

Šiame straipsnyje mes parodėme, kaip naudoti „Raspberry Pi Sense“ skrybėlę statant „Raspberry Pi“ meteorologijos stotį. Mes naudojome pojūčių kepurė „Python“ biblioteka orų duomenims iš „Raspberry Pi Sense Hat“ išgauti. Tada mes naudojome „Flask Python“ mikro žiniatinklio sistemą, kad sukurtume orų API ir žiniatinklio programą. Žiniatinklio programa kas 5 sekundes gauna orų duomenis iš orų API, kad žiniatinklio programa būtų atnaujinta pagal naujausius orų duomenis.

Valdykite ir valdykite pelės judėjimą tarp kelių „Windows 10“ monitorių
„Dual Display Mouse Manager“ leidžia jums valdyti ir konfigūruoti pelės judėjimą tarp kelių monitorių, sulėtinant jo judėjimą šalia sienos. „Windows 1...
„WinMouse“ leidžia tinkinti ir pagerinti pelės žymeklio judėjimą „Windows“ kompiuteryje
Jei norite pagerinti numatytąsias pelės žymiklio funkcijas, naudokite nemokamą programinę įrangą „WinMouse“. Tai prideda daugiau funkcijų, kurios padė...
Pelės kairiuoju pelės mygtuku mygtukas neveikia „Windows 10“
Jei naudojate specialią pelę su savo nešiojamuoju kompiuteriu arba staliniu kompiuteriu, tačiau neveikia pelės kairysis mygtukas dėl tam tikrų priežas...