- Giroszkóp
- Gyorsulásmérő
- Magnetométer
- Hőfok
- Légköri nyomás
- páratartalom
Ebben a cikkben megmutatom, 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.
- Egy Raspberry Pi Sense Hat modul.
- Egy mikro-USB (Raspberry Pi 3) vagy C típusú USB (Raspberry Pi 4) hálózati adapter.
- 16 GB 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 hozzáféréshez vagy SSH -hozzáféréshez a Raspberry Pi -hez.
JEGYZET: Ebben a cikkben távolról csatlakozunk a Raspberry Pi -hez VNC vagy SSH segítségével, a Raspberry Pi fej nélküli beállításával. Ha nem szeretné SSL -en vagy VNC -n keresztül távolról elérni Raspberry Pi -jét, csatlakoztatnia kell egy monitort, egy billentyűzetet és egy egeret a Raspberry Pi -hez.
Ha szeretné megtudni, hogyan kell a Raspberry Pi OS képét microSD -kártyára villanni, olvassa el a Raspberry Pi Imager telepítése és használata című részt. Ha segítségre van szüksége a Raspberry Pi operációs rendszer Raspberry Pi -re történő telepítéséhez, olvassa el A Raspberry Pi OS telepítése a Raspberry Pi 4 -re . Ha segítségre van szüksége a Raspberry Pi fej nélküli beállításához, nézze meg a Raspberry Pi OS telepítése és konfigurálása Raspberry Pi 4 külső monitor nélkül című témakört.
A Raspberry Pi Sense Hat csatlakoztatása a Raspberry Pi -hez
A Raspberry Pi Sense Hat készlethez tartozik a Raspberry Pi Sense Hat kiegészítő fedélzet, egy 40 tűs férfi-női fejrész, valamint néhány csavar és távtartó.
Mielőtt csatlakoztathatja 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 dugóit az érzékkalaphoz az alábbi képek szerint.
A Raspberry Pi egylapos számítógépek 4 lyukkal rendelkeznek, amelyek segítségével kiegészítő táblákat vagy tokot rögzíthetnek. A kiegészítő panel rögzítéséhez helyezze be a 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.
Csatlakoztassa a Raspberry Pi Sense kalapot a Raspberry Pi 40 tűs GPIO dugójához, az alábbi képek szerint.
JEGYZET: Legyen óvatos, miközben leválasztja a Raspberry Pi Sense sapkát a Raspberry Pi 40 tűs GPIO fejlécéről, nehogy meghajlítsa a Raspberry Pi GPIO csapjait.
A fennmaradó négy csavarral rögzítse a Raspberry Pi Sense sapkát az alábbi képek szerint.
A Raspberry Pi bekapcsolása
Most, hogy a Raspberry Pi Sense Hat csatlakozik a Raspberry Pi -hez, helyezze be a Raspberry Pi OS -t tartalmazó microSD -kártyát a Raspberry Pi microSD -kártyanyílásába, csatlakoztassa a tápkábelt a Raspberry Pi -hez, majd kapcsolja be.
A Raspberry Pi Sense Hat Python Library 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. Az é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 Python könyvtár a Raspberry Pi operációs rendszeren, először frissítse az APT csomagtár tár 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 Library telepítése
Időjárási alkalmazásunk elkészítéséhez a Flask Python keretrendszert fogjuk használni. A Flask telepíthető 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
Jó ötlet létrehozni egy projektkönyvtárat a projektfájlok rendszerezéséhez. Projektkönyvtár létrehozása ~/munka , használja a következő parancsot:
$ mkdir ~/munka
A projektkönyvtár létrehozása után navigáljon a projektkönyvtárhoz az alábbiak szerint:
$ cd ~/munka
A Raspberry Pi Sense sapka tesztelése
Annak tesztelésére, hogy a Raspberry Pi Sense Hat működik -e, írhatunk egy egyszerű teszt Python szkriptet. Létrehozhat egy új Python parancsfájlt teszt.py a ... val nano szövegszerkesztő az alábbiak szerint:
$ nano test.py
Írja be a következő kódot a teszt.py fájlt. 1. sor importja SenseHat tól sense_hat modul, a 3. sor létrehozza a SenseHat objektumot, és tárol egy hivatkozást a érzék változó, és az 5–6. sorok mind a 8 × 8 LED színét pirosra állítják. Ha végzett, nyomja meg a gombot + x követi ÉS és .
Futtathatja a teszt.py Python szkript a következő paranccsal:
$ python3 test.py
A 8 × 8 LED mátrixnak vörös színben kell világítania, ahogy az alábbi képen látható.
A Sense Hat LED -jeinek kikapcsolásához futtassa a egyértelmű() módszert, ahol nincs színérték teszt.py Python szkriptet, amint az az alábbi képernyőképen látható, és futtassa a teszt.py Ismét Python -szkript.
A Sense Hat LED -jeit most ki kell kapcsolni, ahogy az alábbi képen látható.
Ha az érzékkalap megfelelően működik, akkor lépjen tovább a következő szakaszra.
Időjárási adatok lekérése a Sense Hat -tól
Az érzékelőadatokat a Sense Hat segítségével nagyon egyszerűen szerezheti be 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 -szkriptet 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.
tól tőlsense_hatimportSenseHattól től idő importalvás
érzék=SenseHat()
érzék.egyértelmű()
míg Igaz:
tempC=érzék.get_temperature()
tempF=tempC *(9/5)+32
nyomás=érzék.get_pressure()
páratartalom=érzék.get_humidity()
nyomtatás('Hőmérséklet: %.2f ° C/ %.2f ° F n'%(tempC,tempF))
nyomtatás('Nyomás: %.2f mb n'%(nyomás))
nyomtatás('Páratartalom:%.2f %% n n'%(páratartalom))
alvás(5)
Ha végzett, nyomja meg a gombot + x követi ÉS és .
A fenti kódban az 1. és 2. sor importálja az összes szükséges könyvtárat, a 4. sor a SenseHat objektumot, és az 5. sor kikapcsolja a Sense Hat összes LED -jét a egyértelmű() módszer. A while sor a 7. sorban egy végtelen ciklus, amely örökre futtatni fogja a kódot a 8–16.
A 8. sorban a get_temperature () módszerrel olvassuk le a hőmérsékleti adatokat (Celsius fokban) a Sense Kalap páratartalom é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ódszerrel olvassuk le a légnyomásadatokat (millibárban) a Sense Kalap nyomásérzékelőjéből. A 11. sorban a get_humidity () módszerrel olvassuk le a nedvesség adatokat ( %-ban) a Sense Hat kalaptartó páratartalom érzékelőjéből.
A 13–15. Sorok az érzékelőadatok konzolra történő nyomtatására szolgálnak, a 16. sor pedig 5 másodperc várakozásra, mielőtt újra elolvassa az érzékelő adatait.
Futtathatja a read_sensor_data.py A Python szkriptje a következő:
$ python3 read_sensor_data.py
A szkript futtatása után az érzékelő adatai kinyomtatásra kerülnek a konzolra.
Most, hogy ki tudjuk olvasni az érzékelő adatait az érzékkalapból, nyomja meg a gombot + C hogy leállítsa a programot.
Weather Station webes alkalmazás létrehozása
Ebben a részben megmutatjuk, hogyan használhatja a Python Flask webes keretrendszert időjárási 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 elérhető a GitHub címen shovon8 / málna-pi-érzék-kalap-időjárás-app .
Először hozzon létre egy szerver.py Python -szkript a projektkönyvtárban az alábbiak szerint:
$ nano szerver.py
Írja be a következő kódot a szerver.py Python fájl.
tól tőllombikimportLombiktól tőllombikimportjsonify
tól tőllombikimportrender_template
tól tőllombikimporturl_for
tól tőlsense_hatimportSenseHat
kb=Lombik(__név__)
kb.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
érzék=SenseHat()
érzék.egyértelmű()
val velkb.test_request_context():
url_for('statikus',fájl név='style.css')
url_for('statikus',fájl név='app.js')
@kb.útvonal('/Tűz')
defTűz():
tempC=érzék.get_temperature()
tempF=tempC *(9/5)+32
nyomás=érzék.get_pressure()
nyomásPsi=nyomás *0,0145038
nyomás P=nyomás *100
páratartalom=érzék.get_humidity()
Visszatérésjsonify({
'hőfok':{ 'C': tempC, 'F': tempF},
'nyomás':{ 'mb': nyomás, 'hPa': nyomás,
'psi': nyomásPsi, 'P': nyomásP},
'páratartalom': páratartalom
})
@kb.útvonal('/')
defitthon():
Visszatérésrender_template('./home.html')
Ezután nyomja meg a gombot + x követi ÉS é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 egy Flask alkalmazást hoz létre, a 11. sor egy SenseHat objektumot, és a 12. sor kikapcsolja a Sense Hat összes LED -jét. A 8. sor letiltja a webes gyorsítótárazást a Lombik alkalmazásnál. Mivel ez az alkalmazás könnyű, nincs szükség gyorsítótárazásra. Ha módosítani szeretné az alkalmazást, akkor a webes gyorsítótárazás letiltása jelentősen megkönnyíti a tesztelést.
A 18–31. Sorok kiolvassák az érzékelőadatokat a Sense Hat -ből, és visszaadják az API -adatokat JSON formátumban a HTTP GET kérésre a /Tűz a webszerver végpontja. A 37–39. Sorok az időjárási webes alkalmazás kezdőlapját adják vissza a / a webszerver végpontja. A kezdőlap a home.html fájlt, amely a sablonok/ projektkönyvtár könyvtárát.
A 14–16. Sorok lehetővé teszik a hozzáférést stílus.css és app.js statikus fájlokat. Ezeknek a fájloknak a statikus/ projektkönyvtár könyvtárát. Az stílus.css fájlt használják a stílus kialakításához home.html honlap, és a app.js fájl az API adatok kérésére szolgál a /Tűz végpontot, és frissítse az időjárási adatokat a home.html oldal 5 másodpercenként.
Hozza létre a statikus/ és sablonok/ könyvtár a projektkönyvtárban az alábbiak szerint:
$ mkdir -v {static, templates}
Hozzon létre egy home.html fájlt a sablonok/ könyvtár az alábbiak szerint:
$ nano sablonok/home.html
Írja be a következő kódot a home.html fájlt.
< html >
< fej >
< meta név='viewport' tartalom='szélesség = eszközszélesség, kezdeti skála = 1,0'>
< cím >Raspberry Pi meteorológiai állomás</ cím >
< link rel='stíluslap' típus='text/css'
href='{{url_for (' static ', fájlnév =' style.css ')}}'/>
</ fej >
< test >
< div id='tartalom'>
< h1 >Raspberry Pi meteorológiai állomás</ h1 >
< div osztály='adattartalom'>
< h2 >Hőfok</ h2 >
< div osztály='adatsor'>
< div osztály='adatcella' id='tempC'>
...
</ div >
< div osztály='adatcella' id='tempF'>
...
</ div >
</ div >
</ div >
< div osztály='adattartalom'>
< h2 >Nyomás</ h2 >
< div osztály='adatsor'>
< div osztály='adatcella' id='nyomásMb'>
...
</ div >
< div osztály='adatcella' id='pressurePsi'>
...
</ div >
</ div >
< div osztály='adatsor'>
< div osztály='adatcella' id='nyomásHpa'>
...
</ div >
< div osztály='adatcella' id=„nyomás P”>
...
</ div >
</ div >
</ div >
< div osztály='adattartalom'>
< h2 >páratartalom</ h2 >
< div osztály='adatsor'>
< div osztály='adatcella' id='páratartalom'>
...
</ div >
</ div >
</ div >
</ div >
< forgatókönyv típus='text/javascript' src='{{url_for (' static ', filename =' app.js ')}} ”></ forgatókönyv >
</ test >
</ html >
Ezután nyomja meg a gombot + x követi ÉS és hogy megmentse a home.html fájlt.
Hozzon létre egy stílus.css fájlt a statikus/ könyvtár az alábbiak szerint:
$ nano static/style.css
Írja be a következő kódokat a stílus.css fájlt.
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');* {
párnázás: 0;
árrés: 0;
betűtípus család: 'Robot', sans-serif;
}
test{
háttér: # 737373;
}
h1{
kijelző: Blokk;
szín: #79DC7B;
szöveg igazítás: központ;
font-weight: 400;
háttér: # 000;
párnázás: 0.5em 0;
}
h2{
kijelző: Blokk;
háttér: # 000;
szín: #fff;
szöveg igazítás: központ;
font-weight: 400;
betűméret: 1em;
}
.adat-tartalom {
árrés: 10 képpont;
határ: 2 képpont szilárd fekete;
határsugár: 5 képpont;
háttérszín: #79DC7B;
}
.adatsor {
kijelző:Flex;
flex-irány:sor;
}
.adatsejt {
szélesség: 100%;
magasság: 80 képpont;
kijelző:Flex;
align-items: központ;
indokol-tartalom: központ;
font-weight: bátor;
betűméret: 1.5em;
szín: # 006902;
}
.adatsejt:lebeg {
háttér: # FFE891;
szín: # AA8600;
kurzor: mutató;
}
Ezután nyomja meg a gombot + x követi ÉS és hogy megmentse a stílus.css fájlt.
Hozzon létre egy app.js fájlt a statikus/ könyvtár az alábbiak szerint:
$ nano static/app.js
Írja be a következő kódot a app.js fájlt.
ablak.addEventListener('Betöltés',fő-);funkciófő-() {
funkciógetAPIData() {
aholhttp= újXMLHttpRequest();
http.már az államcserénél = funkció() {
ha(ez.readyState === 4 && ez.állapot === 200) {
frissítés(JSON.elemezni(ez.responseText));
}
}
http.nyisd ki('KAP', '/Tűz', igaz);
http.Küld();
}
funkciófrissítés(apiData) {
aholtempC=dokumentum.getElementById('tempC');
aholtempF=dokumentum.getElementById('tempF');
aholnyomásMb=dokumentum.getElementById('nyomásMb');
aholnyomásPsi=dokumentum.getElementById('pressurePsi');
aholnyomásHpa=dokumentum.getElementById('nyomásHpa');
aholnyomás P=dokumentum.getElementById(„nyomás P”);
aholpá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ás P.belsőHTML =parseFloat(apiData.nyomás.P).toFixed(2) + 'P';
páratartalom.belsőHTML =parseFloat(apiData.páratartalom).toFixed(2) + '%';
}
funkciókb() {
ablak.setInterval(funkció() {
getAPIData();
}, 5000);
}
kb();
}
Ezután nyomja meg a gombot + x követi ÉS és hogy megmentse a app.js fájlt.
Itt az 1. sor a fő() funkciót, amikor a weboldal betöltése befejeződött. Ban,-ben fő() funkció, a getAPIData () függvény az AJAX használatával lekéri az időjárás API adatait, és meghívja a frissítés () funkciót (a 10. sorban), miután az adatokat sikeresen lekérte. Az frissítés () függvény frissíti a weboldal elemét az API adatok segítségével.
A 20. sorban a document.getElementById () metódust használjuk arra, hogy lekérjük az azonosítójú weblap elem hivatkozását tempC . A 28. sor az azonosítóval rendelkező weboldal elem tartalmának cseréjére szolgál tempC az API -ból származó hőmérséklettel (Celsius -fokban). Ugyanígy az összes webes elem tartalmát (21–26. Sor) lecseréli a megfelelő API -adatokra.
Ban,-ben app () funkció, a getAPIData () hívja 5 másodpercenként (5000 milliszekundum), hogy az időjárási adatok naprakészek legyenek az időjárási alkalmazásban. Végül a 46. sorban a app () funkció végrehajtásra kerül.
A webalkalmazás teszteléséhez írja be a következő parancsot:
$ FLASK_APP = server.py lombik futtatása -host = 0.0.0.0
Az időjárás -alkalmazásnak az 5000 -es porton kell futnia (alapértelmezés szerint).
Az időjárási API működésének ellenőrzéséhez futtassa a következő parancsot:
$ curl -s http: // localhost: 5000/api | json_pp
Amint láthatja, az Weather API adatait a konzolon nyomtatja ki. Ezért az API működik.
Az Időjárás alkalmazás teszteléséhez keresse fel a következő oldalt http: // localhost: 5000 Chromium webböngészőből. Az Időjárás alkalmazást be kell tölteni a webböngészőbe, de először ne jelenjenek meg időjárási adatok.
Néhány másodperc múlva az időjárás -alkalmazásnak be kell fejeznie az időjárási adatok lekérését az API -ból, és meg kell jelenítenie azokat.
Bármikor megnyomhatja a gombot + C a webszerver leállításához.
Systemd szolgáltatás létrehozása az Weather Web App számára
Ebben a szakaszban megmutatjuk, hogyan hozhat létre rendszeres szolgáltatásfájlt az időjárás -alkalmazáshoz, hogy az automatikusan elinduljon a rendszerindításkor.
Először hozzon létre egy időjárás-állomás.szolgáltatás fájlt a projekt könyvtárában az alábbiak szerint:
$ nano weather-station.service
Írja be a következő kódsorokat a időjárás-állomás.szolgáltatás fájlt.
[Mértékegység]Leírás = Raspberry Pi Weather Station webes alkalmazás a Raspberry Pi Sense Hat használatával
Utána = network.target
[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ököl
StandardError = örököl
Újraindítás = mindig
Felhasználó = pi
[Telepítés]
WantedBy = többfelhasználós.cél
Ezután nyomja meg a gombot + x követi ÉS és hogy megmentse a időjárás-állomás.szolgáltatás fájlt.
Másolja a időjárás-állomás.szolgáltatás fájlt a /etc/systemd/system/ könyvtárat a következő paranccsal:
$ sudo cp -v weather -station.service/etc/systemd/system/
Töltse be újra a rendszerdémonokat, hogy a módosítások az alábbiak szerint lépjenek érvénybe:
$ sudo systemctl démon-reload
Az meteorológiai állomás A systemd szolgáltatásnak inaktívnak kell lennie, amint az az alábbi képernyőképen látható.
$ sudo systemctl állapot weather-station.service
Indítsa el a meteorológiai állomás szolgáltatás a következő paranccsal:
$ sudo systemctl indítsa el az weather-station.service szolgáltatást
Mint látható, a meteorológiai állomás szolgáltatás most fut.
$ sudo systemctl állapot weather-station.service
Most, hogy a meteorológiai állomás szolgáltatás működik, hozzáadhatja a Raspberry Pi OS rendszerindításához a következő paranccsal:
$ sudo systemctl engedélyezi az weather-station.service szolgáltatást
Indítsa újra a Raspberry Pi -t a következő paranccsal:
$ sudo újraindítás
Miután a Raspberry Pi csizma, a meteorológiai állomás szolgáltatásnak futnia kell, amint az az alábbi képernyőképen látható.
$ sudo systemctl állapot weather-station.service
Az Időjárás alkalmazás elérése más eszközökről
Ha az otthoni hálózat más eszközeiről szeretné elérni az időjárás -alkalmazást, ismernie kell Raspberry Pi készülékének IP -címét. A Raspberry Pi 4 IP -címét megtalálhatja az otthoni útválasztó webkezelő felületéről. 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 feltétlenül cserélje ki ezt a címet a sajátjára.
Ha hozzáfér a Raspberry Pi konzolhoz, akkor futtassa a következő parancsot az IP -cím megkereséséhez.
$ hostname -I
Ha ismeri a Raspberry Pi IP -címét, elérheti azt az otthoni hálózat bármely eszközéről. Amint az az alábbi képernyőképen is látható, egy Android okostelefonról értük el az időjárás -alkalmazást.
Következtetés
Ebben a cikkben megmutattuk, hogyan használhatja a Raspberry Pi Sense Hat kalapot Raspberry Pi időjárásállomás építéséhez. Mi használtuk a érzék-kalap Python könyvtár az időjárási adatok kinyeréséhez a Raspberry Pi Sense Hat -ből. Ezután a Flask Python mikro webes keretrendszert használtuk időjárási API és webes alkalmazás létrehozásához. A webalkalmazás 5 másodpercenként lekéri az időjárási adatokat az időjárási API -tól, hogy a webalkalmazás naprakész legyen a legújabb időjárási adatokkal.