Sisukord:

Kohalik ilmajaam: 8 sammu (piltidega)
Kohalik ilmajaam: 8 sammu (piltidega)

Video: Kohalik ilmajaam: 8 sammu (piltidega)

Video: Kohalik ilmajaam: 8 sammu (piltidega)
Video: Невероятные приключения итальянцев в России (4К, комедия, реж. Эльдар Рязанов, 1973 г.) 2024, November
Anonim
Kohalik ilmajaam
Kohalik ilmajaam

Kui ma otsisin oma esimese aasta kooliprojekti jaoks suurepärast projekti, oli mul palju ideid, mida teha, kuid ühtegi neist ei pidanud ma väljakutsuvaks.

Hiljem mõtlesin teha ilmajaama, millel oleks midagi erilist. Tahtsin, et saaksin salvestada kõik oma andmed ja hiljem seda statistika jaoks kasutada. See projekt oleks mõeldud spetsiaalselt inimestele, kes tunnevad huvi meteoroloogia vastu ja soovivad kodus loodud ilmajaama, mis ei maksa nii palju kui turul saadaolev. Projekt on loodud ka selleks, et säilitada võimalus andureid igal ajal lisada või eemaldada.

Ma olin tõesti õnnelik, kui nägin oma lõpptulemust, mis osutus oodatust paremaks.

See on valmistatud Raspberry Pi 4 töötavast linuxist.

  • Apache veebisait (html css js)
  • Eventlet (tausta serveri veebisait)
  • MariaDB (andmebaasiserver)

Tarvikud

  • Vaarika Pi 4:

    sd-kaart (vähemalt 16 GB)

  • Andurid:

    1. QS-FS tuulekiiruse andur
    2. Tuuleanduri aiasignaali väljund Alumiiniumisulamist tuulesuuna andur Tuulelennuki kiiruse mõõtmisvahend https://www.banggood.com/Wind-Sensor-Garden-Signal-Output-Aluminum-Alloy-Wind-Dindction-Sensor-Wind-Vane-Speed -Measuring-Instrument-p-1624988.html? Rmmds = myorder & cur_warehouse = CN
    3. DHT22 (niiskus) https://www.bitsandparts.nl/Temperatuur- andurid-ja-Termmokoppels/Temperatuursensor-en-luchtvochtigheidssensor-DHT22/p109717
    4. BMP280 (õhurõhk) https://www.bitsandparts.nl/Temperatuur- andurid-ja-Termmokoppels/Barometrische-druksensor-hoogtemeter-temperatuursensor-I2C-SPI-BMP280/p124314
    5. DS18B20 (temperatuur) https://www.bitsandparts.nl/Temperatuur- andurid-ja-Termmokoppels/Temperatuursensor-1-Wire-Dallas-DS18B20/p109705
  • Toiteallikad

    • 5v toide (RPi)
    • 9v toide (välise leivaplaadi toiteallikaga)
  • Leivalaud (x2)

    T-cobbler pluss RPi 4 jaoks

  • hüppaja juhtmed
  • IC -d

    • MCP3008
    • PCF8574AN
  • LCD ekraan 16x2
  • LED (punane
  • Korpus (optiline)

    • veinikastid
    • puitpost (2m)
    • puitlaudis (1 m)

Samm: asjade ettevalmistamine

Enne sammu kallale asumist on alati väga oluline hankida kõik vajalikud esemed. See säästab selle töötamise ajal palju aega.

Nii et kõigepealt, Mida sul vaja on:

  • Vaarika Pi 4:

    sd-kaart (vähemalt 16 GB)

  • Andurid:

    1. QS-FS tuulekiiruse andur
    2. Tuuleanduri aiasignaali väljund Alumiiniumisulam
    3. DHT22 (niiskus)
    4. BMP280 (õhurõhk)
    5. DS18B20 (temperatuur)
  • Toiteallikad

    • 5v toide (RPi)
    • 9v toide (välise leivaplaadi toiteallikaga)
  • Leivalaud (x2)
  • T-cobbler pluss RPi 4 jaoks
  • hüppaja juhtmed
  • IC -d

    • MCP3008
    • PCF8574AN
  • LCD ekraan 16x2
  • LED (punane)
  • Korpus (optiline)

    • veini aedpuust
    • puitlaudis (1 m)
    • poolus (2m)

Kõik lingid, kust need ostsin, leiate sissejuhatava materjali jaotisest.

2. samm: RPi seadistamine

RPi seadistamine
RPi seadistamine

Meie projekti jaoks vajame RPi, kuhu on installitud antud tarkvara.

  • Apache veebisait (html css js)
  • Flask Socket-IO (tausta serveri veebisait)
  • MariaDB (andmebaasiserver)

Enne installimist on alati mugav veenduda, et RPi -sse on installitud uusim tarkvara. Selleks täitke lihtsalt järgmine käsk:

sudo apt värskendus

Apache:

Kõigepealt räägime Apache'ist. Apache on veebiserver, mida kasutatakse kogu maailmas. See juhib teie veebisaiti veatult. Ainuke asi, mida peate tegema, on see installida ja oma veebisait õigesse kausta panna ja seal see on.

sudo apt install apache2 -y

See on kõik!

Veendumaks, et kõik on õigesti installitud, sirvige oma brauseris oma vaarika pi Ip-aadressile ja vaadake, kas saate vaikeveebisaidi. Kui teil on selle sammuga probleeme, saate RPi veebisaiti vaadata siit.

Sündmus:

Nüüd installime Eventleti. See käivitab meie tausta serveri ja loob ühenduse meie anduritelt meie veebisaidile. Selleks vajame paari paketti.

Kolbipesa:

pip3 paigaldage kolb-pistikupesa

Sündmus:

pip3 installimisüritus

Gevent:

pip3 install gevent

Mariadb:

Mariadb on MySQL -põhine andmebaas, mis loob relatsioonilisi andmebaase. Seda kasutatakse sageli RPi -s ja seetõttu leiate Internetist palju abi. Lisateabe saamiseks võite minna sellele lingile.

apt install mariadb-server

Samm: andurite ühendamine ja koodi lisamine

Andurite ühendamine ja koodi lisamine
Andurite ühendamine ja koodi lisamine
Andurite ühendamine ja koodi lisamine
Andurite ühendamine ja koodi lisamine
Andurite ühendamine ja koodi lisamine
Andurite ühendamine ja koodi lisamine

Andurite ühendamiseks meie RPi-ga saame kasutada T-Cobbler plussi. See on mugav väike tööriist, mis võimaldab kasutada kõiki oma tihvte RPi peal leivaplaadil.

Minu projektis on mul 5 andurit:

  1. QS-FS tuulekiiruse andur
  2. Tuuleanduri aiasignaali väljund Alumiiniumisulam
  3. DHT22 (niiskus)
  4. BMP280 (õhurõhk)
  5. DS18B20 (temperatuur)

Tuule kiiruse andur:

Kõigepealt alustasin tuulekiiruse anduriga, sest olin sellest andurist enamasti elevil. See on andur, mille analoogsignaal on 0–5 V ja mille tööks on vaja vähemalt 7 volti pinget. Selle toiteks valin 9 -voldise adapteri.

Selle anduri lugemiseks kasutasin MCP3008, mis on analoogsignaalide lugemiseks mõeldud IC. IC võib töötada 3.3V või 5V, kuid ma valin 3.3V, et see RPi -ga ühilduks. See tähendas, et mul oli vaja muuta väljundpinge 5 V -lt 3,3 V -le. Ma tegin seda, lisades 2 takisti (2k ja 1k oomi) loodud pingejaguri.

Tuule suunaandur:

Tuule suund on sama oluline kui tuule kiirus, seetõttu ühendan selle järgmiseks.

Sellel anduril on sama spetsifikatsioon nagu tuulekiiruse anduril. See töötab ka 9 V peal ja selle väljundpinge on 5 volti. Ka selle anduri ühendame MCP3008 -ga pingejaguri kaudu.

DHT22 (niiskus):

DHT22 loeb niiskust. See annab teile väärtuse protsentides ja selle väärtust saab lugeda RPi protokolli I2C abil. Seetõttu peate lubama Raspi konfiguratsioonis I2C pordid. Rohkem infot siit.

BMP280 (õhurõhk):

BMP280 kasutatakse õhurõhu lugemiseks. Selle väärtust loetakse RPi SPI -siini kaudu. See protokoll tuleb lubada ka Raspi-konfiguratsioonis. Oma koodi jaoks kasutasin Adafruit raamatukogu.

DS18B20 (temperatuur):

Viimane andur mõõdab temperatuuri. see andur on pärit Dallasest ja kui teil on Dallasega vähe kogemusi, peaksite ilmselt juba teadma, et nad kasutavad 1Wire-bussi. Ärge imestage, kui ütlen, et see protokoll tuleb lubada ka Raspi-konfiguratsioonis.

Kuidas ma andurid ühendasin:

Laadisin pdf -failina üles elektri- ja leivaplaadi skeemi, et seda natuke lihtsamaks muuta.

Kui olete andurid edukalt ühendanud ja lisanud kõigi andurite lugemiseks vajaliku koodi, võite jätkata ja minna järgmise sammu juurde. Kui soovite anduri maha jätta või soovite seda rohkem lisada, saate seda teha.

4. samm: veebiliidese kujundamine

Veebiliidese kujundamine
Veebiliidese kujundamine
Veebiliidese kujundamine
Veebiliidese kujundamine
Veebiliidese kujundamine
Veebiliidese kujundamine

Nüüd ühendasime meie veebisaidi jaoks vajaliku kujunduse andurid.

Soovime, et veebisait looks lihtsa välimuse, näidates samal ajal kõiki andurite reaalajas andmeid.

Samuti soovime näha nende mõõdetud väärtuste ajalugu ajavahemiku kohta.

Niisiis hakkasin esmalt veebist natuke inspiratsiooni otsima. Eelkõige seal, kus on lihtsalt nisuinfo saidid ilma kujunduseta, mida ma otsisin. Ilmjaamadel, mis olid juba turul, oli tõenäoliselt ekraan. Ja sellest väljapanekust tuli minu inspiratsioon. Enamikul kuvaritel on ruudustikuga kujundus. See andis mulle idee luua koduleht, kus kuvatakse kõik andurid.

Kuid ma ütlesin ka, et tahan teha lehe, kus näete iga anduri ajalugu.

Sel põhjusel tegin oma disainis ka selle teise lehe. Sellel lehel nägin oma anduri kohta lisateavet, mida ei kuvataks minu esilehel ja muidugi ajaloo osas.

Mõne tunni pärast oli mul täielik disain välja töötatud!

Kujundus tehti Adobe XD abil.

5. samm: andmebaasi loomine

Andmebaasi loomine
Andmebaasi loomine

Projekteerimisosast pausi saamiseks alustasin oma andmebaasist.

See andmebaas sisaldaks kõiki andureid (5), kõiki täiturmehhanisme (2) ja nende andurite väärtusi.

Andmebaas on üsna lihtne ja sellel on mõned suhted.

Fotol näete andmebaasi mudelit.

6. samm: veebisaidi kodeerimine: kasutajaliides (html -CSS)

Tagasi veebisaidi juurde!

Nüüd on mul disain, mida saan hakata kodeerima html -css -na, et seda tõesti kasutada.

Kodulehel:

Alustasin sellest, et pidasin igat andurit oma veebisaidi elemendiks. Et saaksin hiljem lasta sellel osal genereerida oma Javascripti koodi abil.

Lisasin elementidesse ka juhuslikud JS-hoidja klassid. Need võimaldaksid selle elemendi sisu muuta

See võttis mul palju aega, sest ma pole selles keeles nii hea.

Pärast kodulehe tegemist oli aeg alustada ajaloo lehega.

Ajaloo lehel:

Seda lehte oli natuke lihtsam uuesti luua. Sellel lehel olid ka js-hoidikud, et saada teavet anduri kohta, reaalajas väärtuste pesa ja kuvada tabel koos kõigi mõõdetud väärtustega.

Et luua oma veebisaidil tabulaatori valik, et valida tabeli või diagrammi vahel, pidin lisama natuke Javascripti, et elemente ei kuvataks või kuvataks.

Nüüd on meil suurepärane veebisait, kuid ei saa sellel midagi näidata? Parandame selle.

Minu koodi leiate minu githubi hoidlast:

Samm: veebisaidi kodeerimine: taustaprogramm (sündmustik) + esipaneeli kodeerimine (javascript)

Taustaprogramm:

Kuigi taustaprogramm on juba installitud, peame selle siiski oma projektis rakendama. Kõigepealt peame lisama mõne impordi, et kõik korralikult töötaks.

kolvi impordist Kolb, taotlus, jsonify from flask_socketio import SocketIO from flask_cors import CORS

Serveri käivitamiseks peame lisama järgmise:

socketio.run (rakendus, silumine = vale, host = '0.0.0.0')

Nüüd on server võrgus, kuid see ei saa kasutajaliidesega rääkida.

See ei saa ega tagasta midagi. Muudame seda.

Kõigi andmebaasis olevate andurite küsimiseks lisab wel marsruudi:

@app.route (lõpp -punkt + '/sensorid', meetodid = ['GET']) def get_sensors (): if request.method == 'GET': s = DataRepository.get_sensors () return jsonify (sensor = s), 200

See kood kasutab klassi nimega DataRepository ja räägib andmebaasiga. Siin annab see meile tagasi andurid, mida me küsisime.

Vajame ka marsruuti, et küsida teavet ühe konkreetse anduri kohta ja teist anduri väärtuste kohta.

Need on kõik marsruudid, kuid mitte reaalajas andmete võimaldamiseks. Peame saatma iga intervalli järel andmed, mida andurid just lugesid. Selleks kasutame ühendust Socket-IO. See on ühendus, mis on loodud hetkest, kui keegi laadib veebisaidi JS -iga ja see hoiab selle ühenduse avatuna. See on täisdupleksühendus, mis tähendab, et see on ühendus, mis töötab korraga mõlemal viisil (saatmine ja vastuvõtmine). Selle kasutamiseks peame lisama järgmise koodi.

@socketio.on ('connect') def initial_connection (): print ('A new client connect') socketio.send ("U Bend geconnecteerd") # # Saada kliendile!

See koodirahu käivitatakse, kui klient loob ühenduse.

Kasutajaliideselt sõnumite saamiseks võite kasutada seda koodi.

@socketio.on ('sõnum') def message_recieved (): pass

Samuti saate sõnumeid saata. Seda tehakse järgmiselt.

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

Esimene argument võib olla ükskõik, mida soovite, kuid see vastab teie JS -i sisestatud sisule ja saate sellega ka objekte saata. See on vabatahtlik.

Javascript:

Oluline on lisada natuke JS -i, et server saaks backend -serveriga ühendatud, et oleks võimalik kuvada praeguseid andmeid ja saada teavet andmebaasist.

Helistame andmete vastuvõtmiseks ja saatmiseks socketIO funktsioonidesse.

Kui saame andmeid Jsoni objektina, demonteerime need, et saada soovitud teavet, ja paneme need siis oma veebisaidile lisatud JS-hoidikutesse.

Minu koodi leiate minu githubi hoidlast:

8. samm: korpuse valmistamine

Korpuse valmistamine
Korpuse valmistamine
Korpuse valmistamine
Korpuse valmistamine
Korpuse valmistamine
Korpuse valmistamine
Korpuse valmistamine
Korpuse valmistamine

Korpus võttis palju tööd ja seda saab teha nii, nagu soovite. Ma tegin seda nii.

Võtsin mõned veinikastid.

Ühte neist kasutasin kastina oma RPi ja enamiku andurite hoidmiseks.

Tuulekiiruse andurit ja tuule suunaandurit ei pandud loomulikult mitte vardale asetatud risttala sisse, vaid selle peale. Selle varda külge riputasin selle veinikasti, kuhu tegin ka ukse.

Fotot vaadates näete, kuidas ma oma projekti lõpetasin.

See on muidugi näide sellest, kuidas saate seda teha. Saate sellega teha mida iganes soovite.

Soovitan: