- Giroszkóp
- Gyorsulásmérő
- Magnetométer
- Hőfok
- Légköri nyomás
- 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:
- Raspberry Pi 3 vagy Raspberry Pi 4 hálózati kapcsolattal.
- Raspberry Pi Sense Hat modul.
- Mikro-USB (Raspberry Pi 3) vagy C típusú USB (Raspberry Pi 4) hálózati adapter.
- 16 vagy 32 GB-os microSD kártya Raspberry Pi operációs rendszerrel.
- 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
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 SenseHataz 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
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
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 Lombiklombikbó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
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.
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
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
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
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
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
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.