Raspberry Pi

Zgradite svojo lastno vremensko postajo Raspberry Pi

Zgradite svojo lastno vremensko postajo Raspberry Pi
Raspberry Pi Sense Hat je dodatna plošča, ki jo lahko uporabljate z enojnimi računalniki Raspberry Pi. Klobuk Raspberry Pi Sense ima zaslon LED 8 × 8 in krmilno palčko s 5 gumbi, opremljen pa je z naslednjimi senzorji:

  1. Žiroskop
  2. Merilec pospeška
  3. Magnetometer
  4. Temperatura
  5. Barometarski tlak
  6. Vlažnost

V tem članku vam bom pokazal, kako ustvarite spletno aplikacijo za vremensko postajo, ki temelji na API-ju Python, z uporabo temperatura, zračni tlak, in vlažnost senzorji Raspberry Pi Sense Hat. Če želite nadaljevati s tem člankom, boste potrebovali naslednje:

  1. Raspberry Pi 3 ali Raspberry Pi 4 z omrežno povezljivostjo.
  2. Modul Raspberry Pi Sense Hat.
  3. Napajalnik z mikro USB (Raspberry Pi 3) ali USB Type-C (Raspberry Pi 4).
  4. Kartica microSD s 16 GB ali 32 GB z OS Raspberry Pi.
  5. Prenosnik ali namizni računalnik za dostop do oddaljenega namizja VNC ali SSH dostop do Raspberry Pi.

OPOMBA: V tem članku se bomo na Raspberry Pi povezali na daljavo prek VNC ali SSH z uporabo brezglave nastavitve Raspberry Pi. Če do Raspberry Pi ne želite dostopati na daljavo prek SSH ali VNC, boste morali na Raspberry Pi priključiti monitor, tipkovnico in miško.

Če želite izvedeti, kako bliskavico OS Raspberry Pi preslikati na kartico microSD, si oglejte Kako namestiti in uporabljati Raspberry Pi Imager. Če potrebujete pomoč pri namestitvi OS Raspberry Pi na vaš Raspberry Pi, preberite Kako namestiti sistem Raspberry Pi OS na Raspberry Pi 4. Če potrebujete pomoč pri brezglavi nastavitvi Raspberry Pi, si oglejte Kako namestiti in konfigurirati OS Raspberry Pi na Raspberry Pi 4 brez zunanjega monitorja.

Povezava Raspberry Pi Sense Hat z Raspberry Pi

V kompletu Raspberry Pi Sense Hat je dodana plošča za Raspberry Pi Sense Hat, 40-pinska glava od moškega do ženskega ter nekaj vijakov in distančnikov.

Preden lahko pritrdite ploščo Sense Hat na Raspberry Pi, morate 40-pinsko glavo priključiti na Sense Hat. Moške zatiče 40-pinske glave moški-ženski povežite s klobukom Sense, kot je prikazano na spodnjih slikah.

Računalniki z eno ploščo Raspberry Pi imajo 4 luknje, s katerimi lahko pritrdite dodatne plošče ali ohišje. Če želite pritrditi dodatno ploščo, na zadnji strani Raspberry Pi vstavite vijake, kot je prikazano na spodnjih slikah.

Nato na vijak priključite distančnik.

Ko dodate vse štiri vijake in distančnike, mora biti vaš Raspberry Pi videti tako, kot je prikazano na spodnji sliki.

Povežite kapo Raspberry Pi Sense Hat s 40-polno moško glavo GPIO na Raspberry Pi, kot je prikazano na spodnjih slikah.

OPOMBA: Bodite previdni, ko odklopite kapo Raspberry Pi Sense Hat iz 40-polne glave GPIO Raspberry Pi, da se izognete upogibanju nožic Raspberry Pi GPIO.

S štirimi preostalimi vijaki pritrdite kapo Raspberry Pi Sense Hat, kot je prikazano na spodnjih slikah.

Vklop Raspberry Pi

Zdaj, ko je Raspberry Pi Sense Hat povezan z Raspberry Pi, vstavite kartico microSD z OS Raspberry Pi v režo za kartice microSD na Raspberry Pi, priključite napajalni kabel na Raspberry Pi in ga vklopite.

Namestitev knjižnice Raspberry Pi Sense Hat Python

Za uporabo Raspberry Pi Sense Hat na Raspberry Pi, čut-klobuk Knjižnica Python mora biti nameščena v OS Raspberry Pi. The čut-klobuk knjižnica je na voljo v uradnem repozitoriju paketov OS Raspberry Pi.

Če želite namestiti Raspberry Pi čut-klobuk Knjižnica Python v OS Raspberry Pi, najprej posodobite predpomnilnik repozitorija paketov APT z naslednjim ukazom:

$ sudo apt posodobitev

Nato zaženite naslednji ukaz:

$ sudo apt namestite sense-hat -y

Namestitev knjižnice Python Micro Flask Micro Web Framework

Za izdelavo naše vremenske aplikacije bomo uporabili ogrodje Flask Python. Flask lahko namestite iz uradnega repozitorija paketov OS Raspberry Pi z naslednjim ukazom:

$ sudo apt namestite python3-flask -y

Ustvarjanje imenika projektov

Dobro je ustvariti projektni imenik za organizacijo projektnih datotek. Če želite ustvariti imenik projekta ~ / delo, uporabite naslednji ukaz:

$ mkdir ~ / delo

Ko je imenik projekta ustvarjen, se pomaknite do imenika projekta, kot sledi:

$ cd ~ / delo

Testiranje klobuka Raspberry Pi Sense

Če želite preizkusiti, ali Raspberry Pi Sense Hat deluje, lahko napišemo preprost testni skript Python. Ustvarite lahko nov Pythonov skript z imenom preskus.py z nano urejevalnik besedil, kot sledi:

$ nano test.py

V polje vnesite naslednjo kodo preskus.py mapa. Uvoz po vrstici 1 SenseHat Iz smisel_hat modul, vrstica 3 ustvari a SenseHat predmet in shrani referenco v smisel spremenljivka, vrstice 5-6 pa barvo vseh 8 × 8 LED nastavijo na rdečo. Ko končate, pritisnite + X čemur sledi Y in .

Lahko zaženete preskus.py Python skript z naslednjim ukazom:

$ python3 test.py

Matrica LED 8 × 8 naj sveti v rdeči barvi, kot je prikazano na spodnji sliki.

Če želite ugasniti LED lučke Sense Hat, zaženite jasno () brez barvne vrednosti v preskus.py Python skript, kot je prikazano na spodnjem posnetku zaslona, ​​in zaženite preskus.py Ponovno skript Python.

LED lučke Sense Hat bi morale biti zdaj izklopljene, kot je prikazano na spodnji sliki.

Če Sense Hat deluje pravilno, pojdite na naslednji razdelek.

Pridobivanje vremenskih podatkov iz Sense Hat

Podatke senzorjev lahko iz Sense Hat zelo enostavno pridobite z uporabo čut-klobuk Knjižnica Python. Če želite pridobiti podatke senzorjev iz Sense Hat, lahko ustvarite nov skript Python read_sensor_data.py kot sledi:

$ nano read_sensor_data.py

V polje vnesite naslednjo kodo read_sensor_data.py Datoteka Python.

iz sense_hat uvozi SenseHat
od časa uvoza spanja
smisel = SenseHat ()
smisel.jasno ()
medtem ko je True:
tempC = smisel.get_temperature ()
tempF = tempC * (9/5) + 32
tlak = občutek.get_pressure ()
vlaga = občutek.get_humidity ()
print ("Temperatura:%.2f ° C /%.2f ° F \ n "% (tempC, tempF))
print ("Tlak:%.2f mb \ n "% (tlak))
print ("Vlažnost:%.2f %% \ n \ n "% (vlažnost))
spanje (5)

Ko končate, pritisnite + X čemur sledi Y in .

V zgornji kodi vrstici 1 in 2 uvozita vse zahtevane knjižnice, vrstica 4 ustvari a SenseHat predmet in vrstica 5 ugasne vse lučke Sense Hat s pomočjo jasno () metoda. Zanka while v vrstici 7 je neskončna zanka, ki bo za vedno izvajala kodo v vrsticah 8-16.

V vrstici 8 je get_temperature () metoda se uporablja za branje podatkov o temperaturi (v stopinjah Celzija) s senzorja vlažnosti Sense Hat. V vrstici 9 se podatki o temperaturi pretvorijo iz stopinj Celzija v stopinje Fahrenheita. V vrstici 10 je get_pressure () metoda se uporablja za branje podatkov o zračnem tlaku (v milibarjih) s tlačnega senzorja Sense Hat. V vrstici 11 je get_humidity () metoda se uporablja za branje podatkov o vlažnosti (v%) s senzorja vlažnosti na Sense Hat.

Vrstice 13-15 se uporabljajo za tiskanje podatkov senzorja na konzolo, vrstica 16 pa 5 sekund, preden ponovi branje podatkov senzorja.

Lahko zaženete read_sensor_data.py Python skript, kot sledi:

$ python3 read_sensor_data.py

Ko se skript zažene, se podatki senzorja natisnejo na konzolo.

Zdaj, ko lahko beremo podatke senzorjev iz Sense Hat, pritisnite + C da ustavite program.

Ustvarjanje spletne aplikacije Weather Station

V tem razdelku vam bomo pokazali, kako uporabljati spletni okvir Python Flask za ustvarjanje vremenskega API-ja in vremenske aplikacije. Vremenska aplikacija bo dostopala do API-ja vremenskih podatkov in v realnem času prikazovala vremenske podatke. Vsa koda, obravnavana v tem poglavju, je na voljo na GitHubu pri shovon8 / raspberry-pi-sense-hat-weather-app.

Najprej ustvarite a strežnik.py Python skript v imeniku projekta, kot sledi:

$ nano strežnik.py

V polje vnesite naslednjo kodo strežnik.py Datoteka Python.

iz bučke uvoz Bučka
iz bučke za uvoz jsonify
iz bučke za uvoz render_template
iz bučke za uvoz url_for
iz sense_hat uvozi SenseHat
app = bučka (__ ime__)
app.config ['SEND_FILE_MAX_AGE_DEFAULT'] = 0
smisel = SenseHat ()
smisel.jasno ()
z aplikacijo.test_request_context ():
url_for ('statični', ime datoteke = 'slog.css ')
url_for ('statična', ime datoteke = 'app.js ')
@app.pot ('/ api')
def api ():
tempC = smisel.get_temperature ()
tempF = tempC * (9/5) + 32
tlak = občutek.get_pressure ()
tlakPsi = tlak * 0.0145038
tlak P = tlak * 100
vlaga = občutek.get_humidity ()
vrni jsonify (
"temperature": "C": tempC, "F": tempF,
"tlak": "mb": tlak, "hPa": tlak,
"psi": pressurePsi, "P": pressureP,
"vlaga": vlaga
)
@app.pot ('/')
def home ():
vrni render_template ('./ domov.html ')

Nato pritisnite + X čemur sledi Y in shraniti strežnik.py Python skript.

V zgornji kodi vrstice 1-5 uvozijo vse zahtevane knjižnice, vrstica 7 ustvari aplikacijo Flask, vrstica 11 ustvari objekt SenseHat, vrstica 12 pa ugasne vse LED lučke Sense Hat. Vrstica 8 onemogoči predpomnjenje v spletu za aplikacijo Flask. Ker je ta aplikacija lahka, predpomnjenja ni treba. Če želite spremeniti aplikacijo, bo onemogočeno spletno predpomnjenje olajšalo testiranje.

Vrstice 18-31 preberejo podatke senzorja iz Sense Hat in vrnejo podatke API v obliki JSON na zahtevo HTTP GET v / api končna točka spletnega strežnika. Črte 37-39 vrnejo domačo stran vremenske spletne aplikacije na / končna točka spletnega strežnika. Domača stran je upodobljena z domov.html datoteka, ki naj bo v predloge / imenik imenika projekta.

Vrstice 14-16 se uporabljajo za omogočanje dostopa do slog.css in app.js statične datoteke. Te datoteke bi morale biti v statično / imenik imenika projekta. The slog.css datoteka se uporablja za oblikovanje datoteke domov.html domačo stran in app.js datoteka se uporablja za zahtevo podatkov API od / api končno točko in posodobite vremenske podatke na domov.html strani vsakih 5 sekund.

Ustvari statično / in predloge / imenik v imeniku projekta, kot sledi:

$ mkdir -v static, predloge

Ustvariti domov.html v datoteki predloge / imenik, kot sledi:

$ nano predloge / domov.html

V polje vnesite naslednjo kodo domov.html mapa.





Vremenska postaja Raspberry Pi
href = "url_for ('statični', ime datoteke =" slog.css ")" />



Vremenska postaja Raspberry Pi



Temperatura




..


..




Pritisk




..


..




..


..




Vlažnost




..






Nato pritisnite + X čemur sledi Y in shraniti domov.html mapa.

Ustvariti slog.css v datoteki statično / imenik, kot sledi:

$ nano statični / slog.css

V polje vnesite naslednje kode slog.css mapa.

@import url ('https: // pisave.googleapis.com / css2?družina = Roboto & display = swap ');
*
oblazinjenje: 0;
marža: 0;
družina pisav: 'Roboto', sans-serif;

telo
ozadje: # 737373;

h1
zaslon: blok;
barva: # 79DC7B;
poravnava besedila: sredina;
teža pisave: 400;
ozadje: # 000;
oblazinjenje: 0.5em 0;

h2
zaslon: blok;
ozadje: # 000;
barva: #fff;
poravnava besedila: sredina;
teža pisave: 400;
velikost pisave: 1em;

.data-content
marža: 10 slikovnih pik;
obroba: 2px enobarvna črna;
polmer obrobe: 5 slikovnih pik;
barva ozadja: # 79DC7B;

.podatkovna vrstica
zaslon: flex;
smer upogiba: vrstica;

.podatkovna celica
širina: 100%;
višina: 80px;
zaslon: flex;
align-items: center;
justify-content: center;
teža pisave: krepko;
velikost pisave: 1.5em;
barva: # 006902;

.podatkovna celica: hover
ozadje: # FFE891;
barva: # AA8600;
kazalec: kazalec;

Nato pritisnite + X čemur sledi Y in shraniti slog.css mapa.

Ustvari app.js v datoteki statično / imenik, kot sledi:

$ nano static / app.js

V polje vnesite naslednjo kodo app.js mapa.

okno.addEventListener ('nalaganje', glavno);
funkcija main ()
funkcija getAPIData ()
var http = nov XMLHttpRequest ();
http.onreadystatechange = function ()
če (to.readyState === 4 && to.stanje === 200)
posodobitev (JSON.razčleni (to.responseText));


http.odprto ("GET", "/ api", true);
http.send ();

posodobitev funkcije (apiData)
var tempC = dokument.getElementById ("tempC");
var tempF = dokument.getElementById ("tempF");
var pressureMb = dokument.getElementById ("pressureMb");
var pressurePsi = dokument.getElementById ("pressurePsi");
var pressureHpa = dokument.getElementById ("pressureHpa");
var tlakP = dokument.getElementById ("pressureP");
var vlažnost = dokument.getElementById ("vlažnost");
tempC.innerHTML = parseFloat (apiData.temperatura.C).doFix (2) + "° C";
tempF.innerHTML = parseFloat (apiData.temperatura.F).doFix (2) + "° F";
tlakMb.innerHTML = parseFloat (apiData.pritisk.mb).do Fiksno (2) + "mb";
tlakPsi.innerHTML = parseFloat (apiData.pritisk.psi).do Fiksno (2) + "psi";
tlakHpa.innerHTML = parseFloat (apiData.pritisk.hPa).do Fiksno (2) + "hPa";
tlakP.innerHTML = parseFloat (apiData.pritisk.P).do Fiksno (2) + "P";
vlažnost.innerHTML = parseFloat (apiData.vlažnost).do Fiksno (2) + "%";

funkcija app ()
okno.setInterval (function ()
getAPIData ();
, 5000);

app ();

Nato pritisnite + X čemur sledi Y in shraniti app.js mapa.

Tukaj vrstica 1 vodi glavni () ko se spletna stran naloži. V glavni () funkcija, getAPIData () funkcija s pomočjo AJAX pridobi podatke vremenskega API-ja in pokliče nadgradnja() funkcijo (v vrstici 10), ko so podatki uspešno pridobljeni. The nadgradnja() funkcija posodobi element spletne strani z uporabo podatkov API.

V vrstici 20 je dokument.getElementById () metoda se uporablja za pridobitev sklica na element spletne strani z id tempC. Vrstica 28 se uporablja za nadomestitev vsebine elementa spletne strani, ki ima id tempC s temperaturo (v Celzijah) iz API. Na enak način se vsebina vseh spletnih elementov (vrstice 21-26) nadomesti z njihovimi podatki API.

V app () funkcija, getAPIData () se pokliče vsakih 5 sekund (5000 milisekund), da se vremenski podatki v aplikaciji za vreme posodabljajo. Končno, v vrstici 46, app () funkcija se izvede.

Če želite preizkusiti spletno aplikacijo, vnesite naslednji ukaz:

$ FLASK_APP = strežnik.py bučka teče --host = 0.0.0.0

Vremenska aplikacija naj deluje na pristanišču 5000 (privzeto).

Če želite preizkusiti, ali Weather API deluje, zaženite naslednji ukaz:

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

Kot lahko vidite, se podatki Weather API natisnejo na konzolo. Zato API deluje.

Če želite preizkusiti aplikacijo Vreme, v spletnem brskalniku Chromium obiščite http: // localhost: 5000. Aplikacijo Vreme je treba naložiti v spletni brskalnik, vendar sprva ne bi smeli biti prikazani vremenski podatki.

Po nekaj sekundah mora vremenska aplikacija končati pridobivanje vremenskih podatkov iz API-ja in jih prikazati.

Kadar koli lahko pritisnete + C da ustavite spletni strežnik.

Ustvarjanje storitve Systemd za spletno aplikacijo Weather

V tem razdelku vam bomo pokazali, kako ustvarite sistemsko datoteko storitve za vremensko aplikacijo, tako da se bo samodejno zagnala ob zagonu.

Najprej ustvarite a vremenska postaja.storitev datoteko v imeniku vašega projekta, kot sledi:

$ nano vremenska postaja.storitev

V vrstico vnesite naslednje vrstice kode vremenska postaja.storitev mapa.

[Enota]
Opis = Spletna aplikacija za vremensko postajo Raspberry Pi, ki uporablja klobuk Raspberry Pi Sense
Po = omrežje.cilj
[Storitev]
WorkingDirectory = / home / pi / work
Okolje = FLASK_APP = strežnik.py
Okolje = FLASK_ENV = proizvodnja
ExecStart = / usr / bin / bučka run --host = 0.0.0.0
StandardOutput = podeduj
StandardError = podeduj
Ponovni zagon = vedno
Uporabnik = pi
[Namesti]
WantedBy = več uporabnikov.cilj

Nato pritisnite + X čemur sledi Y in shraniti vremenska postaja.storitev mapa.

Kopirajte vremenska postaja.storitev datoteko / etc / systemd / system / imenik z naslednjim ukazom:

$ sudo cp -v vremenska postaja.service / etc / systemd / system /

Ponovno naložite sistemske demone, da bodo spremembe začele veljati na naslednji način:

$ sudo systemctl daemon-reload

The vremenska postaja storitev systemd bi morala biti trenutno neaktivna, kot je prikazano na spodnjem posnetku zaslona.

Vremenska postaja stanja $ sudo systemctl.storitev

Zaženite vremenska postaja storitev z naslednjim ukazom:

$ sudo systemctl začni vremensko postajo.storitev

Kot lahko vidite, vremenska postaja storitev se zdaj izvaja.

Vremenska postaja stanja $ sudo systemctl.storitev

Zdaj, ko vremenska postaja storitev deluje, jo lahko dodate v zagon sistema OS Raspberry Pi z naslednjim ukazom:

$ sudo systemctl omogoči vremensko postajo.storitev

Znova zaženite Raspberry Pi z naslednjim ukazom:

$ sudo znova zaženite

Ko se vaš Raspberry Pi zažene, vremenska postaja storitev naj se izvaja, kot je prikazano na spodnjem posnetku zaslona.

Vremenska postaja stanja $ sudo systemctl.storitev

Dostop do aplikacije Vreme iz drugih naprav

Če želite dostopati do vremenske aplikacije iz drugih naprav v domačem omrežju, morate poznati naslov IP vašega Raspberry Pi. Naslov IP Raspberry Pi 4 najdete v spletnem vmesniku za upravljanje domačega usmerjevalnika. V našem primeru je naslov IP 192.168.0.103, vendar bo ta naslov za vas drugačen, zato v vseh nadaljnjih korakih poskrbite, da boste ta naslov zamenjali z vašim.

Če imate dostop do konzole Raspberry Pi, lahko zaženete naslednji ukaz, da poiščete tudi naslov IP.

$ hostname -I

Ko poznate naslov IP vašega Raspberry Pi, lahko do njega dostopate iz katere koli naprave v domačem omrežju. Kot je prikazano na spodnjem posnetku zaslona, ​​smo do vremenske aplikacije dostopali s pametnega telefona Android.

Zaključek

V tem članku smo vam pokazali, kako uporabiti Raspberry Pi Sense Hat za izdelavo vremenske postaje Raspberry Pi. Uporabili smo čut-klobuk Knjižnica Python za pridobivanje vremenskih podatkov iz Raspberry Pi Sense Hat. Nato smo z mikrookvirjem Flask Python ustvarili vremenski API in spletno aplikacijo. Spletna aplikacija vsakih 5 sekund pridobi vremenske podatke iz vremenskega API-ja, da bo spletna aplikacija na tekočem z najnovejšimi vremenskimi podatki.

Odprtokodna vrata komercialnih igralnih sistemov
Brezplačne, odprtokodne in medplatformacijske igre, ki jih lahko uporabite za igranje starih, pa tudi nekaterih dokaj nedavnih naslovov iger. V tem čl...
Najboljše igre ukazne vrstice za Linux
Ukazna vrstica ni le vaš največji zaveznik pri uporabi Linuxa - lahko je tudi vir zabave, saj jo lahko uporabljate za igranje številnih zabavnih iger,...
Najboljše aplikacije za preslikavo gamepadov za Linux
Če želite igre na Linuxu igrati z igralno ploščico namesto s tipičnim sistemom za vnos tipkovnice in miške, je za vas na voljo nekaj uporabnih aplikac...