Tartalomjegyzék:

Helyi időjárás állomás: 8 lépés (képekkel)
Helyi időjárás állomás: 8 lépés (képekkel)

Videó: Helyi időjárás állomás: 8 lépés (képekkel)

Videó: Helyi időjárás állomás: 8 lépés (képekkel)
Videó: KIKAPTUK A BIZIT📚 #shorts 2024, November
Anonim
Helyi meteorológiai állomás
Helyi meteorológiai állomás

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:

    1. QS-FS szélsebesség-érzékelő
    2. 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
    3. DHT22 (páratartalom) https://www.bitsandparts.nl/Hőmérséklet- érzékelők-és-Termokoppels/Temperatuursensor-en-luchtvochtigheidssensor-DHT22/p109717
    4. 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
    5. 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:

    1. QS-FS szélsebesség-érzékelő
    2. Szélérzékelő Kerti jelkimenet Alumíniumötvözet Szélirány -érzékelő Szélirányú sebességmérő műszer
    3. DHT22 (páratartalom)
    4. BMP280 (légnyomás)
    5. 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

Az RPi beállítása
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

Érzékelők csatlakoztatása és kód hozzáadása
Érzékelők csatlakoztatása és kód hozzáadása
Érzékelők csatlakoztatása és kód hozzáadása
Érzékelők csatlakoztatása és kód hozzáadása
Érzékelők csatlakoztatása és kód hozzáadása
É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:

  1. QS-FS szélsebesség-érzékelő
  2. Szélérzékelő Kerti jelkimenet Alumíniumötvözet Szélirány -érzékelő Szélirányú sebességmérő műszer
  3. DHT22 (páratartalom)
  4. BMP280 (légnyomás)
  5. 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

Webes felhasználói felület tervezése
Webes felhasználói felület tervezése
Webes felhasználói felület tervezése
Webes felhasználói felület tervezése
Webes felhasználói felület tervezése
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

Adatbázis létrehozása
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

Burkolat készítése
Burkolat készítése
Burkolat készítése
Burkolat készítése
Burkolat készítése
Burkolat készítése
Burkolat készítése
Burkolat 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: