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: Какого числа от 1 до 31, родился человек, такая у него и вся жизнь 2024, Srpanj
Anonim
Monitor temperature i vlažnosti
Monitor temperature i vlažnosti
Monitor temperature i vlažnosti
Monitor temperature i vlažnosti

U ovom uputstvu pokazat ću vam kako sami izraditi monitor temperature i vlažnosti za svoju dnevnu sobu. Uređaj također ima WiFi mogućnosti, u svrhu bilježenja podataka na udaljenom poslužitelju (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 s 16x4 znakova. Projekt je potpuno otvorenog koda, 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 će promjene morati biti napravljene na 3D modelu kućišta, DHT22 je također malo skuplji.

1 x 16 -bitni LCD zaslon od 5V [3,30 €] - Da, trebat će vam 5V jer je PCB dizajniran 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 zasloni 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 tantalni SMD kondenzator (paket 3528)

1 x 10K SMD otpornik (paket 0805)

1 x 10K lonac za trimer (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 upotrijebio, 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 duljinu 9 mm. Može se lako pronaći na eBayu pretraživanjem "DC Mount Jack Panel Panel" (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 strojno obrađeni ženski pin zaglavlje (kroz otvor)

1 x 2,54 mm (100mil) kratkospojnik - isti je kao oni koji se koriste na računalnim 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 uložaka od mesinga od bakra s utiskivanjem M3" na eBayu (pogledajte priloženu sliku).

4 vijka M2 12 mm

4 x M2 matice

1 x USB utični kabel USB tipa A do 5,5x2,1 mm [1,5 €] - To će omogućiti napajanje vašeg uređaja ili sa standardnog punjača za telefon ili s bilo kojeg računala s USB priključkom. Uređaj crpi samo 300mA najgoreg slučaja i 250mA u prosjeku, 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 tiskanih ploč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č - trebat će vam za programiranje ESP8266 na ploči.

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

3D pisač - Ako nemate pristup 3D pisaču, uvijek možete upotrijebiti generičku plastičnu kutiju za projekt i sami izraditi izreze pomoću Dremela. Minimalne unutarnje dimenzije takve kutije morat će biti 24 mm visine, 94 mm duljine i 66 mm širine. Za montažu LCD-a također ćete morati koristiti odvojke od 8 mm M2.

Dremel - potreban je samo ako se ne odlučite za 3D tiskano 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 utisnuti ili jednostavno otići na web mjesto vašeg omiljenog proizvođača PCB -a i naručiti. Ako ne planirate mijenjati izgled ploče, jednostavno zgrabite ZIP datoteku koja sadrži gerber datoteke priložene u ovom koraku i pošaljite je izravno proizvođaču. U slučaju da ipak želite unijeti promjene, datoteke sheme i izgleda KiCAD -a 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 postoji nekoliko stvari koje treba napomenuti. 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 osjetnik 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 mora 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. No, također možete pokušati zalemiti DHT11 na komad muškog zaglavlja i spojiti ga na taj način s običnim kutnim ženskim zaglavljem pod kutom, koje bi jednako dobro trebalo 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 lemljen, vrijeme je za izradu kućišta. Postoje dva različita dijela koja je potrebno ispisati, glavno tijelo kućišta i poklopac. Poklopac također sadrži rupe za pričvršćivanje za pričvršćivanje na zid.

Oba dijela mogu se ispisati standardnom mlaznicom od 0,4 mm na visini sloja 0,2 mm, za moj slučaj vrijeme ispisa bilo je oko 4 sata za oba dijela zajedno. Poklopac ne zahtijeva nikakve potpore glavni dio kućišta, međutim, uglavnom za dio ispod grla za vijke. Nakon ispisa, budite vrlo oprezni pri uklanjanju nosača, uspio sam razbiti jedno od stajališta za LCD dok sam to radio i morao sam ga ponovno 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 Thingiverseu.

Korak 4: Sastavljanje monitora

S otisnutim kućištem, vrijeme je za sastavljanje svega. Prvo postavite LCD u kućište i pomaknite ga ulijevo kako bi između njega i rupe za senzor ostao razmak.

Slika
Slika

Zatim postavite tiskanu ploču na nju, s senzorom koji je već pričvršćen na zaglavlje pinova.

Slika
Slika

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

Slika
Slika

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

Slika
Slika

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

Slika
Slika

Korak 5: Postavljanje poslužitelja

Postavljanje poslužitelja
Postavljanje poslužitelja

Prije prijenosa firmvera na ESP8266 potrebno je učiniti još jednu stvar, a to je postavljanje poslužitelja za bilježenje podataka koje je uređaj primio. U tu svrhu možete koristiti bilo koji Linux stroj koji želite, od Raspberry Pi -a na vašoj privatnoj mreži do kapljice DigitalOcean. Krenuo sam s kasnijim, ali postupak je prilič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 poslužitelj. Za to ćete morati upotrijebiti upravitelj paketa svoje distribucije, radi primjera ću upotrijebiti apt koji je upravitelj paketa koji koristi gotovo svaki distrikt temeljen na Debianu, uključujući Raspbian.

sudo apt ažuriranje

sudo apt instalirajte apache2 mysql-poslužitelj 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 Apachea.

Postavljanje baze podataka

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

I stvorite bazu podataka i korisnika s pristupom njoj na sljedeći način, IZRADI BAZU PODATAKA `senzori`

KORISTITE `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 Apachea, 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 pomoću 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. To će se koristiti kao lozinka kako bi se monitor mogao autentificirati na poslužitelju.

Na kraju, 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 bilježenje.

Postavljanje HTTPS -a (izborno)

To može biti izborno, ali ako je veza između ESP8266 i poslužitelja putem Interneta, vrlo se preporučuje korištenje neke enkripcije.

Nažalost, ne možete samo naprijed upotrijebiti nešto poput Let’s Encrypt za dobivanje certifikata. To je zato što barem u vrijeme pisanja HTTP klijentska knjižnica za ESP8266 još uvijek zahtijeva da se otisak prsta certifikata navede kao drugi argument pri pozivanju http.begin (). To znači da ćete, ako upotrebljavate nešto poput Let’s Encrypt, morati 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 istječe nakon vrlo dugog vremena (npr. 10 godina) i čuvanje skripte za bilježenje 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 firmver, 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 njoj. Dakle, da biste generirali certifikat koji istječ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 Uobičajeno ime. Ovdje ćete morati unijeti cijelu poddomenu koja će se koristiti za ovaj virtualni host. Poddomena koju ćete ovdje dati morat će biti ista s imenom poslužitelja koje ćete postaviti kasnije u konfiguraciji virtualnog hosta.

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

sa sljedećim sadržajem, Ime poslužitelja [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 kombinirano

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

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

i na kraju omogućiti novi virtualni host i ponovno pokrenuti Apache, sudo a2ensite senzori-ssl

sudo systemctl ponovno pokrenite apache2

Posljednje što trebate učiniti je dobiti 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 ih upotrijebite u kodu.

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

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

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

sudo systemctl restart apache2 sudo apt update sudo apt install certbot sudo certbot certonly --apache -d [poddomena]

Nakon dobivanja certifikata ponovno uredite konfiguraciju virtualnog hosta kako biste raskomentirali linije SSLEngine, SSLCertificateFile, SSLCertificateKeyFile i SSLCertificateChainFile te ponovno 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 preglednika. Certbot će se također pobrinuti za automatsko obnavljanje certifikata Let's Encrypt svaka 3 mjeseca, koristeći sistemski mjerač vremena 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 [Host] morati zamijeniti imenom domene ili IP adresom poslužitelja. Ako koristite HTTPS, također ćete morati unijeti 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 zajednice ESP8266 pomoću upravitelja odbora Arduino IDE -a. Nakon što to učinite, odaberite NodeMCU 1.0 (ESP-12E modul) s izbornika ploča. Zatim ćete morati instalirati knjižnicu SimpleDHT pomoću Upravitelja knjižnica. Na kraju, pritisnite gumb Potvrdi u gornjem lijevom kutu vašeg IDE prozora kako biste bili sigurni da se kôd kompilira bez pogrešaka.

I sada je konačno vrijeme da snimite firmver na mikrokontroler. Da biste to učinili, pomaknite kratkospojnik JP1 s desne strane, pa će GPIO0 ESP8266 biti spojen na masu što će omogućiti način programiranja. Zatim spojite USB na serijski pretvarač pomoću kratkospojnih žica na zaglavlje za programiranje 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 prijam i naravno zemlja -zemlja.

Na kraju, napajajte uređaj s 5 V pomoću kabela za USB na DC priključnicu 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 gumb 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 s vašom mrežom i počne komunicirati s poslužiteljem, trenutni datum i vrijeme također bi se trebali pojaviti na zaslonu.

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čeni: