Obsah:

Místní meteorologická stanice: 8 kroků (s obrázky)
Místní meteorologická stanice: 8 kroků (s obrázky)

Video: Místní meteorologická stanice: 8 kroků (s obrázky)

Video: Místní meteorologická stanice: 8 kroků (s obrázky)
Video: Reálné Twin Peaks aneb utajovaný život HAZEL DREW 2024, Listopad
Anonim
Místní meteorologická stanice
Místní meteorologická stanice

Když jsem hledal skvělý projekt pro svůj první školní projekt, měl jsem mnoho nápadů, co udělat, ale žádný z nich mi nepřišel náročný.

Později jsem se pokusil vytvořit meteorologickou stanici, která by měla něco zvláštního. Chtěl jsem mít možnost ukládat všechna svá data a později je použít pro statistiky. Tento projekt by byl speciálně vytvořen pro osoby, které mají zájem o meteorologii a chtějí doma vytvořenou meteorologickou stanici, která nestojí tolik, kolik je k dispozici na trhu. Cílem projektu je také zachovat možnost kdykoli přidat nebo odebrat senzory.

Byl jsem opravdu šťastný, když jsem viděl svůj konečný výsledek, který dopadl lépe, než se očekávalo.

Je vyroben z Raspberry Pi 4 se systémem Linux.

  • Web Apache (html css js)
  • Eventlet (web serveru backendu)
  • MariaDB (databázový server)

Zásoby

  • Raspberry Pi 4:

    SD karta (min. 16 GB)

  • Senzory:

    1. Senzor rychlosti větru QS-FS
    2. Senzor větru Výstup signálu zahrady Hliníková slitina Senzor směru větru Nástroj pro měření rychlosti větru Lopatka https://www.banggood.com/Wind-Sensor-Garden-Signal-Output-Aluminium-Alloy-Wind-Direction-Sensor-Wind-Vane-Speed -Měřící nástroj-p-1624988.html? Rmmds = myorder & cur_warehouse = CN
    3. DHT22 (vlhkost)
    4. BMP280 (tlak vzduchu)
    5. DS18B20 (teplota)
  • Napájení

    • Napájení 5v (RPi)
    • Napájení 9v (na externím napájecím zdroji)
  • Breadboard (x2)

    T-cobbler plus pro RPi 4

  • propojovací vodiče
  • IC

    • MCP3008
    • PCF8574AN
  • LCD displej 16x2
  • LED (červená
  • Plášť (volitelný)

    • přepravky na víno
    • dřevěná tyč (2m)
    • dřevěné prkno (1m)

Krok 1: Příprava věcí

Vždy je velmi důležité získat všechny položky, které potřebujete, než začnete pracovat na kroku. To vám při práci ušetří spoustu času.

Tak za prvé, Co potřebuješ:

  • Raspberry Pi 4:

    SD karta (min. 16 GB)

  • Senzory:

    1. Senzor rychlosti větru QS-FS
    2. Snímač větru Zahradní signál Výstupní hliníková slitina Senzor směru větru Nástroj pro měření rychlosti větru
    3. DHT22 (vlhkost)
    4. BMP280 (tlak vzduchu)
    5. DS18B20 (teplota)
  • Napájení

    • Napájení 5v (RPi)
    • Napájení 9v (na externím napájecím zdroji)
  • Breadboard (x2)
  • T-cobbler plus pro RPi 4
  • propojovací vodiče
  • IC

    • MCP3008
    • PCF8574AN
  • LCD displej 16x2
  • LED (červená)
  • Plášť (volitelný)

    • bedna na víno dřevěná
    • dřevěné prkno (1m)
    • tyč (2m)

Všechny odkazy, kde jsem je koupil, najdete v sekci zásoby pod úvodem.

Krok 2: Nastavení RPi

Nastavení RPi
Nastavení RPi

Pro náš projekt potřebujeme RPi s nainstalovaným daným softwarem.

  • Web Apache (html css js)
  • Flask Socket-IO (web serveru backend)
  • MariaDB (databázový server)

Před instalací je vždy užitečné se ujistit, že máte na svém RPi nainstalován nejnovější software. Chcete -li to provést, spusťte následující příkaz:

sudo apt aktualizace

Apache:

Nejprve si promluvme o Apache. Apache je webový server, který se používá po celém světě. Spouští váš web bezchybně. Jediná věc, kterou musíte udělat, je nainstalovat ji a umístit svůj web do správné složky a je to tam.

sudo apt install apache2 -y

A je to!

Chcete-li se ujistit, že je vše správně nainstalováno, přejděte ve svém prohlížeči na IP adresu Raspberry Pi a zjistěte, zda získáte výchozí web. Pokud máte s tímto krokem jakékoli problémy, můžete se podívat na webovou stránku RPi zde.

Eventlet:

Nyní nainstalujme Eventlet. Spustí náš backend server a provede připojení z našich senzorů na naše webové stránky. K tomu potřebujeme pár balíčků.

Flask-socketIO:

pip3 install flask-socketio

Eventlet:

instalační program pip3

Gevent:

pip3 install gevent

Mariadb:

Mariadb je databáze založená na MySQL, která vytváří relační databáze. Často se používá na RPi, a proto existuje velká pomoc, kterou můžete najít na internetu. Pro více informací můžete přejít na tento odkaz.

apt install mariadb-server

Krok 3: Připojení senzorů a přidání kódu

Připojení senzorů a přidání kódu
Připojení senzorů a přidání kódu
Připojení senzorů a přidání kódu
Připojení senzorů a přidání kódu
Připojení senzorů a přidání kódu
Připojení senzorů a přidání kódu

Pro připojení senzorů k našim RPi můžeme použít T-Cobbler plus. Toto je šikovný malý nástroj, který umožňuje použít všechny vaše piny na vašem RPi na prkénku.

V mém projektu mám 5 senzorů:

  1. Senzor rychlosti větru QS-FS
  2. Snímač větru Zahradní signál Výstupní hliníková slitina Senzor směru větru Nástroj pro měření rychlosti větru
  3. DHT22 (vlhkost)
  4. BMP280 (tlak vzduchu)
  5. DS18B20 (teplota)

Čidlo rychlosti větru:

Nejprve jsem začal se snímačem rychlosti větru, protože jsem byl z tohoto senzoru většinou nadšený. Jedná se o senzor s analogovým signálem výstupu 0-5V a ke své práci potřebuje napětí minimálně 7 voltů. Pro napájení jsem zvolil 9voltový adaptér.

Pro čtení v tomto senzoru jsem použil MCP3008, což je IC pro čtení analogových signálů. IC může pracovat na 3,3 V nebo 5 V, ale já jsem si vybral 3,3 V, aby byl kompatibilní s RPi. To znamenalo, že jsem potřeboval změnit výstupní napětí z 5V na 3,3V. Udělal jsem to přidáním děliče napětí vytvořeného 2 odpory (2k a 1k ohm).

Čidlo směru větru:

Směr větru je stejně důležitý jako rychlost větru, proto jej připojím příště.

Tento snímač má stejnou specifikaci jako snímač rychlosti větru. Bude také pracovat na 9V a má výstupní napětí 5 voltů. Také tento senzor připojíme k MCP3008 pomocí děliče napětí.

DHT22 (vlhkost):

DHT22 čte vlhkost. Udává hodnotu v procentech a její hodnotu lze přečíst pomocí protokolu I2C na RPi. Proto musíte povolit I2C porty v Raspi-config. Více informací zde.

BMP280 (tlak vzduchu):

BMP280 se používá ke čtení tlaku vzduchu. Jeho hodnota se načte přes sběrnici SPI na RPi. Tento protokol je také nutné povolit v Raspi-config. Pro svůj kód jsem použil knihovnu Adafruit.

DS18B20 (teplota):

Poslední senzor měří teplotu. tento senzor pochází z Dallasu a pokud máte s Dallasem trochu zkušeností, pravděpodobně už víte, že používají sběrnici 1Wire. Nebuďte překvapeni, když řeknu, že tento protokol je také nutné povolit v Raspi-config.

Jak jsem připojil senzory:

Jako pdf jsem nahrál schéma elektrického a prkénka, abych to trochu usnadnil.

Poté, co budete moci senzory úspěšně připojit a přidáte kód potřebný ke čtení všech senzorů, můžete pokračovat a přejít na další krok. Pokud chcete nechat senzor za sebou nebo chcete přidat další, můžete tak učinit.

Krok 4: Navrhování webového uživatelského rozhraní

Navrhování webového uživatelského rozhraní
Navrhování webového uživatelského rozhraní
Navrhování webového uživatelského rozhraní
Navrhování webového uživatelského rozhraní
Navrhování webového uživatelského rozhraní
Navrhování webového uživatelského rozhraní

Nyní jsme připojili senzory, které potřebujeme pro náš web.

Chceme, aby webové stránky vytvářely snadný vzhled a zároveň zobrazovaly všechna data senzorů v reálném čase.

Chceme také vidět historii těchto naměřených hodnot za časový interval.

Nejprve jsem se tedy začal rozhlížet po webu, abych našel inspiraci. Nejvíc ze všeho tam, kde jsou jen stránky s informacemi o wheateru, aniž by byl design, který jsem hledal. Meteorologické stanice, které již byly na trhu, měly s největší pravděpodobností displej. A z toho displeje přišla moje inspirace. Většina displejů má design s mřížkovým vzhledem. To mě napadlo vytvořit domovskou stránku, kde by se zobrazovaly všechny senzory.

Ale také jsem řekl, že chci vytvořit stránku, kde můžete vidět historii každého senzoru a jeho hodnoty.

Z tohoto důvodu jsem také vytvořil 2. stránku ve svém návrhu, která obsahuje toto. Na této stránce jsem viděl nějaké další informace o mém senzoru, které by nebyly zobrazeny na mé titulní stránce a mimo část historie.

Po několika hodinách jsem nechal vypracovat celý svůj design!

Design byl vytvořen pomocí Adobe XD.

Krok 5: Vytvoření databáze

Vytváření databáze
Vytváření databáze

Abych si odpočinul od návrhové části, začal jsem ve své databázi.

Tato databáze by obsahovala všechny senzory (5), všechny akční členy (2) a hodnoty, které tyto senzory měly.

Databáze je poměrně snadná a má několik vazeb.

Model databáze můžete vidět na fotografii.

Krok 6: Kódování webu: Frontend (html Css)

Zpět na web!

Nyní mám návrh, který mohu začít kódovat jako html css, abych jej skutečně použil.

Na domovské stránce:

Začal jsem tím, že jsem každý senzor považoval za prvek na svých webových stránkách. Abych mohl později nechat tuto část vygenerovat mým kódem Javascriptu.

Také jsem do prvků vložil náhodné třídy držáků JS. Ty by umožnily změnit obsah tohoto prvku

Trvalo mi to hodně času, protože v tomto konkrétním jazyce nejsem tak dobrý.

Po dokončení domovské stránky nastal čas začít na stránce historie.

Na stránce historie:

Tuto stránku bylo trochu jednodušší znovu vytvořit. Na této stránce byli také držitelé js, kteří získali informace o senzoru, slot pro hodnoty v reálném čase a zobrazili tabulku se všemi naměřenými hodnotami.

Abych na svém webu vytvořil záložku pro výběr mezi tabulkou nebo grafem, musel jsem přidat trochu Javascriptu, aby se prvky nezobrazovaly nebo nezobrazovaly.

Nyní máme úžasný web, ale nemůžeme na něm nic ukázat? Pojďme to opravit.

Můj kód najdete v mém úložišti github:

Krok 7: Kódování webu: Backend (eventlet) + Coding Frontend (javascript)

Backend:

I když je backend server již nainstalován, musíme to ještě implementovat do našeho projektu. Nejprve musíme přidat nějaké importy, aby vše fungovalo správně.

z baňky import Baňka, požadavek, jsonify z flask_socketio import SocketIO z flask_cors import CORS

Aby se server spustil, musíme přidat následující:

socketio.run (aplikace, ladění = False, hostitel = '0,0.0.0')

Server je nyní online, ale nebude moci mluvit s frontendem.

Nic neobdrží ani nevrátí. Pojďme to změnit.

Chcete -li požádat o všechna čidla v databázi, přidá se trasa:

@app.route (koncový bod + '/senzory', metody = ['GET']) def get_sensors (): if request.method == 'GET': s = DataRepository.get_sensors () return jsonify (sensor = s), 200

Tento kód používá třídu s názvem DataRepository a mluví do databáze. Tady nám to vrací senzory, o které jsme požádali.

Potřebujeme také trasu, abychom se informovali o 1 konkrétním senzoru a dalším o hodnotách daného senzoru.

To jsou všechny trasy, ale aby byla možná data v reálném čase. Musíme v každém intervalu odeslat data, která senzory právě přečetly. K tomu používáme připojení Socket-IO. Jedná se o připojení navázané od okamžiku, kdy někdo načte web pomocí JS a toto připojení zůstane otevřené. Toto je plně duplexní připojení, což znamená, že jde o připojení, které funguje oběma způsoby (odesílání i přijímání) současně. Abychom to mohli použít, musíme přidat následující kód.

@socketio.on ('connect') def initial_connection (): print ('A new client connect') socketio.send ("U bent geconnecteerd") # # Odeslat klientovi!

Tento mír kódu se spustí, když se klient připojí.

K získání jakékoli zprávy z frontendu můžete použít tento kód.

@socketio.on ('message') def message_recieved (): pass

Můžete také posílat zprávy. To se provádí následujícím způsobem.

socketio.emit ('Update_RTD', dict_results, broadcast = True)

Prvním daným argumentem může být cokoli chcete, ale bude odpovídat tomu, co jste vložili do svého JS, a můžete s ním také posílat objekty. Toto je volitelné.

Javascript:

Je důležité přidat trochu JS, aby byl server propojen s backendovým serverem, aby mohl zobrazovat aktuální data a získávat informace z databáze.

Zavoláme funkce socketIO, které jsme vytvořili pro příjem a odesílání dat.

Když přijmeme data jako objekt JSON, demontujeme je, abychom získali požadované informace, a poté je vložíme do držáků JS, které jsme vložili na náš web.

Můj kód najdete v mém úložišti github:

Krok 8: Výroba pouzdra

Výroba pouzdra
Výroba pouzdra
Výroba pouzdra
Výroba pouzdra
Výroba pouzdra
Výroba pouzdra
Výroba pouzdra
Výroba pouzdra

Skříň zabrala spoustu práce a lze ji provést jakýmkoli způsobem chcete. Takhle jsem to udělal.

Vzal jsem nějaké přepravky na víno.

Jeden z nich jsem použil jako krabici pro uložení mých RPi a většiny mých senzorů.

Senzor rychlosti větru a snímač směru větru samozřejmě nebyly umístěny uvnitř, ale na příčníku umístěném na sloupu. Na tento sloup jsem zavěsil bednu na víno, kde jsem také udělal dveře.

Na fotografiích můžete vidět, jak jsem dokončil svůj projekt.

Toto je samozřejmě příklad toho, jak to můžete udělat. Můžete si s tím dělat, co chcete.

Doporučuje: