INHOUDSOPGAWE:

Plaaslike weerstasie: 8 stappe (met foto's)
Plaaslike weerstasie: 8 stappe (met foto's)

Video: Plaaslike weerstasie: 8 stappe (met foto's)

Video: Plaaslike weerstasie: 8 stappe (met foto's)
Video: Afleren wat u denkt te weten over "HET PIJNSYSTEEM" 2024, Julie
Anonim
Plaaslike weerstasie
Plaaslike weerstasie

Terwyl ek op soek was na 'n wonderlike projek om vir my eerstejaar -skoolprojek te maak, het ek baie gedink wat ek moet doen, maar ek vind dit nie 'n uitdaging nie.

Later het ek besluit om 'n weerstasie te maak met iets besonders. Ek wou al my data kon stoor en later vir statistieke gebruik. Hierdie projek is spesiaal gemaak vir persone wat belangstel in meteorologie en 'n tuisgemaakte weerstasie wil hê wat nie soveel kos as die wat op die mark beskikbaar is nie. Die projek is ook bedoel om die vermoë te behou om te eniger tyd sensors by te voeg of te verwyder.

Ek was baie bly toe ek my eindresultaat sien, wat beter was as wat verwag is.

Dit is gemaak van 'n Raspberry Pi 4 met Linux.

  • Apache webwerf (html css js)
  • Eventlet (backend server webwerf)
  • MariaDB (databasisbediener)

Voorrade

  • Framboos Pi 4:

    sd-kaart (min 16 GB)

  • Sensors:

    1. QS-FS windsnelheidssensor
    2. Windsensor Tuinsignaaluitset Aluminiumlegering Windrigtingsensor Windvane snelheidsmeetinstrument https://www.banggood.com/Wind-Sensor-Garden-Signal-Output-Aluminum-Alloy-Wind-Direction-Sensor-Wind-Vane-Speed -Measuring-Instrument-p-1624988.html? Rmmds = myorder & cur_warehouse = CN
    3. DHT22 (humiditeit)
    4. BMP280 (lugdruk)
    5. DS18B20 (temperatuur)
  • Kragtoevoer

    • 5V kragtoevoer (RPi)
    • 9v kragtoevoer (op 'n eksterne broodbordkragbron)
  • Broodbord (x2)

    T-skoenmaker plus vir RPi 4

  • springdrade
  • IC's

    • MCP3008
    • PCF8574AN
  • LCD -skerm 16x2
  • LED (rooi
  • Omhulsel (optinaal)

    • wynkratte
    • houtpaal (2 m)
    • houtplank (1 m)

Stap 1: Maak dinge gereed

Dit is altyd van groot belang om al die items wat u benodig, te kry voordat u aan 'n trap begin werk. Dit sal u baie tyd bespaar terwyl u daardeur werk.

So eers, Wat het jy nodig:

  • Framboos Pi 4:

    sd-kaart (min 16 GB)

  • Sensors:

    1. QS-FS windspoed sensor
    2. Windsensor Tuinsignaaluitset Aluminiumlegering Windrigtingsensor Windvane snelheidsmeetinstrument
    3. DHT22 (humiditeit)
    4. BMP280 (lugdruk)
    5. DS18B20 (temperatuur)
  • Kragtoevoer

    • 5V kragtoevoer (RPi)
    • 9v kragtoevoer (op 'n eksterne broodbordkragbron)
  • Broodbord (x2)
  • T-skoenmaker plus vir RPi 4
  • springdrade
  • IC's

    • MCP3008
    • PCF8574AN
  • LCD -skerm 16x2
  • LED (rooi)
  • Omhulsel (optinaal)

    • wyn kratte hout
    • houtplank (1 m)
    • paal (2 m)

U kan alle skakels waar ek dit gekoop het, vind in die afdeling benodigdhede onder die inleiding.

Stap 2: Die opstel van die RPi

Die opstel van die RPi
Die opstel van die RPi

Vir ons projek benodig ons 'n RPi met die gegewe sagteware geïnstalleer.

  • Apache webwerf (html css js)
  • Flask Socket-IO (backend server-webwerf)
  • MariaDB (databasisbediener)

Voordat u dit installeer, is dit altyd handig om seker te maak dat u die nuutste sagteware op u RPi geïnstalleer het. Om dit te doen, voer slegs die volgende opdrag uit:

sudo apt -opdatering

Apache:

Laat ons eers praat oor Apache. Apache is 'n webbediener wat oor die hele wêreld gebruik word. Dit bestuur u webwerf foutloos. Die enigste ding wat u hoef te doen is om dit te installeer en u webwerf in die regte gids te plaas en daar is dit.

sudo apt installeer apache2 -y

Dis dit!

Om seker te maak dat alles korrek geïnstalleer is, blaai na u framboos pi Ip-adres in u blaaier en kyk of u die standaardwebwerf kry. As u probleme ondervind met hierdie stap, kan u die RPi -webwerf hier besoek.

Eventlet:

Laat ons nou Eventlet installeer. Dit sal ons backend -bediener bestuur en die verbinding van ons sensors na ons webwerf maak. Daarvoor benodig ons 'n paar pakkies.

Fles-socketIO:

pip3 installeer flask-socketio

Eventlet:

pip3 installeer eventlet

Gevent:

pip3 installeer gevent

Mariadb:

Mariadb is 'n MySQL -gebaseerde databasis wat relasionele databasisse maak. Dit word gereeld op die RPi gebruik en daarom kan u baie hulp op die internet vind. Vir meer inligting, kan u na hierdie skakel gaan.

apt installeer mariadb-bediener

Stap 3: Koppel sensors en voeg kode by

Sensors verbind en kode bygevoeg
Sensors verbind en kode bygevoeg
Sensors verbind en kode bygevoeg
Sensors verbind en kode bygevoeg
Sensors verbind en kode bygevoeg
Sensors verbind en kode bygevoeg

Om die sensors aan ons RPi te koppel, kan ons 'n T-Cobbler plus gebruik. Dit is 'n handige hulpmiddel waarmee u al u penne op u RPi op 'n broodbord kan gebruik.

In my projek het ek 5 sensors:

  1. QS-FS windspoed sensor
  2. Windsensor Tuinsignaaluitset Aluminiumlegering Windrigtingsensor Windvane snelheidsmeetinstrument
  3. DHT22 (humiditeit)
  4. BMP280 (lugdruk)
  5. DS18B20 (temperatuur)

Windspoed sensor:

Eerstens het ek met die windsnelheidssensor begin, want ek was meestal opgewonde oor hierdie sensor. Dit is 'n sensor met 'n analoog sein van 0-5v uitset en benodig 'n spanning van minstens 7 volt om te werk. Ek kies vir die 9 volt adapter om dit aan te dryf.

Om in hierdie sensor te lees, gebruik ek 'n MCP3008, 'n IC om analoog seine te lees. Die IC kan op 3.3V of 5V werk, maar ek kies 3.3V om dit versoenbaar te maak met die RPi. Dit het beteken dat ek die uitsetspanning van 5V na 3.3V moes verander.

Windrigting sensor:

Windrigting is net so belangrik soos die windsnelheid, daarom verbind ek dit volgende.

Hierdie sensor het dieselfde spesifikasie as die windsnelheidsensor. Dit werk ook op 9V en het 'n uitgangsspanning van 5 volt. Ook hierdie sensor sal ons via 'n spanningsverdeler aan die MCP3008 koppel.

DHT22 (humiditeit):

Die DHT22 lees die humiditeit. Dit gee u 'n persentasiewaarde en die waarde daarvan kan gelees word deur die I2C -protokol op die RPi te gebruik. Daarom moet u die I2C-poorte in die Raspi-config aktiveer. Meer inligting hier.

BMP280 (lugdruk):

Die BMP280 word gebruik om die lugdruk te meet. Die waarde daarvan word gelees via die SPI -bus op die RPi. Hierdie protokol moet ook geaktiveer word in die Raspi-config. Vir my kode het ek die Adafruit -biblioteek gebruik.

DS18B20 (temperatuur):

Die laaste sensor meet die temperatuur. hierdie sensor is van Dallas en as u 'n bietjie ervaring met Dallas gehad het, moet u waarskynlik reeds weet dat hulle die 1Wire-bus gebruik. Moenie verbaas wees as ek sê dat hierdie protokol ook in die Raspi-konfigurasie geaktiveer moet word nie.

Hoe ek die sensors verbind het:

As pdf het ek 'n elektriese en broodbordskema opgelaai om dit 'n bietjie makliker te maak.

Nadat u die sensors suksesvol kon koppel en u die kode bygevoeg het om al die sensors te lees, kan u voortgaan met die volgende stap. As u 'n sensor wil agterlaat of meer wil byvoeg, kan u dit doen.

Stap 4: Ontwerp 'n web -UI

Ontwerp van 'n web -UI
Ontwerp van 'n web -UI
Ontwerp van 'n web -UI
Ontwerp van 'n web -UI
Ontwerp van 'n web -UI
Ontwerp van 'n web -UI

Nou het ons die sensors verbind, ons benodig 'n ontwerp vir ons webwerf.

Ons wil hê dat die webwerf 'n maklike voorkoms gee terwyl al die real-time data van die sensors vertoon word.

Ons wil ook die geskiedenis van hierdie gemete waardes per tydsinterval kan sien.

Dus het ek eers op die internet begin rondkyk vir inspirasie. Die meeste van alles was net waar inligting oor webwerwe sonder die ontwerp waarna ek op soek was. Weerstasies wat reeds op die mark was, het waarskynlik 'n vertoning gehad. En uit die vertoning het my inspirasie gekom. Die meeste skerms het 'n ontwerp met 'n rooster -voorkoms. Dit het my die idee gegee om die tuisblad te skep waar alle sensors vertoon word.

Maar ek het ook gesê dat ek 'n bladsy wil maak waarin u die geskiedenis van elke sensor se waardes kan sien.

Om hierdie rede het ek ook 'n 2de bladsy in my ontwerp gemaak wat dit bevat. Op hierdie bladsy kon ek ekstra inligting sien oor my sensor wat nie op my voorblad verskyn nie en natuurlik nie die geskiedenis nie.

Na 'n paar uur het ek my volledige ontwerp laat uitwerk!

Die ontwerp is gemaak met behulp van Adobe XD.

Stap 5: Skep databasis

Die skep van 'n databasis
Die skep van 'n databasis

Om 'n breek te kry van die ontwerpgedeelte, het ek op my databasis begin.

Hierdie databasis bevat alle sensors (5), alle aandrywers (2) en die waardes wat die sensors gehad het.

Die databasis is redelik maklik en het 'n paar verwantskappe.

U kan die databasismodel op die foto sien.

Stap 6: Kodering van die webwerf: Frontend (html Css)

Terug na die webwerf!

Nou het ek 'n ontwerp wat ek kan begin om dit as html css te kodeer om dit regtig te kan gebruik.

Op die tuisblad:

Ek het begin deur elke sensor as 'n element op my webwerf te beskou. Sodat ek hierdie deel later deur my Javascript -kode kon laat genereer.

Ek het ook ewekansige JS-houer klasse in die elemente ingevoeg. Dit sou dit moontlik maak om die inhoud van die element te verander

Dit het my baie tyd geneem, want ek is nie so goed in hierdie spesifieke taal nie.

Nadat u die tuisblad gedoen het, was dit tyd om met die geskiedenisbladsy te begin.

Op die geskiedenisbladsy:

Hierdie bladsy was 'n bietjie makliker om te herskep. Op hierdie bladsy was daar ook js-houers om die inligting oor die sensor binne te kry, 'n realtime waarde-gleuf en om die tabel met al die gemete waardes te vertoon.

Om 'n oortjie-opsie op my webwerf te skep om tussen tabel of grafiek te kies, moes ek 'n bietjie Javascript byvoeg sodat die elemente nie vertoon of vertoon word nie.

Nou het ons 'n pragtige webwerf, maar kan ons niks daarop wys nie? Kom ons maak dit reg.

U kan my kode op my github-bewaarplek vind:

Stap 7: Kodering van die webwerf: agterkant (eventlet) + kodering van voorkant (javascript)

Agterkant:

Terwyl die backend -bediener reeds geïnstalleer is, moet ons dit steeds in ons projek implementeer. Eerstens moet ons 'n paar invoer byvoeg om alles reg te laat werk.

van fles invoer Kolf, versoek, jsonify van flask_socketio invoer SocketIO van flask_cors invoer CORS

Om die bediener te laat begin, moet ons die volgende byvoeg:

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

Nou is die bediener aanlyn, maar hy kan nie met die frontend praat nie.

Dit ontvang niks of gee dit terug nie. Kom ons verander dit.

Om vir al die sensors in die databasis te vra, sal 'n roete bygevoeg word:

@app.route (eindpunt + '/sensors', metodes = ['GET']) def get_sensors (): if request.method == 'GET': s = DataRepository.get_sensors () return jsonify (sensors = s), 200

Hierdie kode gebruik 'n klas genaamd DataRepository en praat met die databasis. Hier gee ons die sensors terug waarna ons gevra het.

Ons benodig ook 'n roete om die inligting oor 1 spesifieke sensor en 'n ander een na die waardes van 'n gegewe sensor te vra.

Dit is alles roetes, maar om die intydse data moontlik te maak. Ons moet elke interval die data stuur wat die sensors net gelees het. Hiervoor gebruik ons die Socket-IO-verbinding. Dit is 'n verbinding wat gemaak word vanaf die oomblik dat iemand die webwerf met JS laai en hierdie verbinding oop hou. Dit is 'n volledige dupleksverbinding, wat beteken dat dit 'n verbinding is wat tegelykertyd op beide maniere werk (stuur en ontvang). Om dit te gebruik, moet ons die volgende kode byvoeg.

@socketio.on ('connect') def initial_connection (): print ('A new client connect') socketio.send ("U bent geconnecteerd") # # Stuur na die kliënt!

Hierdie kodevrede word uitgevoer as 'n kliënt aansluit.

U kan hierdie kode gebruik om enige boodskap van die frontend af te kry.

@socketio.on ('boodskap') def message_recieved (): slaag

U kan ook boodskappe stuur. Dit word gedoen deur die volgende.

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

Die eerste gegewe argument kan alles wees wat u wil hê, maar sal ooreenstem met wat u in u JS geplaas het, en u kan ook voorwerpe daarmee stuur. Dit is opsioneel.

Javascript:

Dit is belangrik om 'n bietjie JS by te voeg om die bediener met die backend -bediener te verbind om die huidige data te kan vertoon en inligting uit die databasis te kry.

Ons bel die socketIO -funksies wat ons gemaak het om data te ontvang en te stuur.

As ons data as 'n Json-voorwerp ontvang, sal ons dit uitmekaar haal om die gewenste inligting te kry en dit dan in die JS-houers wat ons op ons webwerf plaas, te plaas.

U kan my kode op my github-bewaarplek vind:

Stap 8: Maak 'n omhulsel

Maak 'n omhulsel
Maak 'n omhulsel
Maak 'n omhulsel
Maak 'n omhulsel
Maak 'n omhulsel
Maak 'n omhulsel
Maak 'n omhulsel
Maak 'n omhulsel

Die omhulsel het baie werk gekos en kan op enige manier gedoen word. Dit is hoe ek dit gedoen het.

Ek het 'n paar wynkratte geneem.

Een daarvan het ek as die boks gebruik om my RPi en die meeste van my sensors te bevat.

Die windsnelheidsensor en windrigtingsensor is natuurlik nie binne geplaas nie, maar bo -op 'n dwarsbalk wat op 'n paal geplaas is. Aan hierdie paal het ek die wynkrat gehang waarvoor ek ook 'n deur gemaak het.

U kan sien hoe ek my projek voltooi het deur na die foto's te kyk.

Dit is natuurlik 'n voorbeeld van hoe u dit kan doen. U kan daarmee doen wat u wil.

Aanbeveel: