Kazalo:

Lokalna vremenska postaja: 8 korakov (s slikami)
Lokalna vremenska postaja: 8 korakov (s slikami)

Video: Lokalna vremenska postaja: 8 korakov (s slikami)

Video: Lokalna vremenska postaja: 8 korakov (s slikami)
Video: Untouched for 25 YEARS ~ Abandoned Home of the American Flower Lady! 2024, November
Anonim
Lokalna vremenska postaja
Lokalna vremenska postaja

Ko sem iskal odličen projekt za svoj prvošolski projekt, sem imel veliko idej, kaj naj naredim, vendar nobena od njih ni bila zahtevna.

Kasneje sem razmišljal o izdelavi vremenske postaje, ki bi imela nekaj posebnega. Želel sem shraniti vse svoje podatke in jih kasneje uporabiti za statistiko. Ta projekt bi bil posebej narejen za osebe, ki se zanimajo za meteorologijo in želijo doma izdelano vremensko postajo, ki ne stane toliko kot tiste, ki so na voljo na trgu. Projekt je namenjen tudi ohranjanju zmožnosti dodajanja ali odstranjevanja senzorjev kadar koli.

Bil sem res vesel, ko sem videl svoj končni rezultat, ki se je izkazal za boljšega od pričakovanega.

Narejen je iz Raspberry Pi 4 z Linuxom.

  • Spletno mesto Apache (html css js)
  • Eventlet (spletno mesto zalednega strežnika)
  • MariaDB (strežnik baz podatkov)

Zaloge

  • Raspberry Pi 4:

    SD-kartica (najmanj 16 GB)

  • Senzorji:

    1. Senzor hitrosti vetra QS-FS
    2. Senzor vetra Vrtni signalni izhod Aluminijasta zlitina Senzor smeri vetra Senzor hitrosti lopatice vetra https://www.banggood.com/Wind-Sensor-Garden-Signal-Output-Aluminij-Alloy-Wind-Direction-Sensor-Wind-Vane-Speed -Measuring-Instrument-p-1624988.html? Rmmds = myorder & cur_warehouse = CN
    3. DHT22 (vlažnost)
    4. BMP280 (zračni tlak)
    5. DS18B20 (temperatura)
  • Napajalniki

    • 5v napajalnik (RPi)
    • 9v napajanje (na zunanjem napajalniku)
  • Ogledna plošča (x2)

    T-cobbler plus za RPi 4

  • mostične žice
  • IC -ji

    • MCP3008
    • PCF8574AN
  • LCD zaslon 16x2
  • LED (rdeča
  • Ohišje (optinalno)

    • zaboji za vino
    • leseni drog (2 m)
    • lesena deska (1 m)

1. korak: Pripravite stvari

Vedno je zelo pomembno, da dobite vse predmete, ki jih potrebujete, preden se lotite koraka. To vam bo prihranilo veliko časa pri delu.

Torej najprej, Kaj potrebujete:

  • Raspberry Pi 4:

    SD-kartica (najmanj 16 GB)

  • Senzorji:

    1. Senzor hitrosti vetra QS-FS
    2. Senzor vetra Vrtni signalni signal Aluminijasta zlitina Senzor smeri vetra Senzor hitrosti vetrne lopatice
    3. DHT22 (vlažnost)
    4. BMP280 (zračni tlak)
    5. DS18B20 (temperatura)
  • Napajalniki

    • 5v napajalnik (RPi)
    • 9v napajanje (na zunanjem napajalniku)
  • Okvir (x2)
  • T-cobbler plus za RPi 4
  • mostične žice
  • IC -ji

    • MCP3008
    • PCF8574AN
  • LCD zaslon 16x2
  • LED (rdeča)
  • Ohišje (optinalno)

    • leseno vino
    • lesena deska (1 m)
    • palica (2 m)

Vse povezave, kjer sem jih kupil, najdete v razdelku zaloge pod uvodom.

2. korak: Nastavitev RPi

Nastavitev RPi
Nastavitev RPi

Za naš projekt potrebujemo RPi z nameščeno programsko opremo.

  • Spletno mesto Apache (html css js)
  • Flask Socket-IO (spletno mesto zalednega strežnika)
  • MariaDB (strežnik baz podatkov)

Pred namestitvijo je vedno priročno, da se prepričate, da imate na svojem računalniku nameščeno najnovejšo programsko opremo RPi. Če želite to narediti, preprosto izvedite naslednji ukaz:

sudo apt posodobitev

Apache:

Najprej se pogovorimo o Apacheju. Apache je spletni strežnik, ki se uporablja po vsem svetu. Brezhibno vodi vašo spletno stran. Edino, kar morate storiti, je, da ga namestite in svoje spletno mesto postavite v pravo mapo in tam je.

sudo apt namestite apache2 -y

To je to!

Če želite zagotoviti, da je vse pravilno nameščeno, brskajte po svojem naslovu maline pi v svojem brskalniku in preverite, ali imate privzeto spletno mesto. Če imate v zvezi s tem korakom težave, lahko tukaj preverite spletno stran RPi.

Dogodek:

Zdaj namestimo Eventlet. Izvajal bo naš zaledni strežnik in vzpostavil povezavo od naših senzorjev do našega spletnega mesta. Za to potrebujemo nekaj paketov.

Vtičnica za bučkoIO:

pip3 namestite flask-socketio

Dogodek:

pip3 namestite dogodek

Gevent:

pip3 namestite gevent

Mariadb:

Mariadb je baza podatkov, ki temelji na MySQL in ustvarja relacijske baze podatkov. Pogosto se uporablja na RPi, zato je na internetu veliko pomoči. Za več informacij obiščite to povezavo.

apt install mariadb-server

3. korak: Priključitev senzorjev in dodajanje kode

Priključitev senzorjev in dodajanje kode
Priključitev senzorjev in dodajanje kode
Priključitev senzorjev in dodajanje kode
Priključitev senzorjev in dodajanje kode
Priključitev senzorjev in dodajanje kode
Priključitev senzorjev in dodajanje kode

Za povezavo senzorjev z RPi lahko uporabimo T-Cobbler plus. To je priročno majhno orodje, ki omogoča uporabo vseh vaših zatičev na vašem RPi na plošči.

V svojem projektu imam 5 senzorjev:

  1. Senzor hitrosti vetra QS-FS
  2. Senzor vetra Vrtni signalni signal Aluminijasta zlitina Senzor smeri vetra Senzor vetra Lopatica za merjenje hitrosti
  3. DHT22 (vlažnost)
  4. BMP280 (zračni tlak)
  5. DS18B20 (temperatura)

Senzor hitrosti vetra:

Najprej sem začel s senzorjem hitrosti vetra, ker sem bil nad tem senzorjem predvsem navdušen. Je senzor z analognim signalom 0-5v izhoda in za delovanje potrebuje napetost najmanj 7 voltov. Za napajanje se odločim za 9 -voltni adapter.

Za branje v tem senzorju sem uporabil MCP3008, ki je IC za branje analognih signalov. IC lahko deluje na 3.3V ali 5V, vendar se odločim za 3.3V, da bo združljiv z RPi. To je pomenilo, da sem moral spremeniti izhodno napetost s 5V na 3.3V. To sem storil z dodajanjem delilnika napetosti, ki sta ga ustvarila 2 upora (2k in 1k ohm).

Senzor smeri vetra:

Smer vetra je prav tako pomembna kot hitrost vetra, zato bom to povezal naslednjič.

Ta senzor ima enake specifikacije kot senzor hitrosti vetra. Deloval bo tudi na 9V in ima izhodno napetost 5 voltov. Tudi ta senzor bomo povezali z MCP3008 prek delilnika napetosti.

DHT22 (vlažnost):

DHT22 bere vlažnost. Daje vrednost v odstotkih, njeno vrednost pa lahko preberete z uporabo protokola I2C na RPi. Zato morate v konfiguraciji Raspi omogočiti vrata I2C. Več informacij tukaj.

BMP280 (zračni tlak):

BMP280 se uporablja za odčitavanje zračnega tlaka. Njegova vrednost se bere prek vodila SPI na RPi. Ta protokol je treba omogočiti tudi v konfiguraciji Raspi. Za svojo kodo sem uporabil knjižnico Adafruit.

DS18B20 (temperatura):

Zadnji senzor meri temperaturo. ta senzor je iz Dallasa in če ste imeli nekaj izkušenj z Dallasom, bi verjetno morali vedeti, da uporabljajo vodilo 1Wire. Naj vas ne preseneti, če rečem, da je treba ta protokol omogočiti tudi v konfiguraciji Raspi.

Kako sem priključil senzorje:

Kot pdf sem naložil električno shemo in shemo za lažje olajšanje.

Ko ste lahko uspešno povezali senzorje in ste dodali kodo, potrebno za branje vseh senzorjev, lahko nadaljujete in preidete na naslednji korak. Če želite pustiti senzor za seboj ali želite dodati več, lahko to storite.

4. korak: Oblikovanje spletnega vmesnika

Oblikovanje spletnega uporabniškega vmesnika
Oblikovanje spletnega uporabniškega vmesnika
Oblikovanje spletnega uporabniškega vmesnika
Oblikovanje spletnega uporabniškega vmesnika
Oblikovanje spletnega uporabniškega vmesnika
Oblikovanje spletnega uporabniškega vmesnika

Zdaj smo povezali senzorje, ki jih potrebujemo za oblikovanje naše spletne strani.

Želimo, da spletno mesto ustvari enostaven videz in hkrati prikaže vse podatke senzorjev v realnem času.

Prav tako želimo videti zgodovino teh izmerjenih vrednosti v časovnem intervalu.

Tako sem najprej začel iskati po spletu po navdih. Predvsem tam, kjer so samo informativna spletna mesta o pšenici brez pravega dizajna, ki sem ga iskal. Vremenske postaje, ki so bile že na trgu, so najverjetneje imele zaslon. In iz tega prikaza je prišel moj navdih. Večina zaslonov ima obliko z mrežo. To mi je dalo idejo, da bi ustvarila domačo stran, kjer bi bili prikazani vsi senzorji.

Rekel pa sem tudi, da želim narediti stran, na kateri si lahko ogledate zgodovino vsakega senzorja in njegove vrednosti.

Zaradi tega sem v svoji zasnovi naredil tudi drugo stran, ki vsebuje to. Na tej strani sem lahko videl nekaj dodatnih informacij o svojem senzorju, ki ne bi bile prikazane na moji sprednji strani in seveda v zgodovinskem delu.

Po nekaj urah sem izdelal celoten dizajn!

Zasnova je bila narejena z uporabo Adobe XD.

5. korak: Ustvarjanje baze podatkov

Ustvarjanje baze podatkov
Ustvarjanje baze podatkov

Za odmik od oblikovalskega dela sem začel v svoji bazi podatkov.

Ta zbirka podatkov bi vsebovala vse senzorje (5), vse aktuatorje (2) in vrednosti, ki so jih ti senzorji imeli.

Baza podatkov je precej enostavna in ima nekaj razmerij.

Model fotografije baze podatkov si lahko ogledate na fotografiji.

6. korak: Kodiranje spletnega mesta: Frontend (html Css)

Nazaj na spletno stran!

Zdaj imam obliko, ki jo lahko začnem kodirati kot html css, da jo resnično uporabim.

Na domači strani:

Začel sem z obravnavo vsakega senzorja kot elementa na moji spletni strani. Tako, da sem kasneje lahko pustil, da ta del ustvari moja koda Javascript.

V elemente sem vstavil tudi naključne razrede imetnikov JS. Tako bi lahko spremenili vsebino tega elementa

To mi je vzelo veliko časa, ker nisem tako dober v tem jeziku.

Ko ste naredili domačo stran, je bil čas, da začnete na strani z zgodovino.

Na strani zgodovine:

To stran je bilo nekoliko lažje ustvariti. Na tej strani so bili tudi js-imetniki, da bi dobili podatke o senzorju, režo vrednosti v realnem času in prikazali tabelo z vsemi izmerjenimi vrednostmi.

Če želite na svojem spletnem mestu ustvariti možnost zavihka za izbiro med tabelo ali grafikonom, sem moral dodati malo Javascripta, da se elementi ne prikažejo ali prikažejo.

Zdaj imamo osupljivo spletno mesto, vendar na njem ne moremo ničesar prikazati? Odpravimo to.

Mojo kodo najdete v mojem skladišču github:

Korak 7: Kodiranje spletnega mesta: Backend (eventlet) + Coding Frontend (javascript)

Zaledje:

Medtem ko je zaledni strežnik že nameščen, moramo to še vedno implementirati v naš projekt. Najprej moramo dodati nekaj uvoza, da bo vse delovalo pravilno.

iz flask import Flask, request, jsonify from flask_socketio import SocketIO from flask_cors import CORS

Za zagon strežnika moramo dodati naslednje:

socketio.run (app, debug = False, host = '0.0.0.0')

Zdaj je strežnik na spletu, vendar ne bo mogel govoriti s prednjo stranjo.

Nič ne prejme in ne vrne. To spremenimo.

Če želite zahtevati vse senzorje v zbirki podatkov, bo wel dodal pot:

@app.route (endpoint + '/sensors', methods = ['GET']) def get_sensors (): če request.method == 'GET': s = DataRepository.get_sensors () vrne jsonify (sensors = s), 200

Ta koda uporablja razred, imenovan DataRepository, in govori v zbirko podatkov. Tu nam vrne zahtevane senzorje.

Potrebujemo tudi pot, da povprašamo podatke o enem posebnem senzorju in še enem za vrednosti določenega senzorja.

Vse to so poti, vendar za omogočanje podatkov v realnem času. Vsak interval moramo poslati podatke, ki so jih senzorji pravkar prebrali. Za to uporabljamo povezavo Socket-IO. To je povezava, vzpostavljena od trenutka, ko nekdo naloži spletno mesto z JS, in ta povezava ostane odprta. To je polno-dupleksna povezava, kar pomeni, da deluje hkrati na oba načina (pošiljanje in prejemanje). Če želimo to uporabiti, moramo dodati naslednjo kodo.

@socketio.on ('connect') def initial_connection (): print ('A new client connect') socketio.send ("U bent geconnecteerd") # # Pošlji odjemalcu!

Ta mir kode se zažene, ko se odjemalec poveže.

Če želite prejeti kakršno koli sporočilo s strani, lahko uporabite to kodo.

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

Lahko tudi pošiljate sporočila. To dosežemo z naslednjim.

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

Prvi podani argument je lahko karkoli želite, vendar bo ustrezal temu, kar ste vnesli v svoj JS, z njim pa lahko pošiljate tudi predmete. To ni obvezno.

Javascript:

Pomembno je, da dodate malo JS, da bo strežnik povezan z zalednim strežnikom, da bo lahko prikazal trenutne podatke in dobil podatke iz baze podatkov.

Poklicali bomo funkcije socketIO, ki smo jih naredili za sprejem in pošiljanje podatkov.

Ko prejemamo podatke kot objekt Json, jih bomo razstavili, da dobimo želene podatke, in jih nato vnesli v nosilce JS, ki smo jih dali na naše spletno mesto.

Mojo kodo najdete v mojem skladišču github:

8. korak: izdelava ohišja

Izdelava ohišja
Izdelava ohišja
Izdelava ohišja
Izdelava ohišja
Izdelava ohišja
Izdelava ohišja
Izdelava ohišja
Izdelava ohišja

Ohišje je zahtevalo veliko dela in ga lahko izvedete na kakršen koli način. Tako sem naredil.

Vzel sem nekaj zabojev za vino.

Enega od njih sem uporabil kot škatlo za shranjevanje svojega RPi in večine mojih senzorjev.

Senzor hitrosti vetra in senzor smeri vetra seveda nista bila postavljena v notranjost, ampak na prečko, nameščeno na drogu. Na ta drog sem obesil zaboj za vino, za katerega sem naredil tudi vrata.

Kako sem zaključil svoj projekt, si lahko ogledate na fotografijah.

To je seveda primer, kako lahko to storite. Z njim lahko počnete, kar želite.

Priporočena: