Sadržaj:

Monitor temperature i vlažnosti: 6 koraka (sa slikama)
Monitor temperature i vlažnosti: 6 koraka (sa slikama)

Video: Monitor temperature i vlažnosti: 6 koraka (sa slikama)

Video: Monitor temperature i vlažnosti: 6 koraka (sa slikama)
Video: Как проверить генератор. За 3 минуты, БЕЗ ПРИБОРОВ и умений. 2024, Juli
Anonim
Monitor temperature i vlažnosti
Monitor temperature i vlažnosti
Monitor temperature i vlažnosti
Monitor temperature i vlažnosti

U ovom uputstvu ću vam pokazati kako sami napraviti monitor temperature i vlažnosti u vašoj dnevnoj sobi. Uređaj također ima WiFi mogućnosti, u svrhu evidentiranja podataka na udaljenom serveru (npr. Raspberry Pi) i kasnijeg pristupa putem jednostavnog web sučelja.

Glavni dijelovi uređaja su mikrokontroler ESP8266, senzor temperature i vlažnosti DHT11 i LCD ekran veličine 16x4. Projekt je u potpunosti otvoren, stoga slobodno preuzmite sheme, datoteke izgleda i datoteke dizajna za kućište i unesite sve promjene koje želite.

Korak 1: Alati i dijelovi

Alati i dijelovi
Alati i dijelovi
Alati i dijelovi
Alati i dijelovi
Alati i dijelovi
Alati i dijelovi
Alati i dijelovi
Alati i dijelovi

Za izradu monitora trebat će vam sljedeći dijelovi:

1 x ESP-12F [2 €]-Koliko ja znam, ESP-12E i ESP-12F su u osnovi identični, s tom razlikom što ESP-12F ima bolju antenu.

1 x DHT11 osjetnik temperature i vlažnosti [0,80 €] - DHT22 će također raditi, ali neke promjene će morati biti napravljene na 3D modelu kućišta, DHT22 je također malo skuplji.

1 x 16x4 LCD 5V [3.30 €] - Da, trebat će vam 5V jer je PCB dizajnirana tako da će se LCD napajati izravno iz 5V, a ne iz regulatora napona. To je učinjeno kako bi se smanjilo opterećenje regulatora napona, ali i zato što su 5V displeji obično jeftiniji. Ali ne brinite, iako ESP8266 radi na 3.3V, i dalje će raditi sasvim u redu.

1 x LD1117V33 SMD regulator napona, poznat i kao LD33 (paket SOT223) [0,80 €]

1 x 100nF keramički SMD kondenzator (paket 0603)

1 x 10uF Tantalum SMD kondenzator (paket 3528)

1 x 10K SMD otpornik (paket 0805)

1 x 10K trimer lonac (kroz otvor)

1 x 47Ω SMD otpornik (paket 0805) - Ovo je samo za ograničavanje struje koja ide na pozadinsko osvjetljenje LCD -a. Slobodno eksperimentirajte s različitim vrijednostima otpora i odaberite željeni intenzitet.

1 x SMD trenutni prekidač [0,80 €] - Ovo sam posebno koristio, ali možete koristiti bilo koji trenutni prekidač koji želite s istim otiskom. Također sam uspio pronaći iste prekidače na eBayu za manje dobivši više od jednog.

1 x 5,5x2,1 mm DC utičnica (montaža na ploču) [0,50 €] - Ona koju sam koristio ima promjer izreza ploče 8 mm i dužinu 9 mm. Može se lako pronaći na eBayu pretraživanjem "DC Mount Jack Panel Mount" (pogledajte priloženu sliku).

1 x 2,54 mm (100mil) 40-pinski muški pin zaglavlje (kroz otvor)

1 x 2,54 mm (100mil) 40-pinski obrađeni ženski pin zaglavlje (kroz otvor)

1 x 2,54 mm (100mil) kratkospojnik - isti je kao i oni koji se koriste na računarskim matičnim pločama.

4 vijka M3 8 mm

4 x umetci s navojem M3 4x4 mm - Lako ih se može pronaći pretraživanjem "M3 umetci od mesinga s utiskivanjem od mesinga" na eBayu (pogledajte sliku u prilogu).

4 x M2 vijci 12 mm

4 x M2 matice

1 x USB utični kabel USB tipa A do 5,5x2,1 mm [1,5 €] - Ovo će omogućiti napajanje vašeg uređaja ili sa standardnog punjača za telefon ili s bilo kojeg računara s USB priključkom. Uređaj crpi samo 300mA u najgorem slučaju i u prosjeku 250mA, pa će čak i USB 2.0 port biti dovoljan.

1 x PCB - Debljina ploče nije kritična, pa se odlučite za 1,6 mm, što je obično najjeftinija opcija kod većine proizvođača PCB -a.

3 x komadića namotane žice (oko 60 mm svaki)

3 x komada cijevi s toplinskom zaštitom (oko 10 mm svaki)

I sljedeći alati:

Lemilica

USB u serijski pretvarač - ovo će vam trebati za programiranje ESP8266 na ploči.

Phillips odvijač i/ili šesterokutni ključ - ovisno o vrsti vijka koji ćete koristiti.

3D štampač - Ako nemate pristup 3D štampaču, uvijek možete koristiti generičku plastičnu kutiju za projekte i sami izraditi izreze pomoću Dremela. Minimalne unutrašnje dimenzije takve kutije moraju biti 24 mm visine, 94 mm dužine i 66 mm širine. Za postavljanje LCD-a također ćete morati koristiti odvojke od 8 mm M2.

Dremel - potreban je samo ako se ne odlučite za 3D štampano kućište.

Korak 2: Izrada PCB -a

Izrada PCB -a
Izrada PCB -a
Izrada PCB -a
Izrada PCB -a
Izrada PCB -a
Izrada PCB -a

Prvi korak je izrada PCB -a. To možete učiniti tako što ćete ga sami urezati ili jednostavno otići na web stranicu vašeg omiljenog proizvođača PCB -a i naručiti. Ako ne planirate mijenjati izgled ploče, možete jednostavno preuzeti ZIP datoteku koja sadrži gerber datoteke priložene u ovom koraku i poslati je direktno proizvođaču. U slučaju da ipak želite promijeniti, datoteke sheme KiCAD -a i izgleda ploče možete pronaći ovdje.

Nakon što ste dobili ruke u ruke, vrijeme je za lemljenje komponenti. Ovo bi trebalo biti prilično jednostavno, ali treba napomenuti nekoliko stvari. Prvo, nemojte još samo lemiti PCB na LCD zaglavlju, to će morati biti učinjeno tijekom završne montaže zbog načina na koji je kućište dizajnirano. Ako sami izrađujete kućište, zanemarite taj savjet.

U3 konektor je mjesto na koje će se spojiti senzor DHT11. Idealno bi bilo da u tu svrhu upotrijebite zakrivljeni ženski pin zaglavljeni pod kutom od 90 °. Ali ako vam se sviđam, ne možete pronaći takvu, samo nabavite ravnu i sami je savijte. Ako to učinite kasnije, vodiči DHT11 također će biti kratki, pa ćete morati lemiti neke nastavke. Razmak između zaglavlja pina i senzora nakon povezivanja treba biti otprilike 5 mm.

Razlog zašto želite koristiti strojno zaglavlje iglica je taj što su rupe manje u usporedbi s običnim ženskim zaglavljima. Dakle, vodiči senzora mogu čvrsto sjediti stvarajući čvrstu vezu. Ali možete pokušati i lemiti DHT11 na komad muškog zaglavlja i spojiti ga na taj način s običnim uglovnim ženskim zaglavljem pod kutom, koje bi trebalo jednako dobro funkcionirati.

Korak 3: Izrada kućišta

Izrada kućišta
Izrada kućišta
Izrada kućišta
Izrada kućišta
Izrada kućišta
Izrada kućišta
Izrada kućišta
Izrada kućišta

Sada kada je PCB lemljeno vrijeme je za izradu kućišta. Postoje dva različita dijela koja je potrebno odštampati, glavno tijelo kućišta i poklopac. Na poklopcu se nalaze i rupe za pričvršćivanje za pričvršćivanje na zid.

Oba dijela mogu se štampati standardnom mlaznicom od 0,4 mm na visini sloja od 0,2 mm, u mom slučaju vrijeme ispisa bilo je oko 4 sata za oba dijela zajedno. Poklopac ne zahtijeva nikakav oslonac za glavni dio kućišta, međutim, uglavnom za dio ispod grla za vijke. Nakon štampe, budite vrlo pažljivi pri uklanjanju nosača, uspio sam razbiti jedno od stajališta za LCD dok sam to radio i morao sam ga ponovo zalijepiti superljepilom.

Kućište je dizajnirano na FreeCAD -u, pa ako želite unijeti bilo kakve promjene, trebalo bi biti prilično jednostavno. STL datoteke za ispis kućišta, kao i datoteke dizajna FreeCAD -a mogu se pronaći na Thingiverse -u.

Korak 4: Sklapanje monitora

Sa otisnutim kućištem, vrijeme je da sve sastavite. Prvo postavite LCD u kućište i pomaknite ga ulijevo, tako da će postojati razmak između njega i rupe za senzor.

Image
Image

Zatim postavite PCB na njega, sa senzorom koji je već pričvršćen na zaglavlje pina.

Image
Image

Nakon toga, gurnite senzor u otvor, gurnite LCD natrag u položaj i umetnite PCB na zaglavlje pina. Sada pričvrstite LCD zaslon pomoću M2 matica i vijaka i lemite PCB na zaglavlje pinova.

Image
Image

Zatim postavite utičnicu na mjesto, pričvrstite neke žice na nju i lemite njihove druge krajeve na PCB. Upotreba nekih cijevi za hladnjak ovdje bi također bila dobra ideja.

Image
Image

Zadnji korak je ugradnja metalnih umetaka s navojem tako da se poklopac može pričvrstiti vijcima M3. U tu svrhu ćete morati zagrijati lemilicu kako biste ih mogli gurnuti u rupe. Možete pogledati ovo uputstvo ako vam je potrebno više informacija o dodavanju metalnih niti vašim 3D ispisima.

Image
Image

Korak 5: Postavljanje servera

Postavljanje servera
Postavljanje servera

Prije postavljanja firmvera na ESP8266 potrebno je učiniti još jednu stvar, a to je postavljanje servera za bilježenje podataka koje je uređaj primio. U tu svrhu možete koristiti gotovo bilo koju Linux mašinu koju želite, od Raspberry Pi -a na vašoj privatnoj mreži do kapljice DigitalOcean. Krenuo sam s kasnijim, ali proces je približno isti bez obzira na to što odaberete.

Instaliranje Apache, MySQL (MariaDB) i PHP

Prvo moramo postaviti LAMP, ili drugim riječima instalirati Apache, MySQL (MariaDB) i PHP na server. Za to ćete morati koristiti upravitelja paketa vašeg distroa, radi primjera ću upotrijebiti apt koji je upravitelj paketa koji koristi gotovo svaki distrikt baziran na Debianu, uključujući Raspbian.

sudo apt update

sudo apt instalirajte apache2 mysql-server mysql-klijent php libapache2-mod-php php-mysql

Nakon što to učinite, ako postavite IP adresu vašeg poslužitelja u adresnu traku preglednika, trebali biste vidjeti zadanu stranicu Apache -a.

Postavljanje baze podataka

Sada nam je potrebna baza podataka za evidentiranje podataka. Prvo se povežite na MySQL kao root pokretanjem, sudo mysql

I stvorite bazu podataka i korisnika s pristupom na sljedeći način, CREATE `Sensors` baze podataka

UPOTREBITE `senzore '; CREATE TABLE `temperature` (` id` bigint (20) NOT NULL AUTO_INCREMENT, `client_id` smallint (6) NOT NULL,` value` smallint (6) NOT NULL, `created_at` vremenska oznaka NOT NULL ZADNJA CURRENT_TIMESTAMP, PRIMARNI KLJUČ (` id`)) MOTOR = InnoDB; CREATE TABLE `Vlažnost` (` id` bigint (20) NOT NULL AUTO_INCREMENT, `client_id` smallint (6) NOT NULL,` value` smallint (6) NOT NULL, `created_at` vremenska oznaka NOT NULL ZADNJA CURRENT_TIMESTAMP, PRIMARNI KLJUČ (` id`)) MOTOR = InnoDB; CREATE USER '[korisničko ime]'@'localhost' IDENTIFIKIRANO '[lozinkom]'; ODOBRITE SVE PRIVILEGIJE NA 'senzorima'.* NA 'senzorima'@'localhost'; IZLAZ

Obavezno zamijenite [korisničko ime] i [lozinku] stvarnim korisničkim imenom i lozinkom za korisnika MySQL -a koji vam se sviđa. Također ih zabilježite jer će vam trebati za sljedeći korak.

Konfiguriranje zapisnika i skripti web sučelja

Promijenite se u/var/www/html direktorij koji je korijen dokumenta zadanog virtualnog domaćina Apache -a, izbrišite HTML datoteku koja sadrži zadanu web stranicu i preuzmite skripte zapisivanja i web sučelja unutar nje.

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

Sada uredite skriptu za bilježenje koristeći nano, sudo nano log.php

Morat ćete zamijeniti [korisničko ime] i [lozinku] korisničkim imenom i lozinkom za korisnika MySQL -a koje ste stvorili u prethodnom koraku. Također, zamijenite [klijentski ključ] jedinstvenim nizom i zapišite ga. Ovo će se koristiti kao lozinka kako bi se monitor mogao autentifikovati na serveru.

Konačno, uredite index.php s nano, sudo nano index.php

i zamijenite [korisničko ime] i [lozinku] korisničkim imenom i lozinkom za korisnika MySQL -a kao što ste to učinili sa skriptom za logovanje.

Postavljanje HTTPS -a (izborno)

Ovo može biti opcionalno, ali ako je veza između ESP8266 i poslužitelja putem Interneta, preporučuje se upotreba neke enkripcije.

Nažalost, ne možete samo nastaviti i koristiti nešto poput Let's Let's Encrypt za dobivanje certifikata. To je zato što barem u vrijeme pisanja HTTP klijentska biblioteka za ESP8266 još uvijek zahtijeva da se otisak prsta certifikata navede kao drugi argument pri pozivanju http.begin (). To znači da ćete, ako koristite nešto poput Let’s Encrypt, morati ponovo ažurirati firmver na čip svaka 3 mjeseca kako biste ažurirali otisak prsta certifikata nakon svake obnove.

Zaobilazni način je generiranje samopotpisanog certifikata koji ističe nakon jako dugo vremena (npr. 10 godina) i čuvanje skripte za logovanje na vlastitom virtualnom hostu sa vlastitom poddomenom. Na taj način možete imati web sučelje za pristup podacima na zasebnoj poddomeni, koja će koristiti odgovarajući certifikat od pouzdanog tijela. Korištenje samopotpisanog certifikata u ovom slučaju nije sigurnosni problem jer će otisak prsta certifikata koji ga jedinstveno identificira biti tvrdo kodiran u firmveru, a certifikat će koristiti samo ESP8266.

Prije nego što počnemo, pretpostavit ću da već posjedujete naziv domene i da ste u mogućnosti stvoriti poddomene na njemu. Dakle, da biste generirali certifikat koji ističe nakon 10 godina, pokrenite sljedeću naredbu i odgovorite na pitanja.

sudo openssl req -x509 -čvorovi -dani 3650 -novi ključ rsa: 2048 -ključnica /etc/ssl/private/sensors.key -out /etc/ssl/certs/sensors.crt

Budući da se radi o samopotpisanom certifikatu, ono što odgovorite na većinu pitanja nije previše važno, osim za pitanje koje traži zajedničko ime. Ovdje ćete morati unijeti punu poddomenu koja će se koristiti za ovaj virtualni host. Poddomena koju ćete ovdje dati morat će biti ista sa imenom servera koje ćete postaviti kasnije u konfiguraciji virtualnog hosta.

Zatim kreirajte novu konfiguraciju virtualnog hosta, sudo nano /etc/apache2/sites-available/sensors-ssl.conf

sa sljedećim sadržajem, Ime servera [poddomena] DocumentRoot/var/www/senzori SSLEngine ON SSLCertificateKeyFile /etc/ssl/private/sensors.key SSLCertificateFile /etc/ssl/certs/sensors.crt Opcije +FollowSymlinks -Indeksi AllowOverride All ErrorLog error-ssl.log CustomLog $ {APACHE_LOG_DIR} /sensors-access-ssl.log kombinovano

Opet, svakako zamijenite [poddomenu] istom poddomenom koju ste koristili sa certifikatom. U ovom trenutku morate onemogućiti zadani virtualni host Apache -a, sudo a2dissite 000-default

promijenite naziv korijenskog direktorija dokumenta, sudo mv/var/www/html/var/www/senzori

i konačno omogućiti novi virtualni host i ponovo pokrenuti Apache, sudo a2ensite senzori-ssl

sudo systemctl ponovo pokrenite apache2

Posljednja stvar koju trebate učiniti je nabaviti otisak prsta certifikata, jer ćete ga morati koristiti u kodu firmvera.

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

Http.begin () očekuje da će graničnici između bajtova otiska prsta biti razmaci, pa ćete morati zamijeniti dvotočke razmacima prije nego što ih upotrebite u kodu.

Sada, ako ne želite koristiti samopotpisani certifikat za postavljanje web sučelja, novu poddomenu i kreiranje nove konfiguracije virtualnog hosta, sudo nano /etc/apache2/sites-available/sensors-web-ssl.conf

sa sljedećim sadržajem, Ime servera [poddomena] DocumentRoot/var/www/senzori #SSLEngine ON #SSLCertificateFile /etc/letsencrypt/live/[subdomain]/cert.pem #SSLCertificateKeyFile /etc/letsencrypt/live/[Subdomain] /letsencrypt/live/[subdomain]/chain.pem Opcije +FollowSymlinks -Indeksi AllowOverride All ErrorLog $ {APACHE_LOG_DIR} /sensors-web-error-ssl.log CustomLog $ {APACHE_LOG_DIR} /sensors-wel-access

Svakako zamijenite [poddomenu] poddomenom koju ste postavili za web sučelje. Zatim omogućite novi virtualni host, ponovo pokrenite Apache, instalirajte certbot i nabavite certifikat za novu poddomenu iz Let's Encrypt, sudo a2ensite senzori-web-ssl

sudo systemctl ponovno pokretanje apache2 sudo apt ažuriranje sudo apt instalacija certbot sudo certbot certonly --apache -d [poddomena]

Nakon dobivanja certifikata ponovo uredite konfiguraciju virtualnog hosta kako biste uklonili komentare sa linija SSLEngine, SSLCertificateFile, SSLCertificateKeyFile i SSLCertificateChainFile i ponovo pokrenite Apache.

Sada možete koristiti prvu poddomenu koja koristi samopotpisani certifikat za slanje podataka s ESP8266 na poslužitelj, dok drugu koristite za pristup web sučelju iz vašeg preglednika. Certbot će se također pobrinuti za automatsko obnavljanje certifikata Let's Encrypt svaka 3 mjeseca, koristeći sistemski tajmer koji bi trebao biti omogućen prema zadanim postavkama.

Korak 6: Programiranje ESP8266

Programiranje ESP8266
Programiranje ESP8266

Konačno, jedino što preostaje je učitati firmver na mikrokontroler. Da biste to učinili, preuzmite izvorni kod za firmver odavde i otvorite ga pomoću Arduino IDE -a. Morat ćete zamijeniti [SSID] i [Lozinku] stvarnim SSID -om i lozinkom vaše WiFi mreže. Također ćete morati zamijeniti [Client ID] i [Client Key] u pozivu funkcije sprintf onima koje ste koristili u PHP skripti na poslužitelju. Na kraju ćete morati zamijeniti [Host] imenom domene ili IP adresom poslužitelja. Ako koristite HTTPS, morat ćete dati i otisak prsta vašeg certifikata kao drugi argument u pozivu funkcije http.begin (). Objasnio sam kako dobiti otisak prsta certifikata u odjeljku "Postavljanje HTTPS -a" u prethodnom koraku.

Zatim, ako već niste, morat ćete instalirati osnovni paket ESP8266 zajednice pomoću Upravitelja odbora Arduino IDE -a. Nakon što to učinite, odaberite NodeMCU 1.0 (ESP-12E modul) iz izbornika ploča. Zatim ćete morati instalirati biblioteku SimpleDHT pomoću Upravitelja knjižnica. Na kraju, pritisnite gumb Verify u gornjem lijevom kutu vašeg IDE prozora kako biste bili sigurni da se kôd kompilira bez grešaka.

I sada je konačno vrijeme da narežete firmver na mikrokontroler. Da biste to učinili, pomaknite kratkospojnik JP1 s desne strane, tako da će GPIO0 ESP8266 biti spojen na masu što će omogućiti način programiranja. Zatim spojite USB na serijski pretvarač pomoću kratkospojnika na programsko zaglavlje označeno kao P1. Pin 1 zaglavlja za programiranje je uzemljen, pin 2 je prijemni pin ESP8266, a pin 3 odašiljača. Potreban vam je prijem ESP8266 za prijenos vašeg USB -a na serijski pretvarač, prijenos na prijem i naravno zemlja -zemlja.

Na kraju, napajajte uređaj s 5 V pomoću USB kabela za priključak na DC i spojite USB na serijski pretvarač na računalo. Sada biste trebali moći vidjeti virtualni serijski port na koji je spojen ESP8266, čim otvorite izbornik alata na svom IDE -u. Sada, samo pritisnite dugme Upload i to je to! Ako je sve prošlo kako ste očekivali, trebali biste moći vidjeti očitanja temperature i vlažnosti na LCD -u uređaja. Nakon što se ESP8266 poveže na vašu mrežu i započne komunikaciju s poslužiteljem, trenutni datum i vrijeme također bi se trebali pojaviti na ekranu.

Nakon nekoliko sati kada poslužitelj prikupi dobru količinu podataka, trebali biste moći vidjeti tablice temperature i vlažnosti posjetom http (s): // [host] /index.php?client_id= [id klijenta]. Gdje je [host] ili IP adresa vašeg poslužitelja ili poddomena koju koristite za web sučelje, i [ID klijenta] ID klijenta uređaja koji bi, ako ste ga ostavili na zadanu vrijednost, trebao biti 1.

Preporučuje se: