Raspberry Pi

Postavte si vlastní meteorologickou stanici Raspberry Pi

Postavte si vlastní meteorologickou stanici Raspberry Pi
Raspberry Pi Sense Hat je přídavná deska, kterou lze použít s jednodeskovými počítači Raspberry Pi. Klobouk Raspberry Pi Sense má 8 × 8 LED displej a 5tlačítkový joystick a je vybaven následujícími senzory:

  1. Gyroskop
  2. Akcelerometr
  3. Magnetometr
  4. Teplota
  5. Barometrický tlak
  6. Vlhkost vzduchu

V tomto článku vám ukážu, jak vytvořit webovou aplikaci meteorologické stanice založenou na Python API pomocí teplota, barometrický tlak, a vlhkost vzduchu senzory klobouku Raspberry Pi Sense Hat. Chcete-li pokračovat v tomto článku, budete potřebovat následující:

  1. Raspberry Pi 3 nebo Raspberry Pi 4 se síťovým připojením.
  2. Modul Raspberry Pi Sense Hat.
  3. Napájecí adaptér micro-USB (Raspberry Pi 3) nebo USB Type-C (Raspberry Pi 4).
  4. 16 GB nebo 32 GB microSD karta s Raspberry Pi OS.
  5. Notebook nebo stolní počítač pro přístup ke vzdálené ploše VNC nebo SSH pro Raspberry Pi.

POZNÁMKA: V tomto článku se k Raspberry Pi připojíme vzdáleně přes VNC nebo SSH pomocí bezhlavého nastavení Raspberry Pi. Pokud nechcete ke svému Raspberry Pi přistupovat vzdáleně přes SSH nebo VNC, budete muset k vašemu Raspberry Pi připojit monitor, klávesnici a myš.

Chcete-li se dozvědět, jak flashovat obraz Raspberry Pi OS na kartu microSD, podívejte se na Jak nainstalovat a používat Raspberry Pi Imager. Pokud potřebujete pomoc s instalací Raspberry Pi OS na Raspberry Pi, přečtěte si Jak nainstalovat Raspberry Pi OS na Raspberry Pi 4. Pokud potřebujete pomoc s bezhlavým nastavením Raspberry Pi, podívejte se, jak nainstalovat a konfigurovat OS Raspberry Pi na Raspberry Pi 4 bez externího monitoru.

Připojení Raspberry Pi Sense Hat k Raspberry Pi

Sada Raspberry Pi Sense Hat je dodávána s přídavnou deskou Raspberry Pi Sense Hat, 40kolíkovou zástrčkou male-to-female a několika šrouby a distančními podložkami.

Než budete moci připojit desku Sense Hat k Raspberry Pi, musíte k Sense Hat připojit 40kolíkovou záhlaví. Připojte kolíky 40pinové zástrčky muž-žena k klobouku Sense Hat, jak je znázorněno na obrázcích níže.

Jednodeskové počítače Raspberry Pi mají 4 otvory, které lze použít k připojení přídavných desek nebo pouzdra. Chcete-li připojit přídavnou desku, zasuňte šrouby ze zadní strany Raspberry Pi, jak je znázorněno na obrázcích níže.

Poté připojte k šroubu distanční vložku.

Jakmile přidáte všechny čtyři šrouby a distanční vložky, měl by váš Raspberry Pi vypadat jako na obrázku níže.

Připojte Raspberry Pi Sense Hat k 40kolíkové zástrčce GPIO male Raspberry Pi, jak je znázorněno na obrázcích níže.

POZNÁMKA: Při odpojování Raspberry Pi Sense Hat od 40pinové GPIO hlavičky Raspberry Pi buďte opatrní, aby nedošlo k ohnutí pinů GPIO Raspberry Pi.

Pomocí čtyř zbývajících šroubů připevněte Raspberry Pi Sense Hat, jak je znázorněno na obrázcích níže.

Zapnutí Raspberry Pi

Nyní, když je Raspberry Pi Sense Hat připojen k Raspberry Pi, vložte kartu microSD s Raspberry Pi OS do slotu pro kartu microSD na Raspberry Pi, připojte napájecí kabel k Raspberry Pi a zapněte jej.

Instalace pythonovské knihovny Raspberry Pi Sense Hat

Chcete-li použít Raspberry Pi Sense Hat na Raspberry Pi, sense-hat V systému Raspberry Pi musí být nainstalována knihovna Pythonu. The sense-hat Knihovna je k dispozici v oficiálním úložišti balíků operačního systému Raspberry Pi.

Instalace Raspberry Pi sense-hat Knihovna Pythonu v systému Raspberry Pi OS nejprve aktualizujte mezipaměť úložiště balíčků APT pomocí následujícího příkazu:

$ sudo apt aktualizace

Potom spusťte následující příkaz:

$ sudo apt nainstalovat sense-hat -y

Instalace knihovny Flask Micro Web Framework Python

K vytvoření naší aplikace počasí použijeme framework Flask Python. Flask můžete nainstalovat z oficiálního úložiště balíčků Raspberry Pi OS pomocí následujícího příkazu:

$ sudo apt install python3-flask -y

Vytvoření adresáře projektu

Je dobré vytvořit adresář projektu a uspořádat soubory projektu. Chcete-li vytvořit adresář projektu ~ / práce, použijte následující příkaz:

$ mkdir ~ / práce

Po vytvoření adresáře projektu přejděte do adresáře projektu následujícím způsobem:

$ cd ~ / práce

Testování klobouku Raspberry Pi Sense

Chcete-li otestovat, zda klobouk Raspberry Pi Sense funguje, můžeme napsat jednoduchý testovací skript Pythonu. Můžete vytvořit nový skript Pythonu s názvem test.py s nano textový editor takto:

$ nano test.py

Zadejte následující kód do test.py soubor. Řádek 1 importy SenseHat z sense_hat modul, řádek 3 vytvoří a SenseHat objekt a uloží odkaz do smysl proměnná a řádky 5-6 nastaví barvu všech LED 8 × 8 na červenou. Po dokončení stiskněte + X následován Y a .

Můžete spustit test.py Skript v Pythonu s následujícím příkazem:

$ python3 test.py

Matice LED 8 × 8 by měla svítit červeně, jak je znázorněno na obrázku níže.

Chcete-li vypnout LED diody Sense Hat, spusťte Průhledná() metoda bez jakékoli barevné hodnoty v test.py Skript Pythonu, jak je znázorněno na následujícím obrázku, a spusťte test.py Znovu skript v Pythonu.

LED diody Sense Hat by nyní měly být vypnuty, jak je znázorněno na obrázku níže.

Pokud Sense Hat funguje správně, přejděte k další části.

Získávání údajů o počasí ze Sense Hat

Data senzorů ze Sense Hat můžete snadno získat pomocí sense-hat Knihovna Pythonu. Chcete-li načíst data senzoru ze Sense Hat, můžete vytvořit nový skript Pythonu read_sensor_data.py jak následuje:

$ nano read_sensor_data.py

Zadejte následující kód do read_sensor_data.py Soubor Python.

ze sense_hat importu SenseHat
od času importu spánku
sense = SenseHat ()
smysl.Průhledná()
zatímco je pravda:
tempC = smysl.get_temperature ()
tempF = tempC * (9/5) + 32
tlak = smysl.get_pressure ()
vlhkost = smysl.get_humidity ()
print ("Teplota:%.2f ° C /%.2f ° F \ n "% (tempC, tempF))
tisk ("Tlak:%.2f mb \ n "% (tlak))
print ("Vlhkost:%.2f %% \ n \ n "% (vlhkost))
spánek (5)

Po dokončení stiskněte + X následován Y a .

V kódu výše řádky 1 a 2 importují všechny požadované knihovny, řádek 4 vytvoří a SenseHat objekt a řádek 5 vypne všechny LED diody Sense Hat pomocí Průhledná() metoda. Smyčka while v řádku 7 je nekonečná smyčka, která spustí kód v řádcích 8-16 navždy.

V řádku 8 je get_temperature () Metoda se používá ke čtení údajů o teplotě (ve stupních Celsia) ze snímače vlhkosti Sense Hat. Na řádku 9 se údaje o teplotě převedou ze stupňů Celsia na stupně Fahrenheita. V řádku 10 je get_pressure () metoda se používá ke čtení údajů o tlaku vzduchu (v milibarech) z tlakového senzoru Sense Hat. V řádku 11 je get_humidity () Metoda se používá ke čtení údajů o vlhkosti (v%) ze snímače vlhkosti Sense Hat.

Řádky 13-15 se používají k tisku dat senzoru na konzolu a řádek 16 se používá k čekání po dobu 5 sekund před opětovným načtením dat senzoru.

Můžete spustit read_sensor_data.py Skript v Pythonu takto:

$ python3 read_sensor_data.py

Jakmile je skript spuštěn, data senzoru se vytisknou do konzoly.

Nyní, když můžeme číst data ze senzoru ze Sense Hat, stiskněte + C zastavit program.

Vytvoření webové aplikace meteorologické stanice

V této části si ukážeme, jak pomocí webového rozhraní Python Flask vytvořit API počasí a aplikaci počasí. Aplikace pro počasí přistupuje k API pro údaje o počasí a zobrazuje data o počasí v reálném čase. Veškerý kód popsaný v této části je k dispozici na GitHubu v aplikaci shovon8 / raspberry-pi-sense-hat-weather-app.

Nejprve vytvořte a serveru.py Skript Pythonu v adresáři projektu takto:

$ nano server.py

Zadejte následující kód do serveru.py Soubor Python.

z baňky na dovoz baňky
z baňkového importu jsonify
z baňky import render_template
z baňkového importu url_for
ze sense_hat importu SenseHat
aplikace = Baňka (__ name__)
aplikace.config ['SEND_FILE_MAX_AGE_DEFAULT'] = 0
sense = SenseHat ()
smysl.Průhledná()
s aplikací.test_request_context ():
url_for ('static', filename = 'style.css ')
url_for ('static', filename = 'aplikace.js ')
@aplikace.trasa ('/ api')
def api ():
tempC = smysl.get_temperature ()
tempF = tempC * (9/5) + 32
tlak = smysl.get_pressure ()
tlak Psi = tlak * 0.0145038
tlak P = tlak * 100
vlhkost = smysl.get_humidity ()
vrátit jsonify (
"temperature": "C": tempC, "F": tempF,
"tlak": "mb": tlak, "hPa": tlak,
"psi": tlakPsi, "P": tlakP,
"vlhkost": vlhkost
)
@aplikace.trasa('/')
def home ():
vrátit render_template ('./Domov.html ')

Poté stiskněte + X následován Y a uložit serveru.py Skript v Pythonu.

V kódu výše řádky 1-5 importují všechny požadované knihovny, řádek 7 vytvoří aplikaci Flask, řádek 11 vytvoří objekt SenseHat a řádek 12 vypne všechny LED diody Sense Hat. Řádek 8 zakazuje ukládání do mezipaměti webu pro aplikaci Flask. Protože je tato aplikace lehká, není nutné ukládat do mezipaměti. Pokud chcete aplikaci upravit, deaktivace ukládání do mezipaměti webu výrazně usnadní testování.

Řádky 18-31 načtou data senzoru ze Sense Hat a vrátí data API ve formátu JSON na požadavek HTTP GET v / api koncový bod webového serveru. Řádky 37-39 vrací domovskou stránku webové aplikace o počasí na web / koncový bod webového serveru. Domovská stránka je vykreslena z Domov.html soubor, který by měl být v souboru šablony / adresář adresáře projektu.

Řádky 14-16 slouží k umožnění přístupu k styl.css a aplikace.js statické soubory. Tyto soubory by měly být v souboru statický/ adresář adresáře projektu. The styl.css soubor se používá ke stylování souboru Domov.html domovská stránka a aplikace.js soubor se používá k vyžádání dat API z / api koncový bod a aktualizovat údaje o počasí na internetu Domov.html stránku každých 5 sekund.

Vytvořte statický/ a šablony / adresář v adresáři projektu takto:

$ mkdir -v statický, šablony

Vytvořit Domov.html soubor v šablony / adresář takto:

$ nano šablony / domov.html

Zadejte následující kód do Domov.html soubor.





Meteorologická stanice Raspberry Pi
href = "url_for ('static', filename =" style.css ")" />



Meteorologická stanice Raspberry Pi



Teplota












Tlak




















Vlhkost vzduchu











Poté stiskněte + X následován Y a uložit Domov.html soubor.

Vytvořit styl.css soubor v statický/ adresář takto:

$ nano statický / styl.css

Zadejte následující kódy do styl.css soubor.

@import url ('https: // fonty.googleapis.com / css2?family = Roboto & display = swap ');
*
výplň: 0;
okraj: 0;
rodina fontů: 'Roboto', sans-serif;

tělo
pozadí: # 737373;

h1
displej: blok;
barva: # 79DC7B;
zarovnání textu: na střed;
váha písma: 400;
pozadí: # 000;
polstrování: 0.5em 0;

h2
displej: blok;
pozadí: # 000;
barva: #fff;
zarovnání textu: na střed;
váha písma: 400;
velikost písma: 1em;

.datový obsah
okraj: 10px;
ohraničení: 2px plná černá;
poloměr ohraničení: 5px;
barva pozadí: # 79DC7B;

.datový řádek
displej: flex;
směr flexu: řádek;

.datová buňka
šířka: 100%;
výška: 80px;
displej: flex;
align-items: center;
justify-content: center;
váha písma: tučné;
velikost písma: 1.5em;
barva: # 006902;

.datová buňka: vznášet se
pozadí: # FFE891;
barva: # AA8600;
kurzor: ukazatel;

Poté stiskněte + X následován Y a uložit styl.css soubor.

Vytvořit aplikace.js soubor v statický/ adresář takto:

$ nano statický / aplikace.js

Zadejte následující kód do aplikace.js soubor.

okno.addEventListener ('load', main);
funkce main ()
funkce getAPIData ()
var http = nový XMLHttpRequest ();
http.onreadystatechange = funkce ()
Pokud tohle.readyState === 4 && toto.stav === 200)
aktualizace (JSON.analyzovat (toto.responseText));


http.open ("GET", "/ api", true);
http.poslat();

aktualizace funkce (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 ("tlakHpa");
var pressureP = dokument.getElementById ("tlakP");
var vlhkost = dokument.getElementById ("vlhkost");
tepl.innerHTML = parseFloat (apiData.teplota.C).toFixed (2) + "° C";
tempF.innerHTML = parseFloat (apiData.teplota.F).toFixed (2) + "° F";
tlakMb.innerHTML = parseFloat (apiData.tlak.mb).toFixed (2) + "mb";
tlak Psi.innerHTML = parseFloat (apiData.tlak.psi).toFixed (2) + "psi";
tlak Hpa.innerHTML = parseFloat (apiData.tlak.hPa).toFixed (2) + "hPa";
tlak P.innerHTML = parseFloat (apiData.tlak.P).toFixed (2) + "P";
vlhkost vzduchu.innerHTML = parseFloat (apiData.vlhkost vzduchu).toFixed (2) + "%";

funkční aplikace ()
okno.setInterval (funkce ()
getAPIData ();
, 5 000);

aplikace();

Poté stiskněte + X následován Y a uložit aplikace.js soubor.

Tady řádek 1 provozuje hlavní() funkce po dokončení načítání webové stránky. V hlavní() funkce, getAPIData () Funkce načte data API počasí pomocí AJAX a zavolá Aktualizace() funkce (na řádku 10), jakmile byla data úspěšně načtena. The Aktualizace() funkce aktualizuje prvek webové stránky pomocí dat API.

V řádku 20 je dokument.getElementById () metoda se používá k získání odkazu na prvek webové stránky s id tepl. Řádek 28 se používá k nahrazení obsahu prvku webové stránky, který má ID tepl s teplotou (ve stupních Celsia) z API. Stejným způsobem je obsah všech webových prvků (řádky 21-26) nahrazen příslušnými daty API.

V aplikace() funkce, getAPIData () je voláno každých 5 sekund (5 000 milisekund), aby byla v aplikaci počasí aktuální data o počasí. Nakonec v řádku 46 aplikace() funkce je spuštěna.

Chcete-li otestovat webovou aplikaci, zadejte následující příkaz:

$ FLASK_APP = server.py baňka run --host = 0.0.0.0

Aplikace pro počasí by měla běžet na portu 5000 (ve výchozím nastavení).

Chcete-li otestovat, zda Weather API funguje, spusťte následující příkaz:

$ lokny http: // localhost: 5000 / api | json_pp

Jak vidíte, data Weather API se tisknou do konzoly. Proto API funguje.

Chcete-li otestovat aplikaci Počasí, navštivte webový prohlížeč Chromium na adrese http: // localhost: 5000. Aplikace Počasí by měla být načtena do webového prohlížeče, ale nejprve by se neměla zobrazovat žádná data o počasí.

Po několika sekundách by aplikace pro počasí měla dokončit načítání dat o počasí z API a zobrazit je.

Kdykoli můžete stisknout + C zastavit webový server.

Vytváření služby Systemd pro webovou aplikaci Počasí

V této části vám ukážeme, jak vytvořit soubor služby systemd pro aplikaci počasí tak, aby se automaticky spustila při spuštění.

Nejprve vytvořte a meteorologická stanice.servis soubor v adresáři projektu takto:

$ nano meteorologická stanice.servis

Do řádku zadejte následující řádky kódu meteorologická stanice.servis soubor.

[Jednotka]
Popis = Webová aplikace meteorologické stanice Raspberry Pi pomocí klobouku Raspberry Pi Sense Hat
After = síť.cílová
[Servis]
WorkingDirectory = / home / pi / work
Prostředí = FLASK_APP = server.py
Prostředí = FLASK_ENV = produkce
ExecStart = / usr / bin / flask run --host = 0.0.0.0
StandardOutput = dědit
StandardError = dědit
Restartovat = vždy
Uživatel = pi
[Nainstalujte]
WantedBy = více uživatelů.cílová

Poté stiskněte + X následován Y a uložit meteorologická stanice.servis soubor.

Zkopírujte meteorologická stanice.servis soubor do / etc / systemd / system / adresář s následujícím příkazem:

$ sudo cp -v meteorologická stanice.služba / etc / systemd / system /

Znovu načtěte systémové démony, aby se změny projevily následujícím způsobem:

$ sudo systemctl daemon-reload

The meteorologická stanice služba systemd by měla být v tuto chvíli neaktivní, jak je znázorněno na následujícím obrázku.

$ sudo systemctl status meteorologická stanice.servis

Spusťte meteorologická stanice služba s následujícím příkazem:

$ sudo systemctl start meteorologická stanice.servis

Jak vidíte, meteorologická stanice služba nyní běží.

$ sudo systemctl status meteorologická stanice.servis

Nyní, když meteorologická stanice služba funguje, můžete ji přidat do spuštění systému Raspberry Pi OS pomocí následujícího příkazu:

$ sudo systemctl povolit meteorologickou stanici.servis

Restartujte Raspberry Pi pomocí následujícího příkazu:

$ sudo restart

Jakmile se vaše Raspberry Pi spustí, meteorologická stanice služba by měla být spuštěna, jak je znázorněno na následujícím obrázku.

$ sudo systemctl status meteorologická stanice.servis

Přístup k aplikaci Počasí z jiných zařízení

Chcete-li získat přístup k aplikaci o počasí z jiných zařízení ve vaší domácí síti, potřebujete znát IP adresu vašeho Raspberry Pi. IP adresu vašeho Raspberry Pi 4 najdete z webového rozhraní pro správu vašeho domácího routeru. V našem případě je IP adresa 192.168.0.103, ale tato adresa bude pro vás jiná, takže ve všech následujících krocích nezapomeňte tuto adresu nahradit vaší.

Pokud máte přístup ke konzole Raspberry Pi, můžete spustit následující příkaz a také vyhledat adresu IP.

$ hostname -I

Jakmile znáte IP adresu vašeho Raspberry Pi, můžete k ní přistupovat z jakéhokoli zařízení v domácí síti. Jak je znázorněno na následujícím obrázku, přistoupili jsme k aplikaci počasí ze smartphonu se systémem Android.

Závěr

V tomto článku jsme vám ukázali, jak pomocí Raspberry Pi Sense Hat postavit meteorologickou stanici Raspberry Pi. Použili jsme sense-hat Knihovna Pythonu pro extrakci dat o počasí z Raspberry Pi Sense Hat. Poté jsme pomocí mikro webového rozhraní Flask Python vytvořili počasí API a webovou aplikaci. Webová aplikace získává údaje o počasí z API počasí každých 5 sekund, aby udržovala webovou aplikaci aktuální s nejnovějšími údaji o počasí.

Ovládejte a spravujte pohyb myši mezi více monitory ve Windows 10
Správce myší se dvěma displeji umožňuje ovládat a konfigurovat pohyb myši mezi více monitory zpomalením jeho pohybů poblíž hranice. Windows 10/8 vám u...
WinMouse vám umožňuje přizpůsobit a vylepšit pohyb ukazatele myši na PC s Windows
Chcete-li vylepšit výchozí funkce ukazatele myši, použijte freeware WinMouse. Přidává další funkce, které vám pomohou vytěžit ze své skromné ​​myši ma...
V systému Windows 10 nefunguje levé tlačítko myši
Pokud používáte speciální myš s notebookem nebo stolním počítačem, ale levé tlačítko myši nefunguje ve Windows 10/8/7 z nějakého důvodu uvádíme několi...