Cuprins:
- Provizii
- Pasul 1: Pregătirea lucrurilor
- Pasul 2: Configurarea RPi
- Pasul 3: Conectarea senzorilor și adăugarea codului
- Pasul 4: Proiectarea unei interfețe web
- Pasul 5: Crearea bazei de date
- Pasul 6: Codificarea site-ului: Frontend (html Css)
- Pasul 7: Codificarea site-ului web: Backend (eventlet) + Coding Frontend (javascript)
- Pasul 8: Realizarea unei carcase
Video: Stație meteo locală: 8 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:42
În timp ce căutam un proiect grozav de făcut pentru proiectul meu școlar din primul an, aveam multe idei despre ce să fac, dar niciunul dintre ei nu mi s-a părut provocator.
Mai târziu m-am gândit să fac o stație meteo care să aibă ceva special. Am vrut să pot stoca toate datele mele și ulterior să le folosesc pentru statistici. Acest proiect ar fi conceput special pentru persoanele care au un interes pentru meteorologie și doresc o stație meteo creată acasă, care nu costă la fel de mult ca cele disponibile pe piață. Proiectul este, de asemenea, conceput pentru a menține capacitatea de a adăuga sau elimina senzori în orice moment.
Am fost foarte fericit când mi-am văzut rezultatul final, care s-a dovedit mai bun decât se aștepta.
Este realizat dintr-un Raspberry Pi 4 care rulează Linux.
- Site web Apache (html css js)
- Eventlet (site-ul serverului backend)
- MariaDB (server de baze de date)
Provizii
-
Raspberry Pi 4:
card SD (min 16 GB)
-
Senzori:
- Senzor de viteză a vântului QS-FS
- Senzor de vânt Ieșire semnal de grădină Aliaj de aluminiu Senzor de direcție a vântului Instrument de măsurare a vitezei paletei de vânt 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
- DHT22 (umiditate)
- BMP280 (presiunea aerului)
- DS18B20 (temperatură)
-
Sursa de alimentare
- Alimentare 5V (RPi)
- Sursă de alimentare de 9v (pe o sursă de alimentare externă)
-
Panou (x2)
T-cobbler plus pentru RPi 4
- fire jumper
-
IC-uri
- MCP3008
- PCF8574AN
- Afișaj LCD 16x2
- LED (roșu
-
Carcasă (optinală)
- lăzi de vin
- stâlp de lemn (2m)
- scândură de lemn (1m)
Pasul 1: Pregătirea lucrurilor
Este întotdeauna foarte important să obțineți toate articolele de care aveți nevoie înainte de a începe să lucrați la un pas. Acest lucru vă va economisi mult timp în timp ce lucrați prin el.
Deci mai întâi, De ce ai nevoie:
-
Raspberry Pi 4:
card SD (min 16 GB)
-
Senzori:
- Senzor de viteză a vântului QS-FS
- Senzor de vânt Ieșire semnal de grădină Aliaj de aluminiu Senzor de direcție a vântului Instrument de măsurare a vitezei paletei de vânt
- DHT22 (umiditate)
- BMP280 (presiunea aerului)
- DS18B20 (temperatura)
-
Sursa de alimentare
- Alimentare 5V (RPi)
- Sursă de alimentare de 9v (pe o sursă de alimentare externă)
- Panou (x2)
- T-cobbler plus pentru RPi 4
- fire jumper
-
IC-uri
- MCP3008
- PCF8574AN
- Afișaj LCD 16x2
- LED (roșu)
-
Carcasă (optinală)
- lăzi de vin din lemn
- scândură de lemn (1m)
- stâlp (2m)
Puteți găsi toate linkurile de unde le-am cumpărat în secțiunea consumabile din introducere.
Pasul 2: Configurarea RPi
Pentru proiectul nostru avem nevoie de un RPi cu software-ul dat instalat.
- Site web Apache (html css js)
- Flask Socket-IO (site-ul serverului backend)
- MariaDB (server de baze de date)
Înainte de instalare, este întotdeauna la îndemână să vă asigurați că aveți cel mai recent software instalat pe RPi. Pentru a face acest lucru, executați următoarea comandă:
actualizare sudo apt
Apache:
Mai întâi să vorbim despre Apache. Apache este un server web utilizat în toată lumea. Vă rulează site-ul fără cusur. Singurul lucru pe care trebuie să-l faceți este să îl instalați și să vă puneți site-ul în folderul potrivit și acolo este.
sudo apt instalează apache2 -y
Asta e!
Pentru a vă asigura că totul este instalat corect navigați la adresa dvs. raspberry pi Ip în browserul dvs. și vedeți dacă obțineți site-ul implicit. Dacă aveți probleme cu privire la acest pas, puteți consulta site-ul web RPi aici.
Eveniment:
Acum să instalăm Eventlet. Acesta va rula serverul nostru backend și va face conexiunea de la senzorii noștri la site-ul nostru web. Pentru asta avem nevoie de câteva pachete.
Flask-socketIO:
pip3 instalează flask-socketio
Eveniment:
pip3 instalează evenimentul
Gevent:
pip3 instalează gevent
Mariadb:
Mariadb este o bază de date bazată pe MySQL care creează baze de date relaționale. Este adesea folosit pe RPi și, prin urmare, există o mulțime de ajutor pe care îl puteți găsi pe internet. Pentru mai multe informații puteți accesa acest link.
apt instalați mariadb-server
Pasul 3: Conectarea senzorilor și adăugarea codului
Pentru a conecta senzorii la RPi, putem folosi un T-Cobbler plus. Acesta este un mic instrument la îndemână, care face posibilă utilizarea tuturor pinilor dvs. pe RPi pe o placă de calcul.
În proiectul meu am 5 senzori:
- Senzor de viteză a vântului QS-FS
- Senzor de vânt Ieșire semnal de grădină Aliaj de aluminiu Senzor de direcție a vântului Instrument de măsurare a vitezei paletei de vânt
- DHT22 (umiditate)
- BMP280 (presiunea aerului)
- DS18B20 (temperatura)
Senzor viteză vânt:
Mai întâi de toate, am început cu senzorul de viteză a vântului, deoarece am fost în mare parte încântat de acest senzor. Este un senzor cu un semnal analogic de ieșire 0-5v și are nevoie de o tensiune de minimum 7 volți pentru a funcționa. Aleg ca adaptorul de 9 volți să-l alimenteze.
Pentru a citi în acest senzor am folosit un MCP3008 care este un IC pentru a citi în semnale analogice. IC-ul poate funcționa pe 3.3V sau 5V, dar eu aleg 3.3V pentru al face compatibil cu RPi. Acest lucru a însemnat că trebuia să schimb tensiunea de ieșire de la 5V la 3,3V. Am făcut acest lucru adăugând un divizor de tensiune creat de 2 rezistențe (2k și 1k ohm).
Senzor de direcție a vântului:
Direcția vântului este la fel de importantă ca viteza vântului, prin urmare, voi conecta acest lucru în continuare.
Acest senzor are aceeași specificație ca și senzorul de viteză a vântului. De asemenea, va funcționa pe 9V și are o tensiune de ieșire de 5 volți. De asemenea, acest senzor îl vom conecta la MCP3008 printr-un divizor de tensiune.
DHT22 (umiditate):
DHT22 citește umiditatea. Vă oferă o valoare procentuală, iar valoarea sa poate fi citită folosind protocolul I2C de pe RPi. Prin urmare, trebuie să activați porturile I2C din Raspi-config. Mai multe informații aici.
BMP280 (presiunea aerului):
BMP280 este utilizat pentru a citi presiunea aerului. Valoarea sa este citită prin magistrala SPI de pe RPi. Acest protocol trebuie de asemenea activat în Raspi-config. Pentru codul meu am folosit biblioteca Adafruit.
DS18B20 (temperatura):
Ultimul senzor măsoară temperatura. acest senzor este de la Dallas și dacă ați avut puțină experiență cu Dallas, probabil că ar trebui să știți deja că utilizează 1Wire-bus. Nu vă mirați dacă spun că acest protocol trebuie activat și în Raspi-config.
Cum am conectat senzorii:
Ca pdf am încărcat o schemă electrică și de panouri pentru a o ușura puțin.
După ce ați reușit să conectați senzorii cu succes și ați adăugat codul necesar pentru a citi toți senzorii, puteți continua și trece la pasul următor. Dacă doriți să lăsați un senzor în urmă sau doriți să adăugați mai multe, puteți face acest lucru.
Pasul 4: Proiectarea unei interfețe web
Acum am conectat senzorii, avem nevoie de un design pentru site-ul nostru.
Vrem ca site-ul web să creeze un aspect ușor în timp ce afișează toate datele în timp real ale senzorilor.
De asemenea, dorim să putem vedea istoricul acestor valori măsurate pe interval de timp.
Așa că, în primul rând, am început să mă uit în jur pe web pentru o inspirație. Mai presus de toate, acolo unde sunt doar site-uri de informații mai bune, fără designul pe care îl căutam. Stațiile meteo care erau deja pe piață au avut cel mai probabil un afișaj. Și din acel afișaj mi-a venit inspirația. Majoritatea ecranelor au un design cu aspect de grilă. Acest lucru mi-a dat ideea de a crea pagina de pornire unde ar fi afișați toți senzorii.
Dar, de asemenea, am spus că am vrut să fac o pagină în care puteți vedea istoricul fiecărui senzor al valorilor sale.
Din acest motiv, am realizat și o a doua pagină în designul meu care conține acest lucru. Pe această pagină am putut vedea câteva informații suplimentare despre senzorul meu care nu ar fi afișate pe prima pagină și în afara părții istorice.
După câteva ore mi s-a pus la punct designul complet!
Designul a fost realizat folosind Adobe XD.
Pasul 5: Crearea bazei de date
Pentru a obține o pauză de la partea de proiectare am început pe baza mea de date.
Această bază de date ar conține toți senzorii (5), toate dispozitivele de acționare (2) și valorile pe care acei senzori le aveau.
Baza de date este destul de ușoară și are câteva relații.
Puteți vedea modelul bazei de date în fotografie.
Pasul 6: Codificarea site-ului: Frontend (html Css)
Înapoi la site!
Acum am un design, pot începe să-l codez ca html css pentru a-l folosi cu adevărat.
Pe pagina principală:
Am început prin a considera fiecare senzor ca pe un element de pe site-ul meu. Pentru ca mai târziu să pot lăsa această parte să se genereze prin codul meu Javascript.
Am inserat, de asemenea, clase elementare aleatorii JS-titular în elemente. Acestea ar face posibilă schimbarea conținutului acelui element
Acest lucru mi-a luat mult timp pentru că nu sunt atât de bun în această limbă.
După ce ați făcut pagina de pornire, a venit timpul să începeți de la pagina de istorie.
Pe pagina istoric:
Această pagină a fost puțin mai ușor de creat. În această pagină au fost, de asemenea, deținătorii de js pentru a obține informații despre senzor, un slot de valori în timp real și pentru a afișa tabelul cu toate valorile măsurate.
Pentru a crea o opțiune de filă pe site-ul meu web pentru a alege între Tabel sau Grafic, a trebuit să adaug un pic de Javascript pentru ca elementele să nu se afișeze sau să nu fie afișate.
Acum avem un site uimitor, dar nu putem afișa nimic pe el? Să remediem asta.
Puteți găsi codul meu în depozitul meu github:
Pasul 7: Codificarea site-ului web: Backend (eventlet) + Coding Frontend (javascript)
Backend:
În timp ce serverul backend este deja instalat, trebuie să implementăm acest lucru în proiectul nostru. Mai întâi trebuie să adăugăm câteva importuri pentru ca totul să funcționeze corect.
din flask import Flask, request, jsonify from flask_socketio import SocketIO from flask_cors import CORS
Pentru a porni serverul, trebuie să adăugăm următoarele:
socketio.run (app, debug = False, host = '0.0.0.0')
Acum serverul este online, dar nu va putea vorbi cu frontend-ul.
Nu primește sau returnează nimic. Să schimbăm asta.
Pentru a solicita toți senzorii din baza de date wel va adăuga un traseu:
@ app.route (endpoint + '/ sensors', methods = ['GET']) def get_sensors (): if request.method == 'GET': s = DataRepository.get_sensors () return jsonify (sensors = s), 200
Acest cod folosește o clasă numită DataRepository și vorbește cu baza de date. Aici ne redă senzorii pe care i-am cerut-o.
De asemenea, avem nevoie de o rută pentru a cere informații despre un senzor specific și un altul pentru valorile unui senzor dat.
Acestea sunt toate rute, dar pentru a face posibile datele în timp real. Trebuie să trimitem la fiecare interval datele pe care senzorii tocmai le-au citit. Pentru a face acest lucru folosim conexiunea Socket-IO. Este o conexiune stabilită din momentul în care cineva încarcă site-ul web cu JS și păstrează această conexiune deschisă. Aceasta este o conexiune full-duplex, ceea ce înseamnă că este o conexiune care funcționează în ambele moduri (trimitere și primire) în același timp. Pentru a utiliza acest lucru, trebuie să adăugăm următorul cod.
@ socketio.on ('connect') def initial_connection (): print ('A new client connect') socketio.send ("U bent geconnecteerd") # # Trimiteți clientului!
Această pace a codului se execută atunci când un client se conectează.
Pentru a primi orice mesaj de pe frontend puteți utiliza acest cod.
@ socketio.on ('mesaj') def message_recived (): trece
De asemenea, puteți trimite mesaje. Acest lucru se face prin următoarele.
socketio.emit ('Update_RTD', dict_results, broadcast = True)
Primul argument dat poate fi orice doriți, dar va corespunde cu ceea ce puneți în JS și puteți trimite și obiecte cu acesta. Acest lucru este opțional.
Javascript:
Este important să adăugați un pic de JS pentru a conecta serverul cu serverul backend pentru a putea afișa datele curente și pentru a obține informații din baza de date.
Vom apela funcțiile socketIO pe care le-am făcut pentru a primi și a trimite date.
Când primim date ca obiect Json, le vom demonta pentru a obține informațiile pe care le dorim și apoi le vom pune în deținătorii JS pe care i-am pus pe site-ul nostru.
Puteți găsi codul meu în depozitul meu github:
Pasul 8: Realizarea unei carcase
Carcasa a necesitat multă muncă și poate fi realizată în orice mod doriți. Așa am făcut-o.
Am luat niște lăzi de vin.
Unul dintre ele l-am folosit ca cutie pentru a-mi conține RPi și majoritatea senzorilor.
Senzorul de viteză a vântului și senzorul de direcție a vântului nu au fost, desigur, așezați în interior, ci deasupra unei bare transversale plasate pe un stâlp. Pe acest stâlp am atârnat lada aceea de vin unde am făcut și o ușă.
Puteți vedea cum mi-am terminat proiectul privind fotografiile.
Acesta este desigur un exemplu al modului în care îl puteți face. Puteți face cu el orice doriți.
Recomandat:
Stație meteo profesională care utilizează ESP8266 și ESP32 DIY: 9 pași (cu imagini)
Stație meteo profesională care folosește bricolajul ESP8266 și ESP32: LineaMeteoStazione este o stație meteo completă care poate fi interfațată cu senzori profesioniști de la Sensirion, precum și cu unele componente ale instrumentului Davis (Rain Gauge, Anemometer)
Fanair: o stație meteo pentru camera ta: 6 pași (cu imagini)
Fanair: o stație meteo pentru camera ta: Există nenumărate modalități de a afla vremea actuală, dar atunci știi doar vremea afară. Ce se întâmplă dacă doriți să cunoașteți vremea din interiorul casei dvs., în interiorul unei camere specifice? Asta încerc să rezolv cu acest proiect. Fanair folosește mul
Stație meteo simplă folosind ESP8266 .: 6 pași (cu imagini)
Stație meteo simplă care folosește ESP8266. Numărul total de vizionări. și afișați datele pe monitorul serial și afișați-le pe ecranul LCD. Datele vor fi f
Stație meteo DIY și stație senzor WiFi: 7 pași (cu imagini)
Stație meteo DIY și stație senzor WiFi: În acest proiect vă voi arăta cum să creați o stație meteo împreună cu o stație senzor WiFi. Stația senzorului măsoară datele locale de temperatură și umiditate și le trimite, prin WiFi, către stația meteo. Stația meteo afișează apoi t
Stație locală de temperatură / umiditate: 4 pași
Stație locală de temperatură / umiditate: În acest instructiv vă voi învăța cum să creați o stație mică pentru a măsura temperatura și umiditatea locale și să le afișez pe ecran. De ce am făcut asta? Tatăl meu m-a întrebat dacă aș putea face un fel de senzor care măsoară temperatura