Tartalomjegyzék:
- Kellékek
- 1. lépés: A dolgok előkészítése
- 2. lépés: Az RPi beállítása
- 3. lépés: Érzékelők csatlakoztatása és kód hozzáadása
- 4. lépés: Webes felhasználói felület tervezése
- 5. lépés: Adatbázis létrehozása
- 6. lépés: A webhely kódolása: Frontend (html Css)
- 7. lépés: A webhely kódolása: Backend (eventlet) + Coding Frontend (javascript)
- 8. lépés: Ház készítése
Videó: Helyi időjárás állomás: 8 lépés (képekkel)
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:40
Miközben nagyszerű projektet kerestem az első éves iskolai projektemhez, sok ötletem volt, hogy mit készítsek, de egyiket sem tartottam kihívásnak.
Később eszembe jutott egy meteorológiai állomás elkészítése, amiben valami különleges volt. Szerettem volna tárolni az összes adatomat, és később felhasználni ezeket a statisztikákhoz. Ez a projekt kifejezetten azoknak készült, akik érdeklődnek a meteorológia iránt, és szeretnének egy otthon létrehozott időjárás állomást, amely nem kerül annyiba, mint a piacon kapható. A projekt célja továbbá az érzékelők bármikor történő hozzáadásának vagy eltávolításának fenntartása.
Nagyon boldog voltam, amikor megláttam a végeredményemet, ami a vártnál jobban sikerült.
Raspberry Pi 4 -ből futó linuxból készült.
- Apache webhely (html css js)
- Eventlet (háttérkiszolgáló webhely)
- MariaDB (adatbázis -kiszolgáló)
Kellékek
-
Raspberry Pi 4:
SD-kártya (legalább 16 GB)
-
Érzékelők:
- QS-FS szélsebesség-érzékelő
- Szélérzékelő Kerti jelkimenet Alumíniumötvözet Szélirány-érzékelő Szélirányú sebességmérő eszköz https://www.banggood.com/Wind-Sensor-Garden-Signal-Output-Aluminium-Alloy-Wind-Direction-Sensor-Wind-Vane-Speed -Measuring-Instrument-p-1624988.html? Rmmds = myorder & cur_warehouse = CN
- DHT22 (páratartalom) https://www.bitsandparts.nl/Hőmérséklet- érzékelők-és-Termokoppels/Temperatuursensor-en-luchtvochtigheidssensor-DHT22/p109717
- BMP280 (légnyomás) https://www.bitsandparts.nl/Hőmérséklet- érzékelők-és-Termokoppels/Barometrische-druksensor-hoogtemeter-temperatuursensor-I2C-SPI-BMP280/p124314
- DS18B20 (hőmérséklet) https://www.bitsandparts.nl/Hőmérséklet- érzékelők-és-Termokoppels/Temperatuursensor-1-Wire-Dallas-DS18B20/p109705
-
Tápegység
- 5V tápegység (RPi)
- 9V -os tápegység (külső kenyérsütő tápegységről)
-
Breadboard (x2)
T-cobbler plusz RPi 4-hez
- jumper vezetékek
-
IC -k
- MCP3008
- PCF8574AN
- LCD kijelző 16x2
- LED (piros
-
Ház (optikai)
- borládák
- faoszlop (2 m)
- fa deszka (1 m)
1. lépés: A dolgok előkészítése
Mindig nagyon fontos, hogy megkapja az összes szükséges elemet, mielőtt elkezdené dolgozni egy lépésen. Ezzel sok időt takaríthat meg a munka során.
Tehát először, Mire van szükséged:
-
Raspberry Pi 4:
SD-kártya (legalább 16 GB)
-
Érzékelők:
- QS-FS szélsebesség-érzékelő
- Szélérzékelő Kerti jelkimenet Alumíniumötvözet Szélirány -érzékelő Szélirányú sebességmérő műszer
- DHT22 (páratartalom)
- BMP280 (légnyomás)
- DS18B20 (hőmérséklet)
-
Tápegység
- 5V tápegység (RPi)
- 9V -os tápegység (külső kenyérsütő tápegységről)
- Breadboard (x2)
- T-cobbler plusz RPi 4-hez
- jumper vezetékek
-
IC -k
- MCP3008
- PCF8574AN
- LCD kijelző 16x2
- LED (piros)
-
Ház (optikai)
- bor ládafából
- fa deszka (1 m)
- oszlop (2 m)
Az összes linket, ahol ezeket vettem, megtalálod az intro alatti kellékek részben.
2. lépés: Az RPi beállítása
A projektünkhöz szükségünk van egy RPi -re, amelyen az adott szoftver telepítve van.
- Apache webhely (html css js)
- Flask Socket-IO (háttérkiszolgáló webhely)
- MariaDB (adatbázis -kiszolgáló)
Telepítés előtt mindig kéznél van, és győződjön meg arról, hogy a legújabb szoftver telepítve van az RPi -re. Ehhez csak hajtsa végre a következő parancsot:
sudo apt frissítés
Apache:
Először beszéljünk az Apache -ról. Az Apache egy webszerver, amelyet a világ minden táján használnak. Hibátlanul futtatja webhelyét. Az egyetlen dolog, amit meg kell tennie, telepítse, és helyezze webhelyét a megfelelő mappába, és ott van.
sudo apt install apache2 -y
Ez az!
Annak érdekében, hogy minden helyesen legyen telepítve, böngészőben keresse meg a málna pi Ip-címét, és nézze meg, hogy megkapja-e az alapértelmezett webhelyet. Ha problémái vannak ezzel a lépéssel kapcsolatban, itt megtekintheti az RPi webhelyét.
Esemény:
Most telepítsük az Eventlet programot. Futtatni fogja a hátsó szerverünket, és létrehozza a kapcsolatot az érzékelőinktől a webhelyünkig. Ehhez szükségünk van pár csomagra.
Lombik-foglalat:
pip3 telepítse a flask-socketio-t
Esemény:
pip3 telepítse az eseményt
Gevent:
pip3 install gevent
Mariadb:
A Mariadb egy MySQL alapú adatbázis, amely relációs adatbázisokat készít. Gyakran használják az RPi -n, és ezért sok segítséget talál az interneten. További információért kattintson erre a linkre.
apt install mariadb-server
3. lépés: Érzékelők csatlakoztatása és kód hozzáadása
Az érzékelők RPi-hez való csatlakoztatásához használhatunk egy T-Cobbler plus-t. Ez egy praktikus kis eszköz, amely lehetővé teszi az RPi összes csapjának használatát kenyérsütő deszkán.
A projektben 5 érzékelőm van:
- QS-FS szélsebesség-érzékelő
- Szélérzékelő Kerti jelkimenet Alumíniumötvözet Szélirány -érzékelő Szélirányú sebességmérő műszer
- DHT22 (páratartalom)
- BMP280 (légnyomás)
- DS18B20 (hőmérséklet)
Szélsebesség érzékelő:
Először is a szélsebesség -érzékelővel kezdtem, mert főleg ez az érzékelő izgatott. Ez egy érzékelő, amelynek analóg jele 0-5V kimenet, és működéséhez legalább 7 volt feszültség szükséges. Én a 9 voltos adaptert választom a tápellátáshoz.
Ebben az érzékelőben az MCP3008 -at használtam, amely az analóg jelekben olvasható IC. Az IC 3,3 V vagy 5 V feszültséggel működhet, de én a 3.3 V -ot választom, hogy kompatibilis legyen az RPi -vel. Ez azt jelentette, hogy a kimeneti feszültséget 5 V -ról 3.3 V -ra kellett változtatnom. Ezt úgy tettem, hogy hozzáadtam egy feszültségosztót, amelyet 2 ellenállás (2k és 1k ohm) hozott létre.
Szélirány érzékelő:
A szélirány ugyanolyan fontos, mint a szél sebessége, ezért ezt a következőképpen csatlakoztatom.
Ez az érzékelő ugyanazzal a specifikációval rendelkezik, mint a szélsebesség -érzékelő. 9V -ról is működik, és 5 voltos kimeneti feszültséggel rendelkezik. Ezt az érzékelőt is feszültségosztón keresztül csatlakoztatjuk az MCP3008 -hoz.
DHT22 (páratartalom):
A DHT22 leolvassa a páratartalmat. Ez százalékos értéket ad meg, és az értéke leolvasható az RPi I2C protokolljának használatával. Ezért engedélyeznie kell az I2C portokat a Raspi-configban. További információ itt.
BMP280 (légnyomás):
A BMP280 a légnyomás leolvasására szolgál. Értéke az RPi SPI buszon keresztül olvasható le. Ezt a protokollt engedélyezni kell a Raspi-configban is. A kódomhoz az Adafruit könyvtárat használtam.
DS18B20 (hőmérséklet):
Az utolsó érzékelő méri a hőmérsékletet. ez az érzékelő Dallasból származik, és ha van egy kis tapasztalata a Dallas-szal, akkor valószínűleg már tudnia kell, hogy az 1Wire-buszt használják. Ne csodálkozzon, ha azt mondom, hogy ezt a protokollt engedélyezni kell a Raspi-configban is.
Hogyan csatlakoztattam az érzékelőket:
Pdf -ként feltöltöttem egy elektromos és kenyérsütési sémát, hogy egy kicsit könnyebb legyen.
Miután sikeresen csatlakoztatta az érzékelőket, és hozzáadta az összes érzékelő elolvasásához szükséges kódot, lépjen tovább, és folytassa a következő lépéssel. Ha szeretne hátrahagyni egy érzékelőt, vagy többet szeretne hozzáadni, megteheti.
4. lépés: Webes felhasználói felület tervezése
Most csatlakoztattuk a weboldalunk tervezéséhez szükséges érzékelőket.
Azt akarjuk, hogy a weboldal egyszerű megjelenést hozzon létre, miközben megjeleníti az érzékelők valós idejű adatait.
Továbbá szeretnénk látni ezen időintervallumonként mért mért értékeket.
Így először elkezdtem nézelődni a weben, hogy inspirációt kapjak. Leginkább ott, ahol csak a búzával kapcsolatos információs oldalak vannak, anélkül, hogy valóban azt a dizájnt keresném. A már piacon lévő meteorológiai állomásokon valószínűleg volt kijelző. És ebből a megjelenítésből jött az ihletem. A legtöbb kijelző rácsos kialakítású. Ez adta az ötletet, hogy létrehozzam a kezdőlapot, ahol minden érzékelő megjelenik.
De azt is elmondtam, hogy szeretnék létrehozni egy oldalt, ahol megtekintheti az egyes érzékelők értékeit.
Emiatt készítettem egy második oldalt is a tervemben, amely ezt tartalmazza. Ezen az oldalon láthattam néhány további információt az érzékelőmről, amelyek nem jelennének meg a címlapomon, és természetesen az előzmények részében.
Néhány óra múlva elkészült a teljes tervem!
A tervezés Adobe XD segítségével készült.
5. lépés: Adatbázis létrehozása
Ahhoz, hogy szünetet tartsak a tervezési részben, elkezdtem az adatbázisomat.
Ez az adatbázis tartalmazza az összes érzékelőt (5), az összes hajtóművet (2) és az érzékelők értékeit.
Az adatbázis meglehetősen egyszerű, és néhány relációval rendelkezik.
A fényképen láthatja az adatbázis modelljét.
6. lépés: A webhely kódolása: Frontend (html Css)
Vissza a Weboldalra!
Most van egy tervem, és elkezdhetem html css -ként kódolni, hogy valóban használni lehessen.
A honlapon:
Azzal kezdtem, hogy minden érzékelőt a webhelyem egyik elemének tekintettem. Hogy később hagyhassam ezt a részt generálni a Javascript kódommal.
Az elemekbe véletlenszerű JS-tulajdonos osztályokat is beszúrtam. Ezek lehetővé teszik az elem tartalmának megváltoztatását
Ez sok időt vett igénybe, mert nem vagyok olyan jó ezen a nyelven.
Miután elkészítettük a kezdőlapot, ideje elkezdeni a történelem oldalt.
Az előzmények oldalán:
Ezt az oldalt kicsit könnyebb volt újra létrehozni. Ezen az oldalon js-tartók is találhatók az érzékelőre vonatkozó információk betöltéséhez, egy valós idejű értékrés és a táblázat megjelenítése a mért értékekkel.
Ahhoz, hogy létrehozzak egy tab-opciót a webhelyemen, hogy választhassak a táblázat vagy a diagram között, hozzá kellett adnom egy kis Javascript-et, hogy az elemek ne jelenjenek meg vagy ne jelenjenek meg.
Most lenyűgöző weboldalunk van, de nem tudunk rajta semmit megjeleníteni? Ezt javítsuk ki.
A kódomat megtalálod a github tárolómban:
7. lépés: A webhely kódolása: Backend (eventlet) + Coding Frontend (javascript)
Háttér:
Míg a háttérkiszolgáló már telepítve van, ezt még be kell építenünk a projektünkbe. Először hozzá kell adnunk néhány importot, hogy minden megfelelően működjön.
from lombik import Lombik, kérés, jsonify from flask_socketio import SocketIO from flask_cors import CORS
A szerver elindításához a következőket kell hozzáadnunk:
socketio.run (app, debug = False, host = '0.0.0.0')
Most a szerver online, de nem tud beszélni a kezelőfelülettel.
Nem kap és nem ad vissza semmit. Változtassunk ezen.
Ha az adatbázis összes érzékelőjét kéri, akkor egy útvonalat ad hozzá:
@app.route (végpont + '/érzékelők', metódusok
Ez a kód a DataRepository nevű osztályt használja, és az adatbázishoz szól. Itt visszaadja nekünk a kért érzékelőket.
Szükségünk van egy útvonalra is, hogy információt kérjünk 1 konkrét érzékelőről, és egy másikat az adott érzékelő értékeiről.
Ezek mind útvonalak, csak a valós idejű adatok lehetővé tétele érdekében. Minden intervallumban el kell küldenünk azokat az adatokat, amelyeket az érzékelők most olvastak. Ehhez a Socket-IO kapcsolatot használjuk. Ez egy kapcsolat attól a pillanattól kezdve létrejött, amikor valaki betölti a webhelyet JS -sel, és nyitva tartja ezt a kapcsolatot. Ez egy teljesen duplex kapcsolat, ami azt jelenti, hogy ez egy olyan kapcsolat, amely egyszerre működik (küldés és fogadás). Ennek használatához hozzá kell adnunk a következő kódot.
@socketio.on ('connect') def initial_connection (): print ('Új ügyfélcsatlakozás') socketio.send ("U Bend geconnecteerd") # # Küldje el az ügyfélnek!
Ez a kódbéke akkor fut, amikor az ügyfél csatlakozik.
Ha bármilyen üzenetet szeretne kapni a kezelőfelületről, használja ezt a kódot.
@socketio.on ('üzenet') def message_recieved (): pass
Üzeneteket is küldhet. Ez a következőképpen valósul meg.
socketio.emit ('Update_RTD', dict_results, broadcast = Igaz)
Az első argumentum bármi lehet, amit szeretne, de megfelel annak, amit a JS -be tesz, és objektumokat is küldhet vele. Ez nem kötelező.
Javascript:
Fontos, hogy adjunk hozzá egy kis JS -t, hogy a szerver csatlakozzon a háttérkiszolgálóhoz, hogy képes legyen megjeleníteni az aktuális adatokat és információkat szerezni az adatbázisból.
Meghívjuk az adatok fogadására és küldésére szolgáló socketIO funkciókat.
Amikor adatokat kapunk Json objektumként, szétszereljük azokat, hogy megkapjuk a kívánt információkat, majd betesszük azokat a JS-tartókba, amelyeket a weboldalunkon helyeztünk el.
A kódomat megtalálod a github tárolómban:
8. lépés: Ház készítése
A burkolat sok munkát igényelt, és tetszőleges módon elvégezhető. Én így csináltam.
Vettem néhány borládát.
Az egyiket dobozként használtam az RPi és a legtöbb érzékelőm tárolására.
A szélsebesség -érzékelőt és a szélirány -érzékelőt természetesen nem belül, hanem egy oszlopra helyezett keresztléc tetején helyezték el. Erre a póznára akasztottam azt a borládát, ahová ajtót is készítettem.
Láthatja, hogyan fejeztem be a projektemet, ha megnézi a fényképeket.
Ez természetesen egy példa arra, hogyan teheti meg. Azt csinálhatsz vele, amit akarsz.
Ajánlott:
Fanair: időjárás állomás a szobájához: 6 lépés (képekkel)
Fanair: időjárás állomás a szobájához: Számtalan módja van az aktuális időjárás megismerésére, de akkor csak a kinti időjárást ismeri. Mi van, ha tudni szeretné az időjárást a házban, egy adott szobában? Ezt próbálom megoldani ezzel a projekttel. A Fanair többféle
Szuper időjárás állomás függő kosár: 11 lépés (képekkel)
Szuper időjárás állomás függő kosár: Szia mindenkinek! Ebben a T3chFlicks blogbejegyzésben megmutatjuk, hogyan készítettünk intelligens függő kosarat. A növények friss és egészséges kiegészítői minden otthonnak, de gyorsan fárasztóvá válhatnak - különösen, ha csak akkor emlékszel, hogy öntözd őket, amikor
Egyszerű időjárás állomás az ESP8266 használatával: 6 lépés (képekkel)
Egyszerű időjárás állomás az ESP8266 használatával: Ebben az utasításban megosztom, hogyan kell használni az ESP8266 -t olyan adatok beszerzéséhez, mint a hőmérséklet, a nyomás, az éghajlat stb., Valamint a YouTube -adatokat, például az előfizetőket Teljes megtekintések száma. és jelenítse meg az adatokat a soros monitoron, és jelenítse meg az LCD -n. Az adatok f
Moduláris szolár időjárás állomás: 5 lépés (képekkel)
Modular Solar Weather Station: Az egyik projekt, amit egy ideje meg akartam építeni, egy Modular Weather Station volt. Moduláris abban az értelemben, hogy a szoftver megváltoztatásával hozzáadhatjuk a kívánt érzékelőket. A Modular Weather Station három részre oszlik. Az alaplapon a W
Helyi hőmérséklet/páratartalom állomás: 4 lépés
Helyi hőmérséklet/páratartalom állomás: Ebben az utasításban megtanítom, hogyan készítsen egy kis állomást a helyi hőmérséklet és páratartalom mérésére, és jelenítse meg a kijelzőn. Tehát miért tettem ezt? Apám megkérdezte, hogy tudok -e csinálj valami érzékelőt, ami méri a hőmérsékletet