Indholdsfortegnelse:

Temperatur- og fugtighedsmonitor: 6 trin (med billeder)
Temperatur- og fugtighedsmonitor: 6 trin (med billeder)

Video: Temperatur- og fugtighedsmonitor: 6 trin (med billeder)

Video: Temperatur- og fugtighedsmonitor: 6 trin (med billeder)
Video: Ecobee Room Sensors How Do They Work to Maximize Comfort & Minimize Energy-Bill USA 2024, November
Anonim
Temperatur- og fugtighedsmonitor
Temperatur- og fugtighedsmonitor
Temperatur- og fugtighedsmonitor
Temperatur- og fugtighedsmonitor

I denne instruktive vil jeg vise dig, hvordan du laver din egen temperatur- og fugtighedsmonitor til din stue. Enheden har også WiFi -funktioner med det formål at logge dataene på en fjernserver (f.eks. En Raspberry Pi) og få adgang til dem senere via en simpel webgrænseflade.

Enhedens hoveddele er en ESP8266 mikrokontroller, en DHT11 temperatur- og fugtighedsføler og en 16x4 tegn LCD. Projektet er fuldt open source, så du er velkommen til at downloade skematisk, bordlayout og designfiler til kabinettet og foretage eventuelle ændringer, du kan lide.

Trin 1: Værktøjer og dele

Værktøjer og dele
Værktøjer og dele
Værktøjer og dele
Værktøjer og dele
Værktøjer og dele
Værktøjer og dele
Værktøjer og dele
Værktøjer og dele

For at bygge skærmen skal du bruge følgende dele:

1 x ESP-12F [2 €]-Så vidt jeg ved, er ESP-12E og ESP-12F dybest set identiske, med den forskel, at ESP-12F har en bedre antenne.

1 x DHT11 temperatur- og fugtighedsføler [0,80 €] - DHT22 kommer også til at fungere, men der skal foretages nogle ændringer på 3D -modellen af kabinettet, DHT22 er også en smule dyrere.

1 x 16x4 tegn LCD 5V [3,30 €] - Ja, du skal bruge en 5V, da printkortet er designet, så LCD'en vil blive drevet direkte fra 5V frem for spændingsregulatoren. Dette blev gjort for at reducere belastningen på spændingsregulatoren, men også fordi 5V -skærme har tendens til at være billigere. Men bare rolig, selvom ESP8266 fungerer ved 3,3V, vil det stadig fungere fint.

1 x LD1117V33 SMD spændingsregulator, også kendt som LD33 (SOT223 -pakke) [0,80 €]

1 x 100nF keramisk SMD kondensator (0603 pakke)

1 x 10uF Tantal SMD kondensator (3528 pakke)

1 x 10K SMD modstand (0805 pakke)

1 x 10K trimmerpotte (gennemgående hul)

1 x 47Ω SMD -modstand (0805 -pakke) - Dette er kun for at begrænse den strøm, der går til LCD -baggrundsbelysningen. Eksperimenter gerne med forskellige modstandsværdier og vælg den intensitet, du foretrækker.

1 x SMD Momentary Switch [0,80 €] - Den særlige jeg brugte er denne, men du kan bruge enhver øjeblikkelig switch, du ønsker, med det samme fodaftryk. Jeg var også i stand til at finde de samme switches på eBay for mindre ved at få mere end en.

1 x 5,5x2,1 mm DC -stik (panelmontering) [0,50 €] - Den jeg brugte har en 8 mm paneludskæringsdiameter og en 9 mm længde. Det kan let findes på eBay ved at søge efter "Panel Mount DC Jack" (se vedhæftede billede).

1 x 2,54 mm (100mil) 40-benet hanstikhoved (gennemgående hul)

1 x 2,54 mm (100mil) 40-benet bearbejdet kvindelig stifthoved (gennemgående hul)

1 x 2,54 mm (100mil) jumper - Det er det samme som dem, der bruges på computerens bundkort.

4 x M3 8 mm bolte

4 x M3 4x4mm gevindindsatser - De kan let findes ved at søge efter "M3 Press -In Messing Copper Inserts" på eBay (se vedhæftede billede).

4 x M2 12 mm bolte

4 x M2 møtrikker

1 x USB Type A til 5,5x2,1 mm DC -stik [1,5 €] - Dette gør det muligt at drive din enhed enten fra en standard telefonoplader eller stort set enhver computer med en USB -port. Enheden tegner kun 300mA worst case og 250mA i gennemsnit, så selv en USB 2.0 -port vil klare det.

1 x PCB - Pladetykkelsen er ikke kritisk, så gå bare til 1,6 mm, hvilket normalt er den billigste løsning med de fleste PCB -producenter.

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

3 x stykker varmekrympeslange (ca. 10 mm hver)

Og følgende værktøjer:

Loddekolbe

USB til seriel konverter - Du skal bruge dette til programmering af ESP8266 på tavlen.

Phillips skruetrækker og/eller sekskantnøgle - Afhængig af hvilken type skruer du vil bruge.

3D -printer - Hvis du ikke har adgang til en 3D -printer, kan du altid bruge en generisk plastikboks og selv lave udskæringer med en Dremel. De mindste indre dimensioner for en sådan kasse skal være 24 mm højde, 94 mm længde og 66 mm bredde. Du skal også bruge 8 mm M2-stand-offs til montering af LCD-skærmen.

Dremel - Kun påkrævet, hvis du ikke går efter 3D -printet kabinet.

Trin 2: Fremstilling af printkortet

Fremstilling af PCB
Fremstilling af PCB
Fremstilling af PCB
Fremstilling af PCB
Fremstilling af PCB
Fremstilling af PCB

Det første trin er at lave printkortet. Du kan gøre det ved enten at æste det selv eller bare gå til webstedet for din yndlings PCB -producent og afgive en ordre. Hvis du ikke planlægger at foretage ændringer i tavlelayoutet, kan du ganske enkelt få fat i ZIP -filen, der indeholder gerberfilerne vedhæftet på dette trin, og sende den direkte til producenten. Hvis du alligevel vil foretage ændringer, kan KiCAD -skematiske filer og bordlayoutfiler findes her.

Efter at have fået hænderne på brædderne er det tid til at lodde komponenterne. Dette burde være stort set ligetil, men der er et par ting, der skal bemærkes. For det første skal du ikke fortsætte med at lodde PCB'et på LCD -overskriften endnu, dette skal gøres under den sidste samling på grund af den måde kabinettet var designet. Hvis du laver dit eget kabinet, skal du dog ignorere det råd.

U3 -stikket er, hvor DHT11 -sensoren skal tilsluttes. Ideelt set bør du bruge et 90 ° vinklet bearbejdet hunstikskive til dette formål. Men hvis du kan lide mig ikke er i stand til at finde en, skal du bare få en lige og bøje den selv. Hvis du gør det senere, bliver ledningerne til DHT11 også lidt korte, så du bliver nødt til at lodde nogle udvidelser. Afstanden mellem pinhovedet og sensoren, når den først er tilsluttet, skal være cirka 5 mm.

Grunden til, at du vil bruge en bearbejdet stifthoved, er fordi hullerne er mindre i forhold til de almindelige hunstifter. Så sensorens ledninger kan sidde tæt der og skabe en solid forbindelse. Men du kan også prøve at lodde DHT11 på et stykke hanstifter og tilslutte den på den måde til en almindelig vinklet hunstik, der skulle fungere lige så godt.

Trin 3: Lav kabinettet

At lave kabinettet
At lave kabinettet
At lave kabinettet
At lave kabinettet
At lave kabinettet
At lave kabinettet
At lave kabinettet
At lave kabinettet

Nu hvor printkortet er loddet, er det tid til at lave kabinettet. Der er to forskellige dele, der skal udskrives, hoveddelen af kabinettet og låget. Låget har også monteringshuller til fastgørelse på din væg.

Begge dele kan udskrives med en standard 0,4 mm dyse i 0,2 mm laghøjde, for mit tilfælde var udskrivningstiden cirka 4 timer for begge dele tilsammen. Låget kræver ikke nogen understøtninger, men hoveddelen af kabinettet gør det dog, hovedsageligt for delen under skrueforbindelserne. Efter udskrivning skal du være meget forsigtig med at fjerne understøtningerne, det lykkedes mig at bryde en af stand-offs for LCD'en, mens jeg gjorde det, og måtte lime den på igen med superlim.

Kabinettet er designet på FreeCAD, så hvis du vil foretage ændringer, bør det være stort set ligetil. STL -filerne til udskrivning af kabinettet samt FreeCAD -designfiler findes på Thingiverse.

Trin 4: Montering af skærmen

Med kabinettet trykt, tid til at sætte alt sammen. Placer først LCD'en inde i kabinettet og skub den til venstre, så der vil være et mellemrum mellem den og hullet til sensoren.

Billede
Billede

Placer derefter printet oven på det, med sensoren allerede fastgjort på stiftoverskriften.

Billede
Billede

Skub derefter sensoren ind i hullet, skub LCD'et tilbage til position, og indsæt printkortet på stiften. Fix nu LCD'et på plads ved hjælp af M2 -møtrikker og -bolte, og lod PCB'et på stiften.

Billede
Billede

Sæt derefter strømstikket på plads, fastgør nogle ledninger til det og lod deres andre ender til printet. Brugen af nogle varmekrympeslanger her ville også være en god idé.

Billede
Billede

Det sidste trin er at installere gevindskårne metal, så låget kan skrues på plads med M3 bolte. Til det formål skal du bruge dit loddejern til at varme dem op, så de kan skubbes ind i hullerne. Du kan tage et kig på denne instruktive, hvis du har brug for flere oplysninger om tilføjelse af metaltråde til dine 3D -udskrifter.

Billede
Billede

Trin 5: Opsætning af serveren

Opsætning af serveren
Opsætning af serveren

Inden uploaden af firmwaren til ESP8266 er der endnu en ting, der skal gøres, nemlig opsætning af en server til logning af data modtaget af enheden. Til det formål kan du bruge stort set enhver Linux -maskine, du ønsker, fra en Raspberry Pi på dit private netværk til en DigitalOcean -dråbe. Jeg gik med den senere, men processen er stort set den samme, uanset hvad du vælger.

Installation af Apache, MySQL (MariaDB) og PHP

Først skal vi opsætte LAMP, eller med andre ord installere Apache, MySQL (MariaDB) og PHP på serveren. Til det skal du bruge pakkehåndteringen til din distro, af hensyn til eksemplet vil jeg bruge apt, som er pakkehåndteringen, der bruges af stort set enhver Debian -baseret distro, herunder Raspbian.

sudo apt opdatering

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

Efter at det er gjort, skal du være i stand til at se standardsiden i Apache, hvis du lægger serverens IP -adresse til adresselinjen i din browser.

Opsætning af databasen

Nu har vi brug for en database til logning af dataene. Først skal du oprette forbindelse til MySQL som root ved at køre, sudo mysql

Og opret databasen og en bruger med adgang til den som følger, Opret DATABASE `sensorer`

BRUG `sensorer`; Opret tabel `temperatur` (` id` bigint (20) IKKE NULL AUTO_INCREMENT, `klient_id` smallint (6) IKKE NULL,` værdi` smallint (6) IKKE NULL, `oprettet_at` tidsstempel IKKE NULL STANDARD CURRENT_TIMESTAMP, PRIMÆR NØGLE (` id`)) MOTOR = InnoDB; OPRET TABEL `fugtighed` (` id` bigint (20) IKKE NULL AUTO_INCREMENT, `klient_id` smallint (6) IKKE NULL,` værdi` smallint (6) IKKE NULL, `oprettet_ ved` tidsstempel IKKE NULL STANDARD CURRENT_TIMESTAMP, PRIMÆR NØGLE (` id`)) MOTOR = InnoDB; Opret BRUGER '[brugernavn]'@'localhost' IDENTIFICERET MED '[adgangskode]'; GIV ALLE PRIVILEGER TIL 'sensorer'.* TIL 'sensorer'@'localhost'; AFSLUT

Sørg for at erstatte [brugernavn] og [adgangskode] med det faktiske brugernavn og adgangskode til den MySQL -bruger, du kan lide. Noter dem også, fordi du skal bruge dem til det næste trin.

Konfiguration af lognings- og webgrænsefladescripts

Skift til/var/www/html -biblioteket, som er dokumentroden til standard virtuel vært for Apache, slet HTML -filen, der indeholder standardwebsiden, og download lognings- og webgrænsefladescripts inde 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 nu logningsscriptet ved hjælp af nano, sudo nano log.php

Du skal erstatte [brugernavn] og [adgangskode] med brugernavnet og adgangskoden til MySQL -brugeren, som du oprettede i det foregående trin. Udskift også [klientnøglen] med en unik streng og noter den. Dette vil blive brugt som et kodeord, så skærmen kan godkende sig selv til serveren.

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

og erstat [brugernavn] og [adgangskode] med brugernavnet og adgangskoden til MySQL -brugeren, som du gjorde med logningsscriptet.

Opsætning af HTTPS (valgfrit)

Dette kan være valgfrit, men hvis forbindelsen mellem ESP8266 og serveren er over internettet, anbefales det stærkt at bruge en vis kryptering.

Desværre kan du ikke bare gå videre og bruge noget som Let's Encrypt til at få et certifikat. Det skyldes, at HTTP -klientbiblioteket til ESP8266 i det mindste på tidspunktet for skrivningen stadig kræver, at certifikatets fingeraftryk leveres som et andet argument, når du ringer til http.begin (). Det betyder, at hvis du bruger noget som Let's Encrypt, skal du omskifte firmwaren til chippen hver 3. måned for at opdatere certifikatets fingeraftryk efter hver fornyelse.

En vej udenom det ville være at generere et selvsigneret certifikat, der udløber efter meget lang tid (f.eks. 10 år) og beholde logningsscriptet på sin egen virtuelle vært med sit eget underdomæne. På den måde kan du have webgrænsefladen til at få adgang til dataene på et separat underdomæne, der vil bruge et korrekt certifikat fra en betroet myndighed. Brugen af et selvsigneret certifikat i dette tilfælde er ikke et sikkerhedsproblem, da certifikatets fingeraftryk, der entydigt identificerer det, bliver hardkodet i firmwaren, og certifikatet kun vil blive brugt af ESP8266.

Inden vi starter, antager jeg, at du allerede ejer et domænenavn, og at du kan oprette underdomæner på det. Så for at generere et certifikat, der udløber efter 10 år, skal du køre følgende kommando og besvare spørgsmålene.

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

Da dette er et selvsigneret certifikat, er det, du svarer på de fleste spørgsmål, ikke ligegyldigt for meget, bortset fra det spørgsmål, der stiller til det fælles navn. Det er her, du skal angive det fulde underdomæne, der skal bruges til denne virtuelle vært. Det underdomæne, du giver her, skal være det samme med servernavnet, som du vil angive senere i din virtuelle værtskonfiguration.

Opret derefter en ny virtuel værtskonfiguration, sudo nano /etc/apache2/sites-available/sensors-ssl.conf

med følgende indhold, Servernavn [underdomæne] DocumentRoot/var/www/sensorer 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 kombineret

Igen skal du sørge for at erstatte [underdomænet] med det samme underdomæne, som du brugte med certifikatet. På dette tidspunkt bliver du nødt til at deaktivere standard virtuel vært for Apache, sudo a2dissite 000-standard

ændre navnet på dokumentets rodmappe, sudo mv/var/www/html/var/www/sensorer

og endelig aktivere den nye virtuelle vært og genstarte Apache, sudo a2ensite sensorer-ssl

sudo systemctl genstart apache2

Det sidste, der skal gøres, er at opnå certifikatets fingeraftryk, fordi du skal bruge det i firmwarekoden.

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

Http.begin () forventer, at afgrænserne mellem byte i fingeraftrykket er mellemrum, så du skal udskifte kolonerne med mellemrum, før du kan bruge det i din kode.

Hvis du nu ikke vil bruge et selvsigneret certifikat til webgrænsefladeopsætning af et nyt underdomæne og oprette en ny virtuel værtskonfiguration, sudo nano /etc/apache2/sites-available/sensors-web-ssl.conf

med følgende indhold, Servernavn [underdomæne] DocumentRoot/var/www/sensorer #SSLEngine ON #SSLCertificateFile /etc/letsencrypt/live/[subdomain]/cert.pem #SSLCertificateKeyFile /etc/letsencrypt/live//subdomain]/privkey.pem #SSLCific/ /letsencrypt/live/[subdomain Academy/chain.pem Valgmuligheder +FølgSymlinks -Indexer TilladOvergrader alle ErrorLog $ {APACHE_LOG_DIR} /sensors-web-error-ssl.log CustomLog $ {APACHE_LOG_DIR} /sensors-web-access-ssl.log kombineret

Sørg for at erstatte [underdomænet] med det underdomæne, du har konfigureret til webgrænsefladen. Aktiver derefter den nye virtuelle vært, genstart Apache, installer certbot og få et certifikat til det nye underdomæne fra Let's Encrypt, sudo a2ensite sensorer-web-ssl

sudo systemctl genstart apache2 sudo apt opdater sudo apt installer certbot sudo certbot certonly --apache -d [underdomæne]

Efter at have opnået certifikatet, rediger den virtuelle værtskonfiguration igen for at fjerne kommentaren fra SSLEngine, SSLCertificateFile, SSLCertificateKeyFile og SSLCertificateChainFile linjer, og genstart Apache.

Og nu kan du bruge det første underdomæne, der bruger det selvsignerede certifikat til at sende dataene fra ESP8266 til serveren, mens du bruger det andet til at få adgang til webgrænsefladen fra din browser. Certbot sørger også for automatisk at forny dit Let's Encrypt -certifikat hver 3. måned ved hjælp af en systemd -timer, der bør være aktiveret som standard.

Trin 6: Programmering af ESP8266

Programmering af ESP8266
Programmering af ESP8266

Endelig er det eneste, der skal tilbage, at indlæse firmwaren på mikrokontrolleren. For at gøre det skal du downloade kildekoden til firmwaren herfra og åbne den ved hjælp af Arduino IDE. Du bliver nødt til at erstatte [SSID] og [Password] med den faktiske SSID og adgangskode til dit WiFi -netværk. Du skal også erstatte [Client ID] og [Client Key] på sprintf -funktionsopkaldet med dem, du brugte på PHP -scriptet på serveren. Endelig skal du erstatte [Host] med domænenavnet eller serverens IP -adresse. Hvis du bruger HTTPS, skal du også angive dit certifikats fingeraftryk som et andet argument på funktionsopkaldet til http.begin (). Jeg har forklaret, hvordan du får certifikatets fingeraftryk i afsnittet "Opsætning af HTTPS" på det foregående trin.

Hvis du derefter ikke allerede har gjort det, skal du installere ESP8266 Community -kernepakken ved hjælp af Board Manager for Arduino IDE. Når dette er gjort, skal du vælge NodeMCU 1.0 (ESP-12E-modulet) fra kortets menu. Dernæst skal du installere SimpleDHT -biblioteket ved hjælp af Library Manager. Til sidst skal du trykke på knappen Bekræft i øverste venstre hjørne af dit IDE -vindue for at sikre, at koden kompileres uden fejl.

Og nu er det endelig tid til at brænde firmwaren til mikrokontrolleren. For at gøre dette skal du flytte jumperen JP1 til højre, så GPIO0 på ESP8266 vil blive forbundet til jorden, hvilket aktiverer programmeringstilstanden. Slut derefter din USB til seriel konverter ved hjælp af jumperwires til programmeringsoverskriften, der er mærket som P1. Ben 1 på programmeringshovedet er jordet, ben 2 er modtagetappen på ESP8266 og pin 3 transmitteren. Du har brug for modtagelse af ESP8266 for at gå til transmitteren af din USB til seriel konverter, transmitteren til modtagelsen og selvfølgelig jorden til jorden.

Slutteligt tilsluttes enheden med 5V ved hjælp af dit USB til DC -stik og tilslutter USB til seriel konverter til din computer. Du skulle nu kunne se den virtuelle serielle port, hvor ESP8266 er tilsluttet, så snart du åbner værktøjsmenuen på din IDE. Nu skal du bare trykke på Upload -knappen, og det er det! Hvis alt gik som forventet, skulle du kunne se temperatur- og fugtighedsmålingerne på enhedens LCD. Når ESP8266 opretter forbindelse til dit netværk og begynder at kommunikere med serveren, skal den aktuelle dato og klokkeslæt også vises på displayet.

Efter et par timer, når serveren vil have indsamlet en god mængde data, skal du kunne se temperatur- og luftfugtighedsdiagrammerne ved at besøge http (s): // [host] /index.php?client_id= [klient -id]. Hvor [host] enten er serverens IP -adresse eller det underdomæne, du bruger til webgrænsefladen, og [klient -id] enhedens klient -id, som hvis du overlod det til standardværdien, skulle det være 1.

Anbefalede: