Satura rādītājs:

Vietējā laika stacija: 8 soļi (ar attēliem)
Vietējā laika stacija: 8 soļi (ar attēliem)

Video: Vietējā laika stacija: 8 soļi (ar attēliem)

Video: Vietējā laika stacija: 8 soļi (ar attēliem)
Video: 8. janvāra "Panorāma" un "Šodienas jautājums" 2024, Jūlijs
Anonim
Vietējā meteoroloģiskā stacija
Vietējā meteoroloģiskā stacija

Tā kā es meklēju lielisku projektu pirmā kursa skolas projektam, man bija daudz ideju par to, ko darīt, bet nevienu no tiem es neuzskatīju par izaicinošu.

Vēlāk es iedomājos izveidot meteostaciju, kurā būtu kaut kas īpašs. Es gribēju, lai varētu saglabāt visus savus datus un vēlāk tos izmantot statistikai. Šis projekts būtu īpaši paredzēts personām, kurām interesē meteoroloģija un kuras vēlas izveidot mājās radītu meteoroloģisko staciju, kas nemaksā tik daudz, cik ir pieejamas tirgū. Projekts ir arī paredzēts, lai saglabātu iespēju jebkurā laikā pievienot vai noņemt sensorus.

Es biju patiesi laimīga, kad ieraudzīju savu gala rezultātu, kas izrādījās labāks nekā gaidīts.

Tas ir izgatavots no Raspberry Pi 4, kurā darbojas Linux.

  • Apache vietne (html css js)
  • Eventlet (aizmugures servera vietne)
  • MariaDB (datu bāzes serveris)

Piegādes

  • Raspberry Pi 4:

    SD karte (vismaz 16 GB)

  • Sensori:

    1. QS-FS vēja ātruma sensors
    2. Vēja sensora dārza signāla izejas alumīnija sakausējuma vēja virziena sensors Vēja ātruma mērīšanas instruments 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 (mitrums) https://www.bitsandparts.nl/Temperatūras sensori-un-Termmokoppels/Temperatuursensor-en-luchtvochtigheidssensor-DHT22/p109717
    4. BMP280 (gaisa spiediens) https://www.bitsandparts.nl/Temperatūras sensori-un-Termokopels/Barometrische-druksensor-hoogtemeter-temperatuursensor-I2C-SPI-BMP280/p124314
    5. DS18B20 (temperatūra) https://www.bitsandparts.nl/Temperatūras sensori-un-Termokopels
  • Barošanas avoti

    • 5V barošanas avots (RPi)
    • 9 V barošanas avots (pie ārēja maizes dēļa barošanas avota)
  • Maizes dēlis (x2)

    T-kurpnieks plus RPi 4

  • džemperu vadi
  • IC

    • MCP3008
    • PCF8574AN
  • LCD displejs 16x2
  • LED (sarkans
  • Korpuss (optāls)

    • vīna kastes
    • koka stabs (2 m)
    • koka dēlis (1 m)

1. darbība: lietu sagatavošana

Pirms darba uzsākšanas vienmēr ir ļoti svarīgi iegūt visus nepieciešamos priekšmetus. Tas ietaupīs daudz laika, strādājot ar to.

Tātad vispirms, Ko tev vajag:

  • Raspberry Pi 4:

    SD karte (vismaz 16 GB)

  • Sensori:

    1. QS-FS vēja ātruma sensors
    2. Vēja sensora dārza signāla izeja Alumīnija sakausējuma vēja virziena sensors Vēja ātruma mērīšanas instruments
    3. DHT22 (mitrums)
    4. BMP280 (gaisa spiediens)
    5. DS18B20 (temperatūra)
  • Barošanas avoti

    • 5V barošanas avots (RPi)
    • 9 V barošanas avots (pie ārēja maizes dēļa barošanas avota)
  • Maizes dēlis (x2)
  • T-kurpnieks plus RPi 4
  • džemperu vadi
  • IC

    • MCP3008
    • PCF8574AN
  • LCD displejs 16x2
  • LED (sarkans)
  • Korpuss (optāls)

    • vīna kastes koks
    • koka dēlis (1 m)
    • stabs (2 m)

Visas saites, kurās es tās iegādājos, varat atrast sadaļā ievads.

2. darbība: RPi iestatīšana

RPi iestatīšana
RPi iestatīšana

Mūsu projektam mums ir nepieciešams RPi ar instalēto programmatūru.

  • Apache vietne (html css js)
  • Flask Socket-IO (aizmugures servera vietne)
  • MariaDB (datu bāzes serveris)

Pirms instalēšanas vienmēr ir ērti pārliecināties, vai RPi ir instalēta jaunākā programmatūra. Lai to izdarītu, vienkārši izpildiet šādu komandu:

sudo apt atjauninājums

Apache:

Vispirms runāsim par Apache. Apache ir tīmekļa serveris, ko izmanto visā pasaulē. Tas nevainojami vada jūsu vietni. Vienīgais, kas jums jādara, ir to instalēt un ievietot savu vietni pareizajā mapē, un tā ir.

sudo apt instalēt apache2 -y

Tieši tā!

Lai pārliecinātos, ka viss ir pareizi instalēts, pārlūkprogrammā pārlūkojiet savu aveņu pi IP adresi un pārbaudiet, vai iegūstat noklusējuma vietni. Ja jums ir kādas problēmas saistībā ar šo darbību, varat pārbaudīt RPi vietni šeit.

Pasākums:

Tagad instalēsim Eventlet. Tas darbinās mūsu aizmugures serveri un izveidos savienojumu no mūsu sensoriem ar mūsu vietni. Šim nolūkam mums ir vajadzīgi pāris iepakojumi.

Kolbas ligzda:

pip3 instalējiet kolbu-ligzdu

Pasākums:

pip3 instalēt notikumu

Gevent:

pip3 instalācijas ģenerators

Mariadb:

Mariadb ir uz MySQL balstīta datu bāze, kas veido relāciju datu bāzes. To bieži izmanto RPi, un tāpēc internetā var atrast daudz palīdzības. Lai iegūtu vairāk informācijas, varat doties uz šo saiti.

apt instalēt mariadb-serveri

3. darbība: sensoru pievienošana un koda pievienošana

Sensoru pievienošana un koda pievienošana
Sensoru pievienošana un koda pievienošana
Sensoru pievienošana un koda pievienošana
Sensoru pievienošana un koda pievienošana
Sensoru pievienošana un koda pievienošana
Sensoru pievienošana un koda pievienošana

Lai savienotu sensorus ar mūsu RPi, mēs varam izmantot T-Cobbler plus. Šis ir ērts, mazs rīks, kas ļauj izmantot visas jūsu tapas uz RPi uz maizes dēļa.

Manā projektā man ir 5 sensori:

  1. QS-FS vēja ātruma sensors
  2. Vēja sensora dārza signāla izeja Alumīnija sakausējuma vēja virziena sensors Vēja ātruma mērīšanas instruments
  3. DHT22 (mitrums)
  4. BMP280 (gaisa spiediens)
  5. DS18B20 (temperatūra)

Vēja ātruma sensors:

Vispirms es sāku ar vēja ātruma sensoru, jo es galvenokārt biju sajūsmā par šo sensoru. Tas ir sensors ar analogo signālu ar 0–5 V izeju, un tā darbībai nepieciešams vismaz 7 voltu spriegums. Es izvēlos 9 voltu adapteri, lai to darbinātu.

Lai lasītu šajā sensorā, es izmantoju MCP3008, kas ir IC, lai lasītu analogos signālos. IC var strādāt ar 3.3V vai 5V, bet es izvēlos 3.3V, lai tas būtu saderīgs ar RPi. Tas nozīmēja, ka man bija jāmaina izejas spriegums no 5 V uz 3,3 V. Es to izdarīju, pievienojot sprieguma dalītāju, ko izveidoja 2 rezistori (2k un 1k omi).

Vēja virziena sensors:

Vēja virziens ir tikpat svarīgs kā vēja ātrums, tāpēc es to savienošu tālāk.

Šim sensoram ir tāda pati specifikācija kā vēja ātruma sensoram. Tas darbosies arī ar 9 V spriegumu, un tā izejas spriegums ir 5 volti. Arī šo sensoru mēs savienosim ar MCP3008, izmantojot sprieguma dalītāju.

DHT22 (mitrums):

DHT22 nolasa mitrumu. Tas dod jums vērtību procentos, un tā vērtību var nolasīt, izmantojot RPi I2C protokolu. Tāpēc Raspi konfigurācijā ir jāiespējo I2C porti. Vairāk informācijas šeit.

BMP280 (gaisa spiediens):

BMP280 tiek izmantots, lai nolasītu gaisa spiedienu. Tās vērtība tiek nolasīta, izmantojot RPI kopni RPi. Šis protokols ir jāiespējo arī Raspi konfigurācijā. Savam kodam es izmantoju Adafruit bibliotēku.

DS18B20 (temperatūra):

Pēdējais sensors mēra temperatūru. šis sensors ir no Dalasas, un, ja jums ir bijusi neliela pieredze ar Dalasu, jums droši vien jau vajadzētu zināt, ka viņi izmanto 1Wire-bus. Nebrīnieties, ja teikšu, ka šis protokols ir jāiespējo arī Raspi-config.

Kā es pievienoju sensorus:

Kā pdf es augšupielādēju elektriskās un maizes dēļa shēmu, lai to padarītu nedaudz vieglāku.

Pēc sekmīgas sensoru savienošanas un visu sensoru nolasīšanai nepieciešamā koda pievienošanas varat doties uz priekšu un pāriet uz nākamo darbību. Ja vēlaties atstāt sensoru aiz muguras vai vēlaties pievienot vairāk, varat to izdarīt.

4. darbība. Tīmekļa lietotāja interfeisa izstrāde

Tīmekļa lietotāja interfeisa izstrāde
Tīmekļa lietotāja interfeisa izstrāde
Tīmekļa lietotāja interfeisa izstrāde
Tīmekļa lietotāja interfeisa izstrāde
Tīmekļa lietotāja interfeisa izstrāde
Tīmekļa lietotāja interfeisa izstrāde

Tagad mēs pievienojām sensorus, kas nepieciešami mūsu vietnes dizainam.

Mēs vēlamies, lai vietne radītu vieglu izskatu, vienlaikus parādot visus sensoru reāllaika datus.

Mēs arī vēlamies redzēt šo izmērīto vērtību vēsturi katrā laika intervālā.

Tāpēc vispirms es sāku skatīties tīmeklī, lai iegūtu iedvesmu. Lielākā daļa no visiem, kur tikai Wheater informācijas vietnes bez īsti dizaina es meklēju. Meteoroloģiskajām stacijām, kas jau bija tirgū, visticamāk, bija displejs. Un no šī displeja radās mana iedvesma. Lielākajai daļai displeju ir dizains ar režģa izskatu. Tas man radīja ideju izveidot mājas lapu, kurā tiktu parādīti visi sensori.

Bet es arī teicu, ka vēlos izveidot lapu, kurā var redzēt katra sensora vērtību.

Šī iemesla dēļ es savā dizainā izveidoju arī otro lapu, kas satur šo. Šajā lapā es varētu redzēt papildu informāciju par manu sensoru, kas netiktu parādīta manā pirmajā lapā un, protams, vēstures daļā.

Pēc dažām stundām man bija izstrādāts viss dizains!

Dizains tika veikts, izmantojot Adobe XD.

5. darbība. Datu bāzes izveide

Datu bāzes izveide
Datu bāzes izveide

Lai atpūstos no projektēšanas daļas, es sāku savā datu bāzē.

Šajā datu bāzē būtu visi sensori (5), visi izpildmehānismi (2) un šo sensoru vērtības.

Datu bāze ir diezgan vienkārša, un tai ir dažas attiecības.

Fotoattēlā varat redzēt datu bāzes modeli.

6. darbība. Vietnes kodēšana: priekšpuse (html CSS)

Atpakaļ uz vietni!

Tagad man ir dizains, ko varu sākt kodēt kā html css, lai to patiešām izmantotu.

Mājas lapā:

Sāku, katru sensoru uzskatot par savas vietnes elementu. Lai vēlāk varētu ļaut šai daļai ģenerēt pēc sava Javascript koda.

Es arī elementos ievietoju nejaušas JS turētāju klases. Tas ļautu mainīt šī elementa saturu

Tas aizņēma daudz laika, jo es neesmu tik labs šajā valodā.

Kad esat izveidojis mājas lapu, bija pienācis laiks sākt ar vēstures lapu.

Vēstures lapā:

Šo lapu bija nedaudz vieglāk atjaunot. Šajā lapā bija arī js turētāji, lai iegūtu informāciju par sensoru, reāllaika vērtību slotu un parādītu tabulu ar visām izmērītajām vērtībām.

Lai savā vietnē izveidotu cilnes opciju, lai izvēlētos tabulu vai diagrammu, man bija jāpievieno mazliet Javascript, lai elementi netiktu parādīti vai tiktu parādīti.

Tagad mums ir satriecoša vietne, bet nevaram tajā neko parādīt? Labosim to.

Manu kodu varat atrast manā github krātuvē:

7. darbība. Vietnes kodēšana: aizmugure (notikums) + priekšpuses kodēšana (javascript)

Aizmugure:

Lai gan aizmugures serveris jau ir instalēts, mums tas joprojām ir jāievieš mūsu projektā. Vispirms mums jāpievieno daži importi, lai viss darbotos pareizi.

no kolbas importēšanas Kolba, pieprasījums, jsonify no flask_socketio importēt SocketIO no flask_cors importēt CORS

Lai palaistu serveri, mums jāpievieno sekojošais:

socketio.run (lietotne, atkļūdošana = nepatiesa, saimniekdators = '0.0.0.0')

Tagad serveris ir tiešsaistē, taču tas nevarēs runāt ar priekšpusi.

Tas neko nesaņem un neatdod. Mainīsim to.

Lai pieprasītu visus sensorus datu bāzē, tiks pievienots maršruts:

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

Šis kods izmanto klasi ar nosaukumu DataRepository un runā ar datu bāzi. Šeit tas mums atdod sensorus, kurus lūdzām.

Mums ir vajadzīgs arī maršruts, lai vaicātu informāciju par 1 konkrētu sensoru un vēl vienu par konkrētā sensora vērtībām.

Tie visi ir maršruti, bet lai reāllaika dati būtu iespējami. Mums katru intervālu jānosūta dati, ko sensori tikko nolasa. Lai to izdarītu, mēs izmantojam Socket-IO savienojumu. Tas ir savienojums, kas izveidots no brīža, kad kāds ielādē vietni ar JS, un tas saglabā šo savienojumu atvērtu. Šis ir pilnībā duplekss savienojums, kas nozīmē, ka tas ir savienojums, kas vienlaikus darbojas abos veidos (sūtīt un saņemt). Lai to izmantotu, mums jāpievieno šāds kods.

@socketio.on ('connect') def initial_connection (): print ('A new client connect') socketio.send ("U Bend geconnecteerd") # # Nosūtīt klientam!

Šis koda miers tiek palaists, kad klients izveido savienojumu.

Lai saņemtu jebkuru ziņojumu no priekšpuses, varat izmantot šo kodu.

@socketio.on ('ziņojums') def message_recieved (): iziet

Varat arī nosūtīt ziņas. Tas tiek darīts šādi.

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

Pirmais dotais arguments var būt jebkas, ko vēlaties, bet tas atbilst tam, ko ievietojat savā JS, un ar to varat nosūtīt arī objektus. Tas nav obligāti.

Javascript:

Ir svarīgi pievienot mazliet JS, lai serveris būtu savienots ar aizmugures serveri, lai varētu parādīt pašreizējos datus un iegūt informāciju no datu bāzes.

Mēs izsauksim socketIO funkcijas, kuras mēs izveidojām, lai saņemtu un nosūtītu datus.

Saņemot datus kā Json objektu, mēs tos demontēsim, lai iegūtu vēlamo informāciju, un pēc tam ievietojam tos JS turētājos, kurus ievietojām mūsu vietnē.

Manu kodu varat atrast manā github krātuvē:

8. solis: apvalka izgatavošana

Apvalka izgatavošana
Apvalka izgatavošana
Apvalka izgatavošana
Apvalka izgatavošana
Apvalka izgatavošana
Apvalka izgatavošana
Apvalka izgatavošana
Apvalka izgatavošana

Korpuss aizņēma daudz darba, un to var izdarīt, kā vien vēlaties. Šādi es to izdarīju.

Es paņēmu dažas vīna kastes.

Vienu no tiem es izmantoju kā kastīti, lai ievietotu savu RPi un lielāko daļu manu sensoru.

Vēja ātruma sensors un vēja virziena sensors, protams, netika novietoti iekšpusē, bet gan virs stabiņa novietota šķērsstieņa. Uz šī staba es pakārtu to vīna kasti, kur es arī uztaisīju durvis.

Jūs varat redzēt, kā es pabeidzu savu projektu, aplūkojot fotoattēlus.

Tas, protams, ir piemērs tam, kā jūs to varat izdarīt. Jūs varat darīt ar to visu, ko vēlaties.

Ieteicams: