Raspberry Pi

Készítse el saját Raspberry Pi időjárási állomását

Készítse el saját Raspberry Pi időjárási állomását
A Raspberry Pi Sense Hat egy kiegészítő fedélzet, amelyet a Raspberry Pi egykártyás számítógépekkel lehet használni. A Raspberry Pi Sense Hat 8 × 8 LED kijelzővel és 5 gombos joystickkal rendelkezik, és a következő érzékelőkkel van felszerelve:

  1. Giroszkóp
  2. Gyorsulásmérő
  3. Magnetométer
  4. Hőfok
  5. Légköri nyomás
  6. páratartalom

Ebben a cikkben bemutatom, hogyan hozhat létre Python API alapú meteorológiai állomás webalkalmazást a hőfok, légköri nyomás, és páratartalom a Raspberry Pi Sense Hat érzékelői. A cikk folytatásához a következőkre lesz szüksége:

  1. Raspberry Pi 3 vagy Raspberry Pi 4 hálózati kapcsolattal.
  2. Raspberry Pi Sense Hat modul.
  3. Mikro-USB (Raspberry Pi 3) vagy C típusú USB (Raspberry Pi 4) hálózati adapter.
  4. 16 vagy 32 GB-os microSD kártya Raspberry Pi operációs rendszerrel.
  5. Laptop vagy asztali számítógép VNC távoli asztali vagy SSH hozzáféréshez a Raspberry Pi-hez.

JEGYZET: Ebben a cikkben a Raspberry Pi-hez távolról csatlakozunk VNC vagy SSH segítségével, a Raspberry Pi fej nélküli beállításával. Ha nem szeretné távolról elérni a Raspberry Pi-t SSH vagy VNC kapcsolaton keresztül, akkor monitort, billentyűzetet és egeret kell csatlakoztatnia a Raspberry Pi készülékhez.

Ha meg szeretné tudni, hogyan lehet a Raspberry Pi operációs rendszert futtatni egy microSD kártyára, olvassa el a Raspberry Pi Imager telepítése és használata című cikket. Ha segítségre van szüksége a Raspberry Pi OS telepítésével a Raspberry Pi készülékre, olvassa el a Raspberry Pi OS telepítése a Raspberry Pi 4-re című cikket. Ha segítségre van szüksége a Raspberry Pi fej nélküli beállításához, olvassa el a Raspberry Pi OS telepítésének és konfigurálásának módját a Raspberry Pi 4-en külső monitor nélkül.

A Raspberry Pi Sense Hat és a Raspberry Pi összekapcsolása

A Raspberry Pi Sense Hat készlet a Raspberry Pi Sense Hat kiegészítő táblával, egy 40 tűs férfi-nő fejléccel, valamint néhány csavarral és távtartóval rendelkezik.

Mielőtt rögzítheti a Sense Hat táblát a Raspberry Pi-hez, csatlakoztatnia kell a 40 tűs fejlécet a Sense Hat-hoz. Csatlakoztassa a 40 tűs férfi-női fejléc hímcsapjait az Sense Hat-hez az alábbi képek szerint.

A Raspberry Pi egykártyás számítógépek 4 lyukkal rendelkeznek, amelyekkel kiegészítő táblák vagy tokok rögzíthetők. A kiegészítő kártya rögzítéséhez helyezzen be csavarokat a Raspberry Pi hátuljából, az alábbi képek szerint.

Ezután csatlakoztasson egy távtartót a csavarhoz.

Miután hozzáadta mind a négy csavart és távtartót, a Raspberry Pi-nek úgy kell kinéznie, mint az alábbi képen látható.

Csatlakoztassa a Raspberry Pi Sense Hatot a Raspberry Pi 40 tűs GPIO dugófejéhez, az alábbi képek szerint.

JEGYZET: Vigyázzon, amikor leválasztja a Raspberry Pi Sense Hat-ot a Raspberry Pi 40 tűs GPIO fejlécéről, hogy elkerülje a Raspberry Pi GPIO csapjainak hajlítását.

A maradék négy csavarral rögzítse a Raspberry Pi Sense kalapot, az alábbi képek szerint.

A Raspberry Pi bekapcsolása

Most, hogy a Raspberry Pi Sense Hat csatlakoztatva van a Raspberry Pi-hez, helyezze be a Raspberry Pi OS operációs rendszerrel ellátott microSD-kártyát a Raspberry Pi microSD-kártyahelyébe, csatlakoztassa a tápkábelt a Raspberry Pi-hez és kapcsolja be.

A Raspberry Pi Sense Hat Python könyvtár telepítése

A Raspberry Pi Sense Hat használatához a Raspberry Pi - n a érzék-kalap A Python könyvtárat telepíteni kell a Raspberry Pi operációs rendszerre. A érzék-kalap könyvtár elérhető a Raspberry Pi OS hivatalos csomagtárában.

A Raspberry Pi telepítéséhez érzék-kalap A Raspberry Pi operációs rendszer Python könyvtárában először frissítse az APT csomag-tárház gyorsítótárát a következő paranccsal:

$ sudo apt frissítés

Ezután futtassa a következő parancsot:

$ sudo apt install sense-hat -y

A Flask Micro Web Framework Python könyvtár telepítése

Időjárási alkalmazásunk létrehozásához a Flask Python keretrendszert fogjuk használni. Telepítheti a Lombikot a Raspberry Pi OS hivatalos csomagtárából a következő paranccsal:

$ sudo apt install python3-flask -y

Projektkönyvtár létrehozása

Célszerű létrehozni egy projekt könyvtárat a projekt fájlok rendezéséhez. Projekt könyvtár létrehozása ~ / munka, használja a következő parancsot:

$ mkdir ~ / work

A projektkönyvtár létrehozása után lépjen a projektkönyvtárba az alábbiak szerint:

$ cd ~ / munka

A Raspberry Pi Sense Hat tesztelése

Annak tesztelésére, hogy a Raspberry Pi Sense Hat működik-e, írhatunk egy egyszerű teszt Python parancsfájlt. Létrehozhat egy új Python parancsfájlt teszt.py a ... val nano szövegszerkesztő az alábbiak szerint:

$ nano teszt.py

Írja be a következő kódot a teszt.py fájl. Az 1. sor importálja SenseHat tól sense_hat modul, a 3. sor létrehozza a SenseHat objektumot és referenciát tárol a érzék változó, és az 5-6-os vonalak az összes 8 × 8 LED színét pirosra állítják. Ha végzett, nyomja meg a gombot + x utána Y és .

Futtathatja a teszt.py Python szkript a következő paranccsal:

$ python3 teszt.py

A 8 × 8 LED-es mátrixnak piros színben kell világítania, az alábbi képen látható módon.

A Sense Hat LED-ek kikapcsolásához futtassa a egyértelmű() módszer anélkül, hogy a teszt.py Python szkript, amint az az alábbi képernyőképen látható, és futtassa a teszt.py Ismét Python szkript.

A Sense Hat LED-jét most ki kell kapcsolni, amint az az alábbi képen látható.

Ha a Sense Hat megfelelően működik, akkor ugorjon a következő szakaszra.

Időjárási adatok megszerzése a Sense Hat alkalmazásból

A Sense Hat segítségével nagyon egyszerűen megszerezheti az érzékelő adatait a érzék-kalap Python könyvtár. Az érzékelőadatok lekéréséhez a Sense Hat-ból létrehozhat egy új Python parancsfájlt read_sensor_data.py alábbiak szerint:

$ nano read_sensor_data.py

Írja be a következő kódot a read_sensor_data.py Python fájl.

a sense_hat importból a SenseHat
az időből importál
sense = SenseHat ()
érzék.egyértelmű()
míg True:
tempC = érzék.get_temperature ()
tempF = tempC * (9/5) + 32
nyomás = érzék.get_pressure ()
páratartalom = érzék.get_humidity ()
print ("Hőmérséklet:%.2f ° C /%.2f ° F \ n "% (tempC, tempF))
print ("Nyomás:%.2f mb \ n "% (nyomás))
print ("Páratartalom:%.2f %% \ n \ n "% (páratartalom))
alvás (5)

Ha végzett, nyomja meg a gombot + x utána Y és .

A fenti kódban az 1. és 2. sor importálja az összes szükséges könyvtárat, a 4. sor létrehozza a SenseHat objektumot, és az 5. sor kikapcsolja a Sense Hat összes LED-jét a egyértelmű() módszer. A while hurok a 7. sorban egy végtelen hurok, amely örökre futtatja a kódot a 8-16 sorokban.

A 8. sorban a get_temperature () módszerrel leolvassák a hőmérsékleti adatokat (Celsius-fokban) a Sense Hat nedvességérzékelőjéből. A 9. sorban a hőmérsékleti adatokat Celsius-fokról Fahrenheit fokra konvertálják. A 10. sorban a get_pressure () módszert alkalmazzák a Sense Hat nyomásérzékelőjének levegőnyomásadatainak (millibárban) kiolvasására. A 11. sorban a get_humidity () módszert alkalmazzák a páratartalom adatok (% -ban) kiolvasására a Sense Hat nedvességérzékelőjéből.

A 13-15. Sorok segítségével az érzékelő adatai kinyomtathatók a konzolra, a 16. sor pedig arra vár, hogy várjon 5 másodpercet, mielőtt újra olvassa az érzékelő adatait.

Futtathatja a read_sensor_data.py Python szkript az alábbiak szerint:

$ python3 read_sensor_data.py

A parancsfájl futtatása után az érzékelő adatok kinyomtatásra kerülnek a konzolra.

Most, hogy leolvashatjuk az érzékelő adatait a Sense Hat-ból, nyomja meg a gombot + C a program leállításához.

Meteorológiai állomás webalkalmazás létrehozása

Ebben a részben bemutatjuk, hogyan használhatja a Python Flask web keretrendszert időjárás API és időjárási alkalmazás létrehozásához. Az időjárási alkalmazás hozzáfér az időjárási adatok API-hoz, és valós időben megjeleníti az időjárási adatokat. Az ebben a szakaszban tárgyalt összes kód a GitHubon érhető el: shovon8 / málna-pi-sense-hat-weather-app.

Először hozzon létre a szerver.py Python szkript a projekt könyvtárban az alábbiak szerint:

$ nano szerver.py

Írja be a következő kódot a szerver.py Python fájl.

lombikból import Lombik
lombikból import jsonify
a lombikból importálja render_template
a lombikból importál url_for
a sense_hat importból a SenseHat
app = Lombik (__ név__)
kb.config ['SEND_FILE_MAX_AGE_DEFAULT'] = 0
sense = SenseHat ()
érzék.egyértelmű()
kb.test_request_context ():
url_for ('statikus', fájlnév = 'stílus.css ')
url_for ('static', fájlnév = 'kb.js ')
@app.útvonal ('/ api')
def api ():
tempC = érzék.get_temperature ()
tempF = tempC * (9/5) + 32
nyomás = érzék.get_pressure ()
nyomásPsi = nyomás * 0.0145038
nyomásP = nyomás * 100
páratartalom = érzék.get_humidity ()
return jsonify (
"hőmérséklet": "C": tempC, "F": tempF,
"nyomás": "mb": nyomás, "hPa": nyomás,
"psi": nyomásPsi, "P": nyomásP,
"páratartalom": páratartalom
)
@app.útvonal('/')
def home ():
vissza render_template ('./itthon.html ')

Ezután nyomja meg a gombot + x utána Y és hogy megmentse a szerver.py Python szkript.

A fenti kódban az 1–5. Sor importálja az összes szükséges könyvtárat, a 7. sor létrehoz egy Lombik alkalmazást, a 11. sor létrehoz egy SenseHat objektumot, a 12. sor pedig kikapcsolja a Sense Hat összes LED-jét. A 8. sor letiltja a webes gyorsítótárat a Lombik alkalmazásban. Mivel ez az alkalmazás könnyű, nincs szükség gyorsítótárra. Ha módosítani szeretné az alkalmazást, akkor a webes gyorsítótár letiltása jelentősen megkönnyíti a tesztelést.

A 18-31. Sor felolvassa az érzékelő adatait a Sense Hat-ból, és az API-adatokat JSON formátumban adja vissza HTTP GET kérésre a / api a webkiszolgáló végpontja. A 37-39. Sorok visszaadják az időjárási webalkalmazás kezdőlapját a / a webkiszolgáló végpontja. A kezdőlap a itthon.html fájl, amelynek a sablonok / a projektkönyvtár könyvtárát.

A 14-16. Sorok a hozzáférés engedélyezésére szolgálnak stílus.css és kb.js statikus fájlok. Ezeknek a fájloknak a statikus/ a projekt könyvtár könyvtárát. A stílus.css fájlt használjuk a itthon.html honlap és a kb.js fájlt használják az API adatok kérésére a / api végpont és frissítse az időjárási adatokat a itthon.html 5 másodpercenként.

Hozza létre a statikus/ és sablonok / könyvtárat a projekt könyvtárban az alábbiak szerint:

$ mkdir -v static, templates

Hozzon létre egy itthon.html fájl a sablonok / könyvtárat az alábbiak szerint:

$ nano sablonok / home.html

Írja be a következő kódot a itthon.html fájl.





Raspberry Pi meteorológiai állomás
href = "url_for ('statikus', fájlnév =" stílus.css ")" />



Raspberry Pi meteorológiai állomás



Hőfok












Nyomás




















páratartalom











Ezután nyomja meg a gombot + x utána Y és hogy megmentse a itthon.html fájl.

Hozzon létre egy stílus.css fájl a statikus/ könyvtárat az alábbiak szerint:

$ nano statikus / stílus.css

Írja be a következő kódokat a stílus.css fájl.

@import url ('https: // betűtípusok.googleapis.com / css2?család = Roboto & display = csere ');
*
párnázás: 0;
margó: 0;
font-family: 'Roboto', sans-serif;

body
háttér: # 737373;

h1
kijelző: blokk;
szín: # 79DC7B;
text-align: center;
betű súlya: 400;
háttér: # 000;
párnázás: 0.5em 0;

h2
kijelző: blokk;
háttér: # 000;
szín: #fff;
text-align: center;
betű súlya: 400;
betűméret: 1em;

.adattartalom
margó: 10px;
szegély: 2px egyszínű fekete;
határ-sugár: 5px;
háttérszín: # 79DC7B;

.adatsor
kijelző: flex;
hajlítási irány: sor;

.data-cell
szélesség: 100%;
magasság: 80px;
kijelző: flex;
align-items: center;
igazol-tartalom: központ;
betű súlya: félkövér;
betűméret: 1.5em;
szín: # 006902;

.data-cell: lebeg
háttér: # FFE891;
szín: # AA8600;
kurzor: mutató;

Ezután nyomja meg a gombot + x utána Y és hogy megmentse a stílus.css fájl.

Hozzon létre egy kb.js fájl a statikus/ könyvtárat az alábbiak szerint:

$ nano statikus / kb.js

Írja be a következő kódot a kb.js fájl.

ablak.addEventListener ('load', main);
függvény main ()
függvény getAPIData ()
var http = új XMLHttpRequest ();
http.onreadystatechange = function ()
ha ez.readyState === 4 && ez.állapot === 200)
frissítés (JSON.elemzés (ez.responseText));


http.nyitott ("GET", "/ api", igaz);
http.Küld();

függvényfrissítés (apiData)
var tempC = dokumentum.getElementById ("tempC");
var tempF = dokumentum.getElementById ("tempF");
var pressureMb = dokumentum.getElementById ("nyomásMb");
var pressurePsi = dokumentum.getElementById ("nyomásPsi");
var pressureHpa = dokumentum.getElementById ("nyomásHpa");
var pressureP = dokumentum.getElementById ("nyomásP");
var páratartalom = dokumentum.getElementById ("páratartalom");
tempC.belsőHTML = parseFloat (apiData.hőfok.C).toFixed (2) + "° C";
tempF.belsőHTML = parseFloat (apiData.hőfok.F).toFixed (2) + "° F";
nyomásMb.belsőHTML = parseFloat (apiData.nyomás.mb).toFixed (2) + "mb";
nyomásPsi.belsőHTML = parseFloat (apiData.nyomás.psi).toFixed (2) + "psi";
nyomásHpa.belsőHTML = parseFloat (apiData.nyomás.hPa).toFixed (2) + "hPa";
nyomásP.belsőHTML = parseFloat (apiData.nyomás.P).toFixed (2) + "P";
páratartalom.belsőHTML = parseFloat (apiData.páratartalom).toFixed (2) + "%";

function app ()
ablak.setInterval (function ()
getAPIData ();
5000);

alkalmazás ();

Ezután nyomja meg a gombot + x utána Y és hogy megmentse a kb.js fájl.

Itt az 1. sor fut a fő() funkció, amikor a weboldal befejezi a betöltést. Ban,-ben fő() funkció, a getAPIData () függvény lekéri az időjárás API adatait az AJAX használatával, és meghívja a frissítés () funkció (a 10. sorban), miután az adatok sikeresen be lettek töltve. A frissítés () függvény frissíti a weboldal elemét az API adatok felhasználásával.

A 20. sorban a dokumentum.getElementById () metódus arra szolgál, hogy megkapjuk az azonosítóval rendelkező weboldal elem hivatkozását tempC. A 28. sor az azonosítóval rendelkező weboldal elem tartalmának kicserélésére szolgál tempC az API-tól kapott hőmérsékletgel (Celsius-fokban). Ugyanígy az összes webes elem (21–26. Sor) tartalma kicserélődik a megfelelő API-adatokra.

Ban,-ben alkalmazás () funkció, a getAPIData () 5 másodpercenként (5000 ezredmásodpercenként) hívják, hogy az időjárási adatok naprakészek legyenek az időjárási alkalmazásban. Végül a 46. sorban a alkalmazás () függvény végrehajtásra kerül.

A webalkalmazás teszteléséhez írja be a következő parancsot:

$ FLASK_APP = szerver.py lombik futtatása - gazda = 0.0.0.0

Az időjárás-alkalmazásnak az 5000-es porton kell futnia (alapértelmezés szerint).

Annak teszteléséhez, hogy a Weather API működik-e, futtassa a következő parancsot:

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

Amint láthatja, a Weather API adatai kinyomtatásra kerülnek a konzolra. Ezért az API működik.

Az Időjárás alkalmazás teszteléséhez keresse fel a http: // localhost: 5000 oldalt egy Chromium böngészőből. Az Időjárás alkalmazást be kell tölteni a webböngészőbe, de először nem szabad időjárási adatokat megjeleníteni.

Néhány másodperc múlva az időjárás alkalmazásnak be kell fejeznie az időjárási adatokat az API-ból, és meg kell jelenítenie azokat.

Bármikor megnyomhatja + C a webkiszolgáló leállításához.

Systemd szolgáltatás létrehozása az Időjárás webalkalmazáshoz

Ebben a részben bemutatjuk, hogyan hozhat létre egy systemd szolgáltatásfájlt az időjárás-alkalmazáshoz, hogy az automatikusan elinduljon indításkor.

Először hozzon létre a meteorológiai állomás.szolgáltatás fájlt a projekt könyvtárában az alábbiak szerint:

$ nano időjárás-állomás.szolgáltatás

Írja be a következő kódsorokat a meteorológiai állomás.szolgáltatás fájl.

[Mértékegység]
Leírás = Raspberry Pi Weather Station webalkalmazás a Raspberry Pi Sense Hat használatával
Után = hálózat.cél
[Szolgáltatás]
WorkingDirectory = / home / pi / work
Környezet = FLASK_APP = szerver.py
Környezet = FLASK_ENV = termelés
ExecStart = / usr / bin / flask run --host = 0.0.0.0
StandardOutput = örökli
StandardError = örökli
Újraindítás = mindig
Felhasználó = pi
[Telepítés]
WantedBy = többfelhasználós.cél

Ezután nyomja meg a gombot + x utána Y és hogy megmentse a meteorológiai állomás.szolgáltatás fájl.

Másolja a meteorológiai állomás.szolgáltatás fájl a / etc / systemd / system / könyvtár a következő paranccsal:

$ sudo cp -v időjárás-állomás.szolgáltatás / etc / systemd / system /

Töltse be újra a systemd démonokat, hogy a változtatások az alábbiak szerint lépjenek életbe:

$ sudo systemctl daemon-reload

A meteorológiai állomás A systemd szolgáltatásnak pillanatnyilag inaktívnak kell lennie, amint az az alábbi képernyőképen látható.

$ sudo systemctl állapot meteorológiai állomás.szolgáltatás

Indítsa el a meteorológiai állomás szolgáltatás a következő paranccsal:

$ sudo systemctl start meteorológiai állomás.szolgáltatás

Mint láthatja, a meteorológiai állomás szolgáltatás most fut.

$ sudo systemctl állapot meteorológiai állomás.szolgáltatás

Most, hogy a meteorológiai állomás A szolgáltatás működik, felveheti a Raspberry Pi OS rendszerindításába a következő paranccsal:

$ sudo systemctl engedélyezi az időjárás-állomást.szolgáltatás

Indítsa újra a Raspberry Pi-t a következő paranccsal:

$ sudo reboot

Miután elindult a Raspberry Pi, meteorológiai állomás A szolgáltatásnak futnia kell, amint az az alábbi képernyőképen látható.

$ sudo systemctl állapot meteorológiai állomás.szolgáltatás

Hozzáférés az Időjárás alkalmazáshoz más eszközökről

Ahhoz, hogy az időjárási alkalmazást otthoni hálózatának más eszközeiről elérje, ismernie kell a Raspberry Pi IP-címét. A Raspberry Pi 4 IP-címét az otthoni útválasztó webkezelő felületéről találhatja meg. Esetünkben az IP-cím 192.168.0.103., de ez a cím más lesz az Ön számára, ezért minden további lépésben mindenképpen cserélje le ezt a címet.

Ha hozzáfér a Raspberry Pi konzolhoz, a következő paranccsal futtathatja az IP-címet is.

$ hostname -I

Miután megtudta a Raspberry Pi IP-címét, az otthoni hálózat bármely eszközéről elérheti. Amint az alábbi képernyőképen látható, egy Android okostelefonról értük el az időjárás alkalmazást.

Következtetés

Ebben a cikkben bemutattuk, hogyan használhatja a Raspberry Pi Sense Hat-ot egy Raspberry Pi időjárási állomás felépítéséhez. Használtuk a érzék-kalap Python könyvtár az időjárási adatok kinyeréséhez a Raspberry Pi Sense Hat alkalmazásból. Ezután a Flask Python mikro webes keretrendszer segítségével létrehoztunk egy időjárási API-t és egy webalkalmazást. A webalkalmazás 5 másodpercenként megkapja az időjárási adatokat az időjárás-API-tól, hogy naprakészen tartsa a webalkalmazást a legfrissebb időjárási adatokkal.

Microsoft Sculpt Touch vezeték nélküli egér áttekintés
Nemrég olvastam a Microsoft Sculpt Touch vezeték nélküli egér és úgy döntött, hogy megveszi. Egy ideig használat után úgy döntöttem, hogy megosztom ve...
AppyMouse képernyős Trackpad és egérmutató a Windows táblagépekhez
A táblagép-felhasználók gyakran hiányolják az egérmutatót, különösen akkor, ha szokták használni a laptopokat. Az érintőképernyős okostelefonok és táb...
Az egér középső gombja nem működik a Windows 10 rendszerben
A középső egérgomb segít átgörgetni a hosszú weboldalakat és a sok adatot tartalmazó képernyőket. Ha ez leáll, akkor a billentyűzet segítségével görge...