Obsah:

Miestna meteorologická stanica: 8 krokov (s obrázkami)
Miestna meteorologická stanica: 8 krokov (s obrázkami)

Video: Miestna meteorologická stanica: 8 krokov (s obrázkami)

Video: Miestna meteorologická stanica: 8 krokov (s obrázkami)
Video: Знаменитый КИЕВСКИЙ Торт Безе с орехами и кремом Шарлотт. Торт Киевский в домашних условиях Пошагово 2024, Júl
Anonim
Miestna meteorologická stanica
Miestna meteorologická stanica

Keď som hľadal skvelý projekt pre svoj prvý školský projekt, mal som veľa nápadov, čo urobiť, ale žiadny z nich mi neprišiel náročný.

Neskôr som mal v úmysle vytvoriť meteorologickú stanicu, ktorá by mala niečo špeciálne. Chcel som mať možnosť uložiť všetky svoje údaje a neskôr ich použiť na štatistiky. Tento projekt by bol špeciálne vytvorený pre osoby, ktoré sa zaujímajú o meteorológiu a chcú doma vytvorenú meteorologickú stanicu, ktorá nestojí toľko ako tie, ktoré sú dostupné na trhu. Cieľom projektu je tiež zachovať možnosť kedykoľvek pridať alebo odstrániť senzory.

Bol som skutočne šťastný, keď som videl svoj konečný výsledok, ktorý dopadol lepšie, ako sa očakávalo.

Je vyrobený z linuxového Raspberry Pi 4.

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

Zásoby

  • Raspberry Pi 4:

    SD karta (min. 16 GB)

  • Senzory:

    1. Senzor rýchlosti vetra QS-FS
    2. Senzor vetra Výstup signálu záhrady Zliatina hliníka Senzor smeru vetra Nástroj na meranie rýchlosti veternej lopatky https://www.banggood.com/Wind-Sensor-Garden-Signal-Output-Aluminium-Alloy-Wind-Direction-Sensor-Wind-Vane-Speed -Meracie-zariadenie-p-1624988.html? Rmmds = myorder & cur_warehouse = CN
    3. DHT22 (vlhkosť)
    4. BMP280 (tlak vzduchu)
    5. DS18B20 (teplota)
  • Napájacie zdroje

    • Napájanie 5v (RPi)
    • Napájanie 9 V (na externom napájacom zdroji)
  • Breadboard (x2)

    T-cobbler plus pre RPi 4

  • prepojovacie vodiče
  • IC

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

    • prepravky na víno
    • drevený stĺp (2 m)
    • drevená doska (1 m)

Krok 1: Príprava vecí

Predtým, ako začnete pracovať na kroku, je vždy dôležité získať všetky potrebné položky. To vám ušetrí veľa času pri práci cez to.

Tak po prvé, Čo potrebuješ:

  • Raspberry Pi 4:

    SD karta (min. 16 GB)

  • Senzory:

    1. Snímač rýchlosti vetra QS-FS
    2. Senzor vetra Výstup signálu záhrady z hliníkovej zliatiny Senzor smeru vetra Nástroj na meranie rýchlosti veternej lopatky
    3. DHT22 (vlhkosť)
    4. BMP280 (tlak vzduchu)
    5. DS18B20 (teplota)
  • Napájacie zdroje

    • Napájanie 5v (RPi)
    • Napájanie 9 V (na externom napájacom zdroji)
  • Breadboard (x2)
  • T-cobbler plus pre RPi 4
  • prepojovacie vodiče
  • IC

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

    • debny na víno drevené
    • drevená doska (1 m)
    • stĺp (2m)

Všetky odkazy, kde som ich kúpil, nájdete v sekcii zásoby pod úvodom.

Krok 2: Nastavenie RPi

Nastavenie RPi
Nastavenie RPi

Pre náš projekt potrebujeme RPi s nainštalovaným daným softvérom.

  • Web Apache (html css js)
  • Flask Socket-IO (webový server backendu)
  • MariaDB (databázový server)

Pred inštaláciou je vždy vhodné uistiť sa, že máte v RPi nainštalovaný najnovší softvér. Ak to chcete urobiť, spustite nasledujúci príkaz:

sudo apt aktualizácia

Apache:

Najprv si povedzme niečo o Apache. Apache je webový server, ktorý sa používa po celom svete. Prevádzkuje váš web bezchybne. Jediná vec, ktorú musíte urobiť, je nainštalovať ju a vložiť webovú stránku do správneho priečinka a je to tam.

sudo apt nainštalovať apache2 -y

To je všetko!

Aby ste sa uistili, že je všetko nainštalované správne, v prehliadači navštívte svoju malinskú adresu IP pi a zistite, či máte predvolenú webovú stránku. Ak máte s týmto krokom akékoľvek problémy, môžete sa pozrieť na webovú stránku RPi tu.

Eventlet:

Teraz nainštalujme Eventlet. Spustí náš server typu backend a vytvorí pripojenie z našich senzorov k našej webovej stránke. Na to potrebujeme pár balíkov.

Flask-socketIO:

pip3 nainštalujte flask-socketio

Eventlet:

eventlet inštalácie pip3

Gevent:

pip3 install gevent

Mariadb:

Mariadb je databáza založená na MySQL, ktorá vytvára relačné databázy. Často sa používa na RPi, a preto je na internete veľa pomoci. Ak chcete získať ďalšie informácie, môžete prejsť na tento odkaz.

apt install mariadb-server

Krok 3: Pripojenie senzorov a pridanie kódu

Pripojenie senzorov a pridanie kódu
Pripojenie senzorov a pridanie kódu
Pripojenie senzorov a pridanie kódu
Pripojenie senzorov a pridanie kódu
Pripojenie senzorov a pridanie kódu
Pripojenie senzorov a pridanie kódu

Na pripojenie senzorov k nášmu RPi môžeme použiť T-Cobbler plus. Je to šikovný malý nástroj, ktorý umožňuje použiť všetky vaše špendlíky na RPi na doske.

V mojom projekte mám 5 senzorov:

  1. Snímač rýchlosti vetra QS-FS
  2. Senzor vetra Výstup signálu záhrady, hliníková zliatina, snímač smeru vetra, nástroj na meranie rýchlosti veternej lopatky
  3. DHT22 (vlhkosť)
  4. BMP280 (tlak vzduchu)
  5. DS18B20 (teplota)

Senzor rýchlosti vetra:

Najprv som začal so snímačom rýchlosti vetra, pretože som bol z tohto senzora väčšinou nadšený. Je to senzor s analógovým signálom výstupu 0-5V a na svoju činnosť potrebuje napätie minimálne 7 voltov. Na napájanie som sa vybral pre 9 voltový adaptér.

Na čítanie v tomto senzore som použil MCP3008, čo je IC na čítanie analógových signálov. IC môže pracovať na 3,3 V alebo 5 V, ale ja som si vybral 3,3 V, aby bol kompatibilný s RPi. To znamenalo, že som potreboval zmeniť výstupné napätie z 5V na 3,3V. Urobil som to pridaním deliča napätia vytvoreného 2 odpormi (2k a 1k ohm).

Senzor smeru vetra:

Smer vetra je rovnako dôležitý ako rýchlosť vetra, preto ho pripojím nabudúce.

Tento snímač má rovnakú špecifikáciu ako snímač rýchlosti vetra. Bude tiež fungovať na 9V a má výstupné napätie 5 voltov. Aj tento senzor pripojíme k MCP3008 pomocou deliča napätia.

DHT22 (vlhkosť):

DHT22 sníma vlhkosť. Udáva hodnotu v percentách a jej hodnotu je možné prečítať pomocou protokolu I2C na zariadení RPi. Preto musíte v Raspi-config povoliť porty I2C. Viac info tu.

BMP280 (tlak vzduchu):

BMP280 sa používa na čítanie tlaku vzduchu. Jeho hodnota sa číta pomocou zbernice SPI na RPi. Tento protokol je tiež potrebné povoliť v Raspi-config. Pre svoj kód som použil knižnicu Adafruit.

DS18B20 (teplota):

Posledný snímač meria teplotu. tento senzor je z Dallasu a ak máte s Dallasom trochu skúseností, pravdepodobne by ste už mali vedieť, že používajú 1Wire-bus. Nebuďte prekvapení, ak poviem, že aj tento protokol je potrebné povoliť v Raspi-config.

Ako som pripojil senzory:

Ako pdf som nahral schému elektrického a breadboardu, aby to bolo trochu jednoduchšie.

Potom, čo budete môcť senzory úspešne pripojiť a pridáte kód potrebný na prečítanie všetkých senzorov, môžete pokračovať a prejsť na ďalší krok. Ak chcete nechať snímač za sebou alebo by ste chceli pridať ďalšie, môžete to urobiť.

Krok 4: Navrhovanie webového používateľského rozhrania

Navrhovanie webového rozhrania
Navrhovanie webového rozhrania
Navrhovanie webového rozhrania
Navrhovanie webového rozhrania
Navrhovanie webového rozhrania
Navrhovanie webového rozhrania

Teraz sme pripojili senzory, ktoré potrebujeme pre náš web.

Chceme, aby webová stránka vyzerala jednoducho a zároveň zobrazovala všetky údaje senzorov v reálnom čase.

Chceme tiež vidieť históriu týchto nameraných hodnôt za časový interval.

Najprv som sa teda začal poobzerať po internete, aby som našiel inšpiráciu. Predovšetkým tam, kde sú len informačné stránky o bezvýchodiskových produktoch bez skutočne dizajnu, ktorý som hľadal. Meteorologické stanice, ktoré už boli na trhu, mali s najväčšou pravdepodobnosťou displej. A z toho displeja vyšla moja inšpirácia. Väčšina displejov má dizajn s mriežkovým vzhľadom. To mi dalo nápad vytvoriť domovskú stránku, na ktorej sa budú zobrazovať všetky senzory.

Ale tiež som povedal, že chcem vytvoriť stránku, na ktorej by ste mohli vidieť históriu každého senzora a jeho hodnoty.

Z tohto dôvodu som vo svojom návrhu taktiež vytvoril 2. stránku, ktorá obsahuje toto. Na tejto stránke som mohol vidieť niekoľko ďalších informácií o mojom senzore, ktoré by sa nezobrazovali na mojej titulnej stránke a mimo časť histórie.

Po niekoľkých hodinách som mal vypracovaný celý dizajn!

Návrh bol vytvorený pomocou programu Adobe XD.

Krok 5: Vytvorenie databázy

Vytváranie databázy
Vytváranie databázy

Aby som si oddýchol od návrhovej časti, začal som vo svojej databáze.

Táto databáza by obsahovala všetky senzory (5), všetky akčné členy (2) a hodnoty, ktoré tieto senzory mali.

Databáza je veľmi jednoduchá a má niekoľko vzťahov.

Model databázy môžete vidieť na fotografii.

Krok 6: Kódovanie webu: Frontend (html Css)

Späť na webovú stránku!

Teraz mám návrh, ktorý môžem začať kódovať ako html css, aby som ho skutočne mohol používať.

Na domovskej stránke:

Začal som tým, že som každý senzor považoval za prvok na svojej webovej stránke. Aby som neskôr mohol nechať vygenerovať túto časť pomocou môjho kódu JavaScript.

Do prvkov som vložil aj náhodné triedy držiteľov JS. To by umožnilo zmeniť obsah tohto prvku

Trvalo mi to veľa času, pretože v tomto konkrétnom jazyku nie som taký dobrý.

Po dokončení domovskej stránky bolo načase začať na stránke histórie.

Na stránke histórie:

Obnovenie tejto stránky bolo o niečo jednoduchšie. Na tejto stránke boli tiež držiaky js na získanie informácií o senzore, slote na hodnotu v reálnom čase a na zobrazenie tabuľky so všetkými nameranými hodnotami.

Na to, aby som na svojom webe mohol vytvárať záložky a vybrať si medzi tabuľkou alebo grafom, som musel pridať trochu Javascriptu, aby sa prvky nezobrazovali alebo nezobrazovali.

Teraz máme úžasný web, ale nemôžeme na ňom nič ukázať? Poďme to napraviť.

Môj kód nájdete v mojom úložisku github:

Krok 7: Kódovanie webu: Backend (eventlet) + Kódovanie frontendu (javascript)

Backend:

Kým je server typu backend už nainštalovaný, musíme to ešte implementovať do nášho projektu. Najprv musíme pridať nejaký import, aby všetko fungovalo správne.

z fľaše importovať banku, požiadať, jsonify z flask_socketio import SocketIO z flask_cors import CORS

Na spustenie servera musíme pridať nasledujúce položky:

socketio.run (aplikácia, ladenie = nepravda, hostiteľ = '0,0.0.0')

Server je teraz online, ale nemôže hovoriť s rozhraním frontend.

Nič nedostane ani nevráti. Zmeňme to.

Ak chcete požiadať o všetky senzory v databáze, pridá sa trasa:

@app.route (koncový bod + '/senzory', metódy = ['GET']) def get_sensors (): if request.method == 'GET': s = DataRepository.get_sensors () návrat jsonify (senzory = s), 200

Tento kód používa triedu s názvom DataRepository a hovorí do databázy. Tu nám to vracia senzory, o ktoré sme požiadali.

Potrebujeme tiež trasu na vyžiadanie informácií o 1 konkrétnom senzore a inom o hodnotách daného senzora.

To sú všetky trasy, ale aby boli možné údaje v reálnom čase. Každý interval musíme odoslať údaje, ktoré senzory práve načítajú. Na to používame pripojenie Socket-IO. Je to spojenie nadviazané od okamihu, keď niekto načíta webovú stránku pomocou JS a ponechá toto pripojenie otvorené. Jedná sa o plne duplexné pripojenie, čo znamená, že ide o spojenie, ktoré funguje oboma spôsobmi (odosielanie aj prijímanie) súčasne. Aby sme to mohli použiť, musíme pridať nasledujúci kód.

@socketio.on ('connect') def initial_connection (): print ('New client connect') socketio.send ("U bent geconnecteerd") # # Odoslať klientovi!

Tento mier kódu sa spustí, keď sa klient pripojí.

Na získanie akejkoľvek správy z frontendu môžete použiť tento kód.

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

Môžete tiež odosielať správy. To sa dosiahne nasledujúcim spôsobom.

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

Prvým daným argumentom môže byť čokoľvek chcete, ale bude zodpovedať tomu, čo ste zadali do svojho JS, a môžete s ním odosielať aj objekty. Toto je voliteľné.

Javascript:

Je dôležité pridať trochu JS, aby bol server prepojený so serverom typu backend, aby mohol zobrazovať aktuálne údaje a získavať informácie z databázy.

Budeme nazývať funkcie socketIO, ktoré sme vytvorili pre príjem a odosielanie dát.

Keď dostaneme údaje ako objekt JSON, rozložíme ich, aby sme získali požadované informácie, a potom ich vložíme do držiakov JS, ktoré sme vložili na našu webovú stránku.

Môj kód nájdete v mojom úložisku github:

Krok 8: Výroba puzdra

Výroba puzdra
Výroba puzdra
Výroba puzdra
Výroba puzdra
Výroba puzdra
Výroba puzdra
Výroba puzdra
Výroba puzdra

Plášť si vyžiadal veľa práce a dá sa vykonať akýmkoľvek spôsobom, akým len chcete. Takto som to urobil.

Vzal som niekoľko prepraviek na víno.

Jeden z nich som použil ako škatuľu na uloženie mojich RPi a väčšiny senzorov.

Senzor rýchlosti vetra a snímač smeru vetra samozrejme neboli umiestnené vo vnútri, ale na vrchu priečky umiestnenej na stĺpe. Na tento stĺp som zavesil prepravku na víno, pre ktorú som tiež vyrobil dvere.

Pohľadom na fotografie môžete vidieť, ako som dokončil svoj projekt.

Toto je samozrejme príklad toho, ako to môžete urobiť. Môžete si s ním robiť, čo chcete.

Odporúča: