Cuprins:

Monitor de temperatură și umiditate: 6 pași (cu imagini)
Monitor de temperatură și umiditate: 6 pași (cu imagini)

Video: Monitor de temperatură și umiditate: 6 pași (cu imagini)

Video: Monitor de temperatură și umiditate: 6 pași (cu imagini)
Video: Nu functioneaza corect Climatronic sau Aer Conditionat. Vezi senzor temperatura interioara VW, Skoda 2024, Iulie
Anonim
Monitor de temperatură și umiditate
Monitor de temperatură și umiditate
Monitor de temperatură și umiditate
Monitor de temperatură și umiditate

În acest instructiv vă voi arăta cum să vă creați propriul monitor de temperatură și umiditate pentru camera dvs. de zi. Dispozitivul are, de asemenea, funcții WiFi, în scopul înregistrării datelor pe un server de la distanță (de exemplu, un Raspberry Pi) și accesării acestuia ulterior printr-o interfață web simplă.

Părțile principale ale dispozitivului sunt un microcontroler ESP8266, un senzor de temperatură și umiditate DHT11 și un ecran LCD de 16x4 caractere. Proiectul este complet open source, așa că nu ezitați să descărcați schemele, aspectul plăcii și fișierele de proiectare pentru incintă și să faceți orice modificări doriți.

Pasul 1: Instrumente și piese

Unelte și piese
Unelte și piese
Unelte și piese
Unelte și piese
Unelte și piese
Unelte și piese
Unelte și piese
Unelte și piese

Pentru a construi monitorul, veți avea nevoie de următoarele părți:

1 x ESP-12F [2 €] - Din câte știu, ESP-12E și ESP-12F sunt practic identice, cu diferența că ESP-12F are o antenă mai bună.

1 x senzor de temperatură și umiditate DHT11 [0,80 €] - DHT22 va funcționa, de asemenea, dar vor fi necesare unele modificări la modelul 3D al carcasei, iar DHT22 este și ceva mai scump.

1 x 16x4 caractere LCD 5V [3,30 €] - Da, veți avea nevoie de unul de 5V, deoarece PCB-ul este proiectat, astfel încât ecranul LCD să fie alimentat direct de la 5V, mai degrabă decât de la regulatorul de tensiune. Acest lucru a fost făcut pentru a reduce sarcina pe regulatorul de tensiune, dar și pentru că afișajele de 5V tind să fie mai ieftine. Dar nu vă faceți griji, chiar dacă ESP8266 funcționează la 3,3 V, va funcționa în continuare foarte bine.

1 x Regulator de tensiune SM11 LD1117V33, cunoscut și sub numele de LD33 (pachet SOT223) [0,80 €]

1 x condensator SMD de ceramică 100nF (pachet 0603)

1 x condensator SMD Tantal 10uF (pachet 3528)

1 x rezistor SMD 10K (pachet 0805)

1 x oala de tuns 10K (gaura trecatoare)

1 x rezistor SMD de 47Ω (pachet 0805) - Acesta este doar pentru a limita curentul care merge la lumina de fundal a ecranului LCD. Simțiți-vă liber să experimentați diferite valori de rezistență și alegeți intensitatea pe care o preferați.

1 x SMD Momentary Switch [0,80 €] - Particularitatea pe care am folosit-o este aceasta, dar puteți utiliza orice switch momentan pe care îl doriți cu aceeași amprentă. De asemenea, am putut găsi aceleași comutatoare pe eBay pentru mai puțin, obținând mai multe.

1 x Jack DC de 5,5x2,1 mm (montare pe panou) [0,50 €] - Cel pe care l-am folosit are un diametru de decupare a panoului de 8 mm și o lungime de 9 mm. Poate fi găsit cu ușurință pe eBay căutând „Panou DC Mount Jack” (vezi poza atașată).

1 x 2,54mm (100mil) 40 pini antet masculin (orificiu traversant)

1 x 2,54mm (100mil) 40 pini prelucrate cu antet feminin (orificiu traversant)

1 x 2,54mm (100mil) Jumper - Este la fel ca cele utilizate pe plăcile de bază ale computerului.

4 x șuruburi M3 8mm

4 x inserții filetate M3 4x4mm - Acestea pot fi găsite cu ușurință prin căutarea „Inserturilor de cupru din alamă presate M3” pe eBay (vezi poza atașată).

4 x șuruburi M2 12mm

4 x M2 Nuts

1 x cablu USB de tip A la 5,5x2,1mm DC [1,5 €] - Acest lucru vă va permite să alimentați dispozitivul fie de la un încărcător de telefon standard, fie de la orice computer cu un port USB. Dispozitivul atrage doar 300mA cel mai rău caz și 250mA în medie, astfel încât chiar și un port USB 2.0 va funcționa.

1 x PCB - Grosimea plăcii nu este critică, deci mergeți doar la 1,6 mm, care este de obicei cea mai ieftină opțiune cu majoritatea producătorilor de PCB.

3 x bucăți de sârmă eșuată (aproximativ 60 mm fiecare)

3 bucăți de tub termocontractabil (aproximativ 10 mm fiecare)

Și următoarele instrumente:

Ciocan de lipit

Convertor USB la Serial - Veți avea nevoie de acest lucru pentru programarea ESP8266 pe placă.

Șurubelniță Phillips și / sau cheie hexagonală - În funcție de tipul de șuruburi pe care le veți utiliza.

Imprimantă 3D - Dacă nu aveți acces la o imprimantă 3D, puteți utiliza oricând o cutie de proiectare din plastic generică și puteți face decupajele cu un Dremel. Dimensiunile minime interioare pentru o astfel de cutie vor trebui să fie de 24 mm înălțime, 94 mm lungime și 66 mm lățime. De asemenea, va trebui să utilizați stand-off-uri M2 de 8 mm pentru montarea ecranului LCD.

Dremel - Este necesar doar dacă nu alegeți carcasa imprimată 3D.

Pasul 2: Realizarea PCB-ului

Realizarea PCB-ului
Realizarea PCB-ului
Realizarea PCB-ului
Realizarea PCB-ului
Realizarea PCB-ului
Realizarea PCB-ului

Primul pas este realizarea PCB-ului. Puteți face acest lucru fie gravându-l singur, fie doar accesând site-ul web al producătorului dvs. preferat de PCB și plasând o comandă. Dacă nu intenționați să faceți modificări în aspectul plăcii, puteți pur și simplu să preluați fișierul ZIP care conține fișierele gerber atașate la acest pas și să îl trimiteți direct producătorului. În cazul în care doriți să faceți modificări, fișierele schemei KiCAD și aspectul plăcii pot fi găsite aici.

După ce ați pus mâna pe plăci, este timpul să lipiți componentele. Acest lucru ar trebui să fie destul de simplu, dar trebuie menționate câteva lucruri. În primul rând, nu continuați să lipiți PCB-ul de pe antetul LCD încă, acest lucru va trebui făcut în timpul asamblării finale datorită modului în care a fost proiectată carcasa. Dacă vă creați propria incintă, totuși nu ezitați să ignorați acest sfat.

Conectorul U3 este locul unde va fi conectat senzorul DHT11. În mod ideal, ar trebui să utilizați un antet cu unghi de 90 °, prelucrat în unghi, pentru acest scop. Dar dacă îți place de mine nu reușești să găsești una, ia-o pe una dreaptă și îndoaie-o singur. Dacă faceți mai târziu, cablurile DHT11 vor fi, de asemenea, puțin scurte, așa că va trebui să lipiți câteva extensii. Distanța dintre antetul pinului și senzorul odată conectat trebuie să fie de aproximativ 5 mm.

Motivul pentru care doriți să utilizați un antet cu știft prelucrat este că găurile sunt mai mici în comparație cu anteturile cu știfturi feminine obișnuite. Deci, cablurile senzorului pot sta strâns acolo, creând o conexiune solidă. Puteți încerca, de asemenea, să lipiți DHT11 pe o bucată de antet masculin și să-l conectați în acest fel la un antet normal cu unghi feminin, care ar trebui să funcționeze la fel de bine.

Pasul 3: Realizarea incintei

Realizarea incintei
Realizarea incintei
Realizarea incintei
Realizarea incintei
Realizarea incintei
Realizarea incintei
Realizarea incintei
Realizarea incintei

Acum, când PCB-ul este lipit, este timpul să faceți carcasa. Există două părți diferite care trebuie imprimate, corpul principal al carcasei și capacul. Capacul are, de asemenea, găuri de montare pentru fixarea acestuia pe perete.

Ambele părți pot fi tipărite cu o duză standard de 0,4 mm la înălțimea stratului de 0,2 mm, pentru cazul meu timpul de imprimare a fost de aproximativ 4 ore pentru ambele părți combinate. Capacul nu necesită suporturi, însă partea principală a carcasei, în special pentru partea de sub prizele cu șurub. După imprimare, fiți foarte atenți la îndepărtarea suporturilor, am reușit să rup unul dintre stand-off-urile pentru LCD în timp ce făceam acest lucru și a trebuit să-l lipesc din nou cu superglue.

Carcasa este proiectată pe FreeCAD, deci, dacă doriți să faceți modificări, ar trebui să fie destul de simplă. Fișierele STL pentru imprimarea carcasei, precum și fișierele de proiectare FreeCAD pot fi găsite pe Thingiverse.

Pasul 4: Asamblarea monitorului

Cu carcasa imprimată, este timpul să puneți totul împreună. Mai întâi, așezați LCD-ul în interiorul carcasei și glisați-l spre stânga, astfel încât să existe un spațiu între acesta și orificiul pentru senzor.

Imagine
Imagine

Apoi, așezați PCB-ul deasupra acestuia, cu senzorul deja atașat pe antetul pinului.

Imagine
Imagine

După aceea, împingeți senzorul în gaură, glisați LCD-ul înapoi în poziție și introduceți PCB pe antetul pinului. Acum fixați LCD-ul în poziție folosind piulițe și șuruburi M2 și lipiți PCB-ul pe antetul pinului.

Imagine
Imagine

Apoi, puneți mufa de alimentare în poziție, atașați niște fire la ea și lipiți celelalte capete la PCB. Utilizarea unor tuburi termoretractabile aici ar fi, de asemenea, o idee bună.

Imagine
Imagine

Ultimul pas este instalarea inserțiilor filetate din metal, astfel încât capacul să poată fi înșurubat cu șuruburi M3. În acest scop, va trebui să utilizați fierul de lipit pentru a le încălzi, astfel încât să poată fi împinse în găuri. Puteți arunca o privire asupra acestui instructiv dacă aveți nevoie de mai multe informații despre adăugarea firelor metalice la imprimările dvs. 3D.

Imagine
Imagine

Pasul 5: Configurarea serverului

Configurarea serverului
Configurarea serverului

Înainte de a încărca firmware-ul pe ESP8266, mai trebuie făcut un lucru: configurarea unui server pentru înregistrarea datelor primite de dispozitiv. În acest scop, puteți utiliza aproape orice mașină Linux pe care o doriți, de la un Raspberry Pi din rețeaua dvs. privată la o picătură DigitalOcean. Am mers cu versiunea ulterioară, dar procesul este cam același, indiferent de alegerea dvs.

Instalarea Apache, MySQL (MariaDB) și PHP

Mai întâi trebuie să configurăm LAMP sau, cu alte cuvinte, să instalăm Apache, MySQL (MariaDB) și PHP pe server. Pentru aceasta, va trebui să utilizați managerul de pachete al distribuției dvs., de exemplu, voi folosi apt, care este managerul de pachete folosit de aproape orice distribuție bazată pe Debian, inclusiv Raspbian.

actualizare sudo apt

sudo apt instalați apache2 mysql-server mysql-client php libapache2-mod-php php-mysql

După aceasta, dacă puneți adresa IP a serverului dvs. pe bara de adrese a browserului dvs., ar trebui să puteți vedea pagina implicită a Apache.

Configurarea bazei de date

Acum avem nevoie de o bază de date pentru înregistrarea datelor. Mai întâi, conectați-vă la MySQL ca root executând, sudo mysql

Și creați baza de date și un utilizator cu acces la aceasta după cum urmează, CREAȚI „senzori” din BAZA DE DATE

UTILIZAȚI „senzori”; CREATE TABLE `temperature` (` id` bigint (20) NOT NULL AUTO_INCREMENT, `client_id` smallint (6) NOT NULL,` value` smallint (6) NOT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (` id`)) MOTOR = InnoDB; CREARE TABEL `umiditate` (` id` bigint (20) NOT NULL AUTO_INCREMENT, `client_id` smallint (6) NOT NULL,` value` smallint (6) NOT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (` id`)) MOTOR = InnoDB; CREARE UTILIZATOR '[nume utilizator]' @ 'localhost' IDENTIFICAT DE '[parolă]'; ACORDĂ TOATE PRIVILEGII PE „senzori”. * TO „senzori” @ „localhost”; IEȘIRE

Asigurați-vă că înlocuiți [numele de utilizator] și [parola] cu numele de utilizator și parola reale pentru utilizatorul MySQL care vă place. De asemenea, păstrați o notă a acestora, deoarece veți avea nevoie de ele pentru pasul următor.

Configurarea scripturilor de jurnalizare și interfață web

Treceți la directorul / var / www / html care este rădăcina documentului gazdei virtuale implicite a Apache, ștergeți fișierul HTML care conține pagina web implicită și descărcați scripturile de jurnalizare și interfață web din interior.

cd / var / www / html

sudo rm index.html sudo wget https://raw.githubusercontent.com/magkopian/esp-arduino-temp-monitor/master/server/log.php sudo wget https://raw.githubusercontent.com/magkopian/esp- arduino-temp-monitor / master / server / index.php

Acum editați scriptul de înregistrare folosind nano, sudo nano log.php

Va trebui să înlocuiți [numele de utilizator] și [parola] cu numele de utilizator și parola pentru utilizatorul MySQL pe care le-ați creat la pasul anterior. De asemenea, înlocuiți [cheia clientului] cu un șir unic și notați-l. Aceasta va fi utilizată ca parolă, astfel încât monitorul să se poată autentifica pe server.

În cele din urmă, editați index.php cu nano, sudo nano index.php

și înlocuiți [numele de utilizator] și [parola] cu numele de utilizator și parola pentru utilizatorul MySQL, așa cum ați făcut cu scriptul de înregistrare.

Configurarea HTTPS (opțional)

Acest lucru poate fi opțional, dar dacă conexiunea între ESP8266 și server este pe internet, este foarte recomandat să utilizați o criptare.

Din păcate, nu poți pur și simplu să folosești ceva de genul Let’s Encrypt pentru a obține un certificat. Acest lucru se datorează faptului că cel puțin în momentul scrierii, biblioteca client HTTP pentru ESP8266 necesită în continuare amprenta certificatului să fie furnizată ca un al doilea argument atunci când se apelează http.begin (). Acest lucru înseamnă că, dacă folosiți ceva de genul Let’s Encrypt, va trebui să retrimiteți firmware-ul la cip la fiecare 3 luni pentru a actualiza amprenta certificatului după fiecare reînnoire.

O soluție în acest sens ar fi generarea unui certificat autosemnat care expiră după foarte mult timp (de exemplu, 10 ani) și păstrarea scriptului de înregistrare pe propria gazdă virtuală cu propriul subdomeniu. În acest fel, puteți avea interfața web pentru accesarea datelor pe un subdomeniu separat, care va utiliza un certificat adecvat de la o autoritate de încredere. Utilizarea unui certificat autosemnat în acest caz nu este o problemă de securitate, deoarece amprenta certificatului care îl identifică în mod unic va fi codificată în firmware și certificatul va fi utilizat doar de ESP8266.

Înainte de a începe, voi presupune că dețineți deja un nume de domeniu și că puteți crea subdomenii pe acesta. Deci, pentru a genera un certificat care expiră după 10 ani, executați următoarea comandă și răspundeți la întrebări.

sudo openssl req -x509 -nodes -days 3650 -newkey rsa: 2048 -keyout /etc/ssl/private/sensors.key -out /etc/ssl/certs/sensors.crt

Deoarece acesta este un certificat autosemnat, ceea ce răspundeți în majoritatea întrebărilor nu contează prea mult, cu excepția întrebării care cere numele comun. Aici va trebui să furnizați subdomeniul complet care va fi utilizat pentru această gazdă virtuală. Subdomeniul pe care îl veți da aici va trebui să fie același cu ServerName pe care îl veți seta ulterior în configurația gazdei dvs. virtuale.

Apoi creați o nouă configurație de gazdă virtuală, sudo nano /etc/apache2/sites-available/sensors-ssl.conf

cu următorul conținut, ServerName [subdomeniu] DocumentRoot / var / www / sensors SSLEngine ON SSLCertificateKeyFile /etc/ssl/private/sensors.key SSLCertificateFile /etc/ssl/certs/sensors.crt Opțiuni + FollowSymlinks -Indexes AllowOverride All ErrorLog $ {APACHE_LOG error-ssl.log CustomLog $ {APACHE_LOG_DIR} /sensors-access-ssl.log combinat

Din nou, asigurați-vă că înlocuiți [subdomeniul] cu același subdomeniu pe care l-ați utilizat cu certificatul. În acest moment va trebui să dezactivați gazda virtuală implicită a Apache, sudo a2dissite 000-implicit

schimbați numele directorului rădăcină al documentului, sudo mv / var / www / html / var / www / sensors

și, în cele din urmă, activați noua gazdă virtuală și reporniți Apache, sudo a2ensite sensors-ssl

sudo systemctl reporniți apache2

Ultimul lucru care trebuie făcut este să obțineți amprenta certificatului, deoarece va trebui să îl utilizați în codul de firmware.

openssl x509 -noout -fprintprint -sha1 -inform pem -in /etc/ssl/certs/sensors.crt

Http.begin () se așteaptă ca delimitatorii dintre octeții amprentei digitale să fie spații, deci va trebui să înlocuiți două puncte cu spații înainte de a-l utiliza în cod.

Acum, dacă nu doriți să utilizați un certificat auto-semnat pentru interfața web configurați un subdomeniu nou și creați o nouă configurație de gazdă virtuală, sudo nano /etc/apache2/sites-available/sensors-web-ssl.conf

cu următorul conținut, ServerName [subdomeniu] DocumentRoot / var / www / sensors #SSLEngine ON #SSLCertificateFile /etc/letsencrypt/live/[subdomain]/cert.pem #SSLCertificateKeyFile /etc/letsencrypt/live/[subdomain[/privkey.pem #SSLCertificate /letsencrypt/live/[subdomain]/chain.pem Options + FollowSymlinks -Indexes AllowOverride All ErrorLog $ {APACHE_LOG_DIR} /sensors-web-error-ssl.log CustomLog $ {APACHE_LOG_DIR} /sensors-web-access-ssl

Asigurați-vă că înlocuiți [subdomeniul] cu subdomeniul pe care l-ați configurat pentru interfața web. Apoi activați noua gazdă virtuală, reporniți Apache, instalați certbot și obțineți un certificat pentru noul subdomeniu de la Let's Encrypt, sudo a2ensite sensors-web-ssl

sudo systemctl reporniți apache2 sudo apt update sudo apt install certbot sudo certbot certonly --apache -d [subdomeniu]

După obținerea certificatului, editați din nou configurația gazdei virtuale pentru a decomenta liniile SSLEngine, SSLCertificateFile, SSLCertificateKeyFile și SSLCertificateChainFile și reporniți Apache.

Și acum puteți utiliza primul subdomeniu care utilizează certificatul auto-semnat pentru a trimite datele de la ESP8266 la server, în timp ce îl utilizați pe al doilea pentru a accesa interfața web din browserul dvs. Certbot se va ocupa, de asemenea, să vă reînnoiască automat Certificatul Let's Encrypt la fiecare 3 luni, utilizând un cronometru systemd care ar trebui activat în mod implicit.

Pasul 6: Programarea ESP8266

Programarea ESP8266
Programarea ESP8266

În cele din urmă, singurul lucru rămas de făcut este să încărcați firmware-ul pe microcontroler. Pentru a face acest lucru, descărcați codul sursă pentru firmware de aici și deschideți-l folosind Arduino IDE. Va trebui să înlocuiți [SSID] și [Parolă] cu SSID-ul și parola reale ale rețelei dvs. WiFi. De asemenea, va trebui să înlocuiți [Client ID] și [Client Key] pe apelul funcției sprintf cu cele pe care le-ați folosit pe scriptul PHP de pe server. În cele din urmă, va trebui să înlocuiți [Gazda] cu numele de domeniu sau adresa IP a serverului. Dacă utilizați HTTPS, va trebui, de asemenea, să furnizați amprenta certificatului dvs. ca un al doilea argument pe apelul de funcție al http.begin (). Am explicat cum să obțineți amprenta certificatului la secțiunea „Configurarea HTTPS” din pasul anterior.

Apoi, dacă nu ați făcut deja, va trebui să instalați pachetul de bază Comunitate ESP8266 folosind Board Manager al IDE Arduino. Odată ce ați făcut acest lucru, selectați NodeMCU 1.0 (modul ESP-12E) din meniul plăcilor. Apoi, va trebui să instalați biblioteca SimpleDHT folosind Library Manager. În cele din urmă, apăsați butonul Verificare din colțul din stânga sus al ferestrei IDE pentru a vă asigura că codul se compilează fără erori.

Și acum, este în sfârșit timpul să ardeți firmware-ul pe microcontroler. Pentru aceasta, mutați jumperul JP1 din dreapta, astfel încât GPIO0 al ESP8266 va fi conectat la masă, ceea ce va permite modul de programare. Apoi, atașați USB-ul la convertorul serial utilizând fire jumper la antetul de programare etichetat ca P1. Pinul 1 al antetului de programare este împământat, pinul 2 este pinul de recepție al ESP8266 și pinul 3 transmite. Aveți nevoie de recepția ESP8266 pentru a accesa transmisia USB către convertorul serial, transmiterea la recepție și, bineînțeles, de la sol la masă.

În cele din urmă, alimentați dispozitivul cu 5V utilizând cablul jack USB-DC și conectați USB-ul la convertorul serial la computer. Acum ar trebui să puteți vedea portul serial virtual la care este conectat ESP8266, imediat ce deschideți meniul de instrumente de pe IDE. Acum, doar apăsați butonul Încărcare și gata! Dacă totul a decurs așa cum era de așteptat, ar trebui să puteți vedea citirile de temperatură și umiditate pe ecranul LCD al dispozitivului. După ce ESP8266 se conectează la rețeaua dvs. și începe să comunice cu serverul, data și ora curente ar trebui să apară și pe afișaj.

După câteva ore, când serverul va colecta o cantitate bună de date, ar trebui să puteți vedea diagramele de temperatură și umiditate vizitând http (e): // [host] /index.php?client_id= [client id]. În cazul în care [gazdă] este fie adresa IP a serverului dvs., fie subdomeniul pe care îl utilizați pentru interfața web și [client id] ID-ul clientului dispozitivului, care, dacă l-ați lăsat la valoarea implicită, ar trebui să fie 1.

Recomandat: