Innholdsfortegnelse:

Temperatur- og fuktighetsmonitor: 6 trinn (med bilder)
Temperatur- og fuktighetsmonitor: 6 trinn (med bilder)

Video: Temperatur- og fuktighetsmonitor: 6 trinn (med bilder)

Video: Temperatur- og fuktighetsmonitor: 6 trinn (med bilder)
Video: Zigbee датчик освещенности, температуры и влажности с экраном на электронных чернилах Moes 2024, Juli
Anonim
Temperatur- og fuktighetsmonitor
Temperatur- og fuktighetsmonitor
Temperatur- og fuktighetsmonitor
Temperatur- og fuktighetsmonitor

I denne instruksen skal jeg vise deg hvordan du lager din egen temperatur- og fuktighetsmonitor for stuen din. Enheten har også WiFi -funksjoner for å logge dataene på en ekstern server (f.eks. En Raspberry Pi) og få tilgang til dem senere via et enkelt webgrensesnitt.

Hoveddelene på enheten er en ESP8266 mikrokontroller, en DHT11 temperatur- og fuktighetssensor og en 16x4 tegn LCD. Prosjektet er fullt åpen kildekode, så last ned skjematisk plan, layout og designfiler for kabinettet og gjør eventuelle endringer du liker.

Trinn 1: Verktøy og deler

Verktøy og deler
Verktøy og deler
Verktøy og deler
Verktøy og deler
Verktøy og deler
Verktøy og deler
Verktøy og deler
Verktøy og deler

For å bygge skjermen trenger du følgende deler:

1 x ESP-12F [2 €]-Så vidt jeg vet er ESP-12E og ESP-12F i utgangspunktet identiske, med den forskjellen at ESP-12F har en bedre antenne.

1 x DHT11 temperatur- og fuktighetssensor [0,80 €] - DHT22 kommer også til å fungere, men noen endringer må gjøres på 3D -modellen til kabinettet, DHT22 er også litt dyrere.

1 x 16x4 tegn LCD 5V [3,30 €] - Ja, du trenger en 5V som PCB er designet slik at LCD -en blir drevet direkte fra 5V i stedet for spenningsregulatoren. Dette ble gjort for å redusere belastningen på spenningsregulatoren, men også fordi 5V -skjermer pleier å være billigere. Men ikke bekymre deg, selv om ESP8266 fungerer på 3,3V, vil det fortsatt fungere helt fint.

1 x LD1117V33 SMD spenningsregulator, også kjent som LD33 (SOT223 -pakken) [0,80 €]

1 x 100nF keramisk SMD kondensator (0603 pakke)

1 x 10uF Tantal SMD kondensator (3528 pakke)

1 x 10K SMD -motstand (0805 -pakke)

1 x 10K trimmerpotte (gjennomgående hull)

1 x 47Ω SMD -motstand (0805 -pakke) - Dette er bare for å begrense strømmen som går til bakgrunnsbelysningen på LCD -skjermen. Eksperimenter gjerne med forskjellige motstandsverdier og velg intensiteten du foretrekker.

1 x SMD Momentary Switch [0,80 €] - Spesielt jeg brukte er dette, men du kan bruke hvilken som helst momentbryter du vil ha med samme fotavtrykk. Jeg var også i stand til å finne de samme bryterne på eBay for mindre ved å få mer enn en.

1 x 5,5x2,1 mm DC -kontakt (panelmontering) [0,50 €] - Den jeg brukte har en 8 mm panelutskjæringsdiameter og en 9 mm lengde. Den er lett å finne på eBay ved å søke etter "Panel Mount DC Jack" (se vedlagte bilde).

1 x 2,54 mm (100mil) 40-pinners hannpinne (gjennomgående hull)

1 x 2,54 mm (100mil) 40-pinners maskinert hunnpinnehodet (gjennom hull)

1 x 2,54 mm (100mil) jumper - Det er det samme som de som brukes på datamaskinens hovedkort.

4 x M3 8 mm bolter

4 x M3 4x4mm gjengede innsatser - De kan lett bli funnet ved å søke etter "M3 Press -In Messing Copper Inserts" på eBay (se vedlagte bilde).

4 x M2 12 mm bolter

4 x M2 nøtter

1 x USB Type A til 5,5 x 2,1 mm DC -pluggkabel [1,5 €] - Dette gjør det mulig å drive enheten fra enten en vanlig telefonlader eller stort sett hvilken som helst datamaskin med en USB -port. Enheten trekker bare 300mA worst case og 250mA i gjennomsnitt, så selv en USB 2.0 -port vil gjøre det.

1 x PCB - Platetykkelsen er ikke kritisk, så bare gå for 1,6 mm, som vanligvis er det billigste alternativet for de fleste PCB -produsenter.

3 x stykker strandet tråd (ca. 60 mm hver)

3 x stykker varmekrympeslange (ca. 10 mm hver)

Og følgende verktøy:

Loddejern

USB til seriell omformer - Du trenger dette for å programmere ESP8266 på tavlen.

Phillips skrutrekker og/eller sekskantnøkkel - Avhengig av hvilken type skruer du vil bruke.

3D -skriver - Hvis du ikke har tilgang til en 3D -skriver, kan du alltid bruke en generisk plastboks og lage utskjæringene selv med en Dremel. Minimum innvendige dimensjoner for en slik boks må være 24 mm høyde, 94 mm lengde og 66 mm bredde. Du må også bruke 8 mm M2-avstand for å montere LCD-skjermen.

Dremel - Bare nødvendig hvis du ikke går for 3D -trykt kabinett.

Trinn 2: Lag PCB

Å lage PCB
Å lage PCB
Å lage PCB
Å lage PCB
Å lage PCB
Å lage PCB

Det første trinnet er å lage PCB. Du kan gjøre det ved enten å etse det selv, eller bare gå til nettstedet til din favoritt PCB -produsent og legge inn en bestilling. Hvis du ikke planlegger å gjøre noen endringer i brettoppsettet, kan du bare ta ZIP -filen som inneholder gerber -filene som er vedlagt på dette trinnet, og sende den direkte til produsenten. Hvis du vil gjøre endringer, kan KiCAD -skjematiske filer og brettoppsettfiler finnes her.

Etter å ha fått hendene på brettene er det på tide å lodde komponentene. Dette burde være ganske enkelt, men det er noen få ting som bør noteres. For det første, ikke fortsett å lodde kretskortet på LCD -hodet ennå, dette må gjøres under den siste monteringen på grunn av måten skapet ble designet på. Hvis du lager ditt eget kabinett, må du imidlertid ignorere det rådet.

U3 -kontakten er der DHT11 -sensoren skal kobles til. Ideelt sett bør du bruke en 90 ° vinklet maskinert hunnpinnehodet for dette formålet. Men hvis du ikke liker meg, kan du bare få en rett og bøye den selv. Hvis du gjør det senere, blir også avledningene til DHT11 litt korte, så du må lodde noen utvidelser. Avstanden mellom pinnehodet og sensoren når den er tilkoblet, må være omtrent 5 mm.

Grunnen til at du vil bruke en maskinert pinneoverskrift, er fordi hullene er mindre sammenlignet med de vanlige kvinnelige pinnehodene. Så, sensorens ledninger kan sitte tett der og skape en solid forbindelse. Men du kan også prøve å lodde DHT11 på et stykke mannlig pin -overskrift og koble den på den måten til en vanlig vinklet kvinnelig pin -header, som skal fungere like bra.

Trinn 3: Gjør vedlegg

Gjør vedlegg
Gjør vedlegg
Gjør vedlegg
Gjør vedlegg
Gjør vedlegg
Gjør vedlegg
Gjør vedlegg
Gjør vedlegg

Nå som kretskortet er loddet, er det på tide å lage kabinettet. Det er to forskjellige deler som må skrives ut, hoveddelen av kabinettet og lokket. Lokket har også monteringshull for å feste det på veggen.

Begge deler kan skrives ut med en standard 0,4 mm dyse i 0,2 mm laghøyde, for mitt tilfelle var utskriftstiden omtrent 4 timer for begge deler tilsammen. Lokket krever ingen støtter, men hoveddelen av kabinettet gjør det, hovedsakelig for delen under skruekontaktene. Etter å ha skrevet ut, vær veldig forsiktig med å fjerne støttene, jeg klarte å bryte en av stand-offene for LCD-skjermen mens jeg gjorde det og måtte lime den på igjen med superlim.

Kapslingen er designet på FreeCAD, så hvis du vil gjøre noen endringer, bør det være ganske enkelt. STL -filene for utskrift av kabinettet samt FreeCAD -designfiler finnes på Thingiverse.

Trinn 4: Montering av skjermen

Med kabinettet trykt, på tide å sette alt sammen. Først plasserer du LCD -skjermen inne i etuiet og skyver den til venstre, så det blir et gap mellom den og hullet til sensoren.

Bilde
Bilde

Plasser deretter kretskortet på toppen av det, med sensoren allerede festet på tapphodet.

Bilde
Bilde

Etter det skyver du sensoren inn i hullet, skyver LCD -skjermen tilbake til posisjon og setter kretskortet på tapphodet. Fest LCD -skjermen på plass med M2 muttere og bolter, og lodd kretskortet på pinnehodet.

Bilde
Bilde

Sett deretter strømkontakten på plass, fest noen ledninger til den og lodd de andre endene til kretskortet. Bruk av noen varmekrympeslanger her vil også være en god idé.

Bilde
Bilde

Det siste trinnet er å installere metallgjengede innsatser slik at lokket kan skrus på plass med M3 -bolter. For det formålet må du bruke loddejernet ditt for å varme dem opp, slik at de kan skyves inn i hullene. Du kan ta en titt på denne instruksen hvis du trenger mer informasjon om hvordan du legger metalltråder til 3D -utskriftene dine.

Bilde
Bilde

Trinn 5: Konfigurere serveren

Sette opp serveren
Sette opp serveren

Før du laster opp fastvaren til ESP8266, er det en ting som må gjøres, nemlig å sette opp en server for å logge dataene mottatt av enheten. For det formålet kan du bruke stort sett hvilken som helst Linux -maskin du vil, fra en Raspberry Pi på ditt private nettverk til en DigitalOcean -dråpe. Jeg gikk med den senere, men prosessen er stort sett den samme uansett hva du velger.

Installere Apache, MySQL (MariaDB) og PHP

Først må vi sette opp LAMP, eller med andre ord installere Apache, MySQL (MariaDB) og PHP på serveren. For det må du bruke pakkelederen for distroen din, av eksemplets skyld vil jeg bruke apt som er pakkebehandleren som brukes av stort sett enhver Debian -basert distro, inkludert Raspbian.

sudo apt oppdatering

sudo apt installer apache2 mysql-server mysql-client php libapache2-mod-php php-mysql

Etter at det er gjort, hvis du setter IP -adressen til serveren din til adresselinjen i nettleseren din, bør du kunne se standardsiden til Apache.

Sette opp databasen

Nå trenger vi en database for logging av dataene. Koble først til MySQL som root ved å kjøre, sudo mysql

Og opprett databasen og en bruker med tilgang til den som følger, SKAP DATABASE `sensorer`

BRUK `sensorer`; OPPRETT TABELL `temperatur` (` id` bigint (20) IKKE NULL AUTO_INCREMENT, `klient_id` smallint (6) IKKE NULL,` verdi` smallint (6) IKKE NULL, `opprettet_at` tidsstempel IKKE NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (` id`)) MOTOR = InnoDB; OPPRETT TABELL `fuktighet` (` id` bigint (20) IKKE NULL AUTO_INCREMENT, `klient_id` smallint (6) IKKE NULL,` verdi` smallint (6) IKKE NULL, `opprettet_at` tidsstempel IKKE NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY NØKKEL (` id`)) MOTOR = InnoDB; OPPRETT BRUKER '[brukernavn]'@'localhost' IDENTIFISERT MED '[passord]'; TILDELE ALLE PRIVILEGER PÅ 'sensorer'.* TIL 'sensorer'@'localhost'; EXIT

Sørg for å erstatte [brukernavn] og [passord] med det faktiske brukernavnet og passordet for MySQL -brukeren du liker. Vær også oppmerksom på dem fordi du trenger dem for neste trinn.

Konfigurere skript for logging og webgrensesnitt

Bytt til/var/www/html -katalogen som er dokumentroten til standard virtuell vert for Apache, slett HTML -filen som inneholder standardnettsiden og last ned logg- og webgrensesnittskriptene inne i den.

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

Rediger nå loggskriptet med nano, sudo nano log.php

Du må erstatte [brukernavn] og [passord] med brukernavnet og passordet for MySQL -brukeren du opprettet i forrige trinn. Bytt også ut [klientnøkkelen] med en unik streng og noter den. Dette kommer til å bli brukt som et passord slik at skjermen kan autentisere seg selv til serveren.

Endelig rediger index.php med nano, sudo nano index.php

og erstatt [brukernavn] og [passord] med brukernavn og passord for MySQL -brukeren, slik du gjorde med loggingsskriptet.

Konfigurere HTTPS (valgfritt)

Dette kan være valgfritt, men hvis forbindelsen mellom ESP8266 og serveren er over Internett, anbefales det på det sterkeste å bruke litt kryptering.

Dessverre kan du ikke bare fortsette og bruke noe som Let's Encrypt for å skaffe et sertifikat. Det er fordi HTTP -klientbiblioteket for ESP8266 i det minste på tidspunktet for skriving fortsatt krever at fingeravtrykket til sertifikatet oppgis som et andre argument når du ringer http.begin (). Dette betyr at hvis du bruker noe som Let's Encrypt, må du vaske fastvaren til brikken hver tredje måned for å oppdatere sertifikatets fingeravtrykk etter hver fornyelse.

En vei rundt det ville være å generere et selvsignert sertifikat som utløper etter svært lang tid (f.eks. 10 år) og beholde loggingsskriptet på sin egen virtuelle vert med sitt eget underdomen. På den måten kan du ha webgrensesnittet for å få tilgang til dataene på et eget underdomen, som bruker et skikkelig sertifikat fra en pålitelig myndighet. Bruken av et selvsignert sertifikat i dette tilfellet er ikke et sikkerhetsproblem, ettersom fingeravtrykket til sertifikatet som entydig identifiserer det vil bli hardkodet i fastvaren og sertifikatet bare skal brukes av ESP8266.

Før vi begynner, vil jeg anta at du allerede eier et domenenavn og at du kan lage underdomener på det. Så, for å generere et sertifikat som utløper etter 10 år, kjør følgende kommando og svar på spørsmålene.

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

Siden dette er et selvsignert sertifikat, betyr det at du svarer i de fleste spørsmål ikke så mye, bortsett fra spørsmålet som ber om det vanlige navnet. Det er her du må oppgi hele underdomenet som skal brukes for denne virtuelle verten. Underdomenet du gir her må være det samme med servernavnet som du vil angi senere i din virtuelle vertskonfigurasjon.

Lag deretter en ny virtuell vertskonfigurasjon, sudo nano /etc/apache2/sites-available/sensors-ssl.conf

med følgende innhold, ServerName [subdomain] DocumentRoot/var/www/sensors SSLEngine ON SSLCertificateKeyFile /etc/ssl/private/sensors.key SSLCertificateFile /etc/ssl/certs/sensors.crt Options +FollowSymlinks -Indexes AllowOverride All ErrorLog $ {APACHE_LOG error-ssl.log CustomLog $ {APACHE_LOG_DIR} /sensors-access-ssl.log kombinert

Igjen, sørg for å erstatte [underdomenet] med det samme underdomenet som du brukte med sertifikatet. På dette tidspunktet må du deaktivere standard virtuell vert for Apache, sudo a2dissite 000-standard

endre navnet på dokumentrotkatalogen, sudo mv/var/www/html/var/www/sensorer

og til slutt aktivere den nye virtuelle verten og start Apache på nytt, sudo a2ensite sensorer-ssl

sudo systemctl start apache2 på nytt

Det siste som må gjøres er å skaffe fingeravtrykket til sertifikatet, fordi du må bruke det i fastvarekoden.

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

Http.begin () forventer at skilletegnene mellom byte i fingeravtrykket er mellomrom, så du må erstatte kolonene med mellomrom før du bruker det i koden din.

Hvis du ikke vil bruke et selvsignert sertifikat for å konfigurere et nytt underdomene for webgrensesnittet og opprette en ny virtuell vertskonfigurasjon, sudo nano /etc/apache2/sites-available/sensors-web-ssl.conf

med følgende innhold, Servernavn [underdomene] DocumentRoot/var/www/sensorer #SSLEngine ON #SSLCertificateFile /etc/letsencrypt/live/[subdomain]/cert.pem #SSLCertificateKeyFile /etc/letsencrypt/live//subdomain]/privkey.pem #SSLCific/ /letsencrypt/live/[subdomain]/chain.pem Alternativer +FollowSymlinks -Indexes AllowOverride All ErrorLog $ {APACHE_LOG_DIR} /sensors-web-error-ssl.log CustomLog $ {APACHE_LOG_DIR} /sensors-web-access-ssl.log

Sørg for å erstatte [underdomenet] med underdomenet du har konfigurert for webgrensesnittet. Aktiver deretter den nye virtuelle verten, start Apache på nytt, installer certbot og få et sertifikat for det nye underdomenet fra Let's Encrypt, sudo a2ensite sensorer-web-ssl

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

Etter at du har fått sertifikatet, redigerer du den virtuelle vertskonfigurasjonen igjen for å ikke kommentere SSLEngine, SSLCertificateFile, SSLCertificateKeyFile og SSLCertificateChainFile -linjene, og start Apache på nytt.

Og nå kan du bruke det første underdomenet som bruker det selvsignerte sertifikatet til å sende dataene fra ESP8266 til serveren, mens du bruker det andre for å få tilgang til webgrensesnittet fra nettleseren din. Certbot vil også sørge for å fornye ditt Let's Encrypt -sertifikat automatisk hver tredje måned, ved hjelp av en systemtidsur som bør være aktivert som standard.

Trinn 6: Programmering av ESP8266

Programmering av ESP8266
Programmering av ESP8266

Til slutt er det bare å laste fastvaren på mikrokontrolleren. For å gjøre det, last ned kildekoden for fastvaren herfra og åpne den ved hjelp av Arduino IDE. Du må erstatte [SSID] og [Password] med den faktiske SSID og passordet til WiFi -nettverket ditt. Du må også erstatte [Client ID] og [Client Key] på sprintf -funksjonsanropet med de du brukte på PHP -skriptet på serveren. Til slutt må du erstatte [Host] med domenenavnet eller serverens IP -adresse. Hvis du bruker HTTPS, må du også oppgi fingeravtrykket til sertifikatet ditt som et annet argument på funksjonsanropet til http.begin (). Jeg har forklart hvordan du får tak i fingeravtrykket til sertifikatet i delen "Konfigurere HTTPS" i forrige trinn.

Hvis du ikke allerede har gjort det, må du installere ESP8266 Community -kjernepakken ved hjelp av styrelederen for Arduino IDE. Når dette er gjort, velger du NodeMCU 1.0 (ESP-12E-modulen) fra tavlenes meny. Deretter må du installere SimpleDHT -biblioteket ved hjelp av Library Manager. Til slutt trykker du på Bekreft -knappen øverst til venstre i IDE -vinduet for å sikre at koden kompileres uten feil.

Og nå er det endelig på tide å brenne fastvaren til mikrokontrolleren. For å gjøre dette, flytt jumperen JP1 til høyre, så GPIO0 på ESP8266 vil bli koblet til bakken som vil aktivere programmeringsmodus. Deretter kobler du USB til seriell omformer ved hjelp av jumper -ledninger til programmeringsoverskriften som er merket som P1. Pinnen 1 på programmeringsoverskriften er malt, pinne 2 er mottakspinnen til ESP8266 og pinne 3 overføringen. Du trenger mottak av ESP8266 for å gå til overføringen av USB til seriell omformer, overføring til mottak og selvfølgelig bakken til bakken.

Til slutt, strøm enheten med 5V ved hjelp av USB til DC -jackkabelen og koble USB til seriell omformer til datamaskinen. Du bør nå kunne se den virtuelle serieporten der ESP8266 er tilkoblet, så snart du åpner verktøymenyen på IDE -en din. Bare klikk på Last opp -knappen, og det er det! Hvis alt gikk som forventet, burde du kunne se temperatur- og fuktighetsavlesningene på enhetens LCD -skjerm. Etter at ESP8266 kobles til nettverket og begynner å kommunisere med serveren, bør gjeldende dato og klokkeslett også vises på skjermen.

Etter noen timer når serveren har samlet inn en god mengde data, bør du kunne se temperatur- og fuktighetsdiagrammer ved å besøke http (s): // [host] /index.php?client_id= [klient -ID]. Hvor [vert] enten er IP -adressen til serveren din eller underdomenet du bruker for webgrensesnittet, og [klient -ID] klient -ID -en til enheten, og hvis du overlot den til standardverdien, bør den være 1.

Anbefalt: