Innehållsförteckning:

Temperatur- och luftfuktighetsmätare: 6 steg (med bilder)
Temperatur- och luftfuktighetsmätare: 6 steg (med bilder)

Video: Temperatur- och luftfuktighetsmätare: 6 steg (med bilder)

Video: Temperatur- och luftfuktighetsmätare: 6 steg (med bilder)
Video: Thermometer drawing 2024, Juli
Anonim
Temperatur- och luftfuktighetsmätare
Temperatur- och luftfuktighetsmätare
Temperatur- och luftfuktighetsmätare
Temperatur- och luftfuktighetsmätare

I denna instruerbara ska jag visa dig hur du gör din egen temperatur- och luftfuktighetsmätare för ditt vardagsrum. Enheten har också WiFi -funktioner för att logga data på en fjärrserver (t.ex. en Raspberry Pi) och komma åt den senare via ett enkelt webbgränssnitt.

Enhetens huvudsakliga delar är en ESP8266 mikrokontroller, en DHT11 temperatur- och fuktighetssensor och en 16x4 tecken LCD. Projektet är helt öppen källkod, så ladda ner schemat, layouten och designfilerna för höljet och gör eventuella ändringar.

Steg 1: Verktyg och delar

Verktyg och delar
Verktyg och delar
Verktyg och delar
Verktyg och delar
Verktyg och delar
Verktyg och delar
Verktyg och delar
Verktyg och delar

För att bygga bildskärmen behöver du följande delar:

1 x ESP-12F [2 €]-Så vitt jag vet är ESP-12E och ESP-12F i princip identiska, med skillnaden att ESP-12F har en bättre antenn.

1 x DHT11 temperatur- och luftfuktighetssensor [0,80 €] - DHT22 kommer också att fungera, men vissa ändringar måste göras på 3D -modellen av höljet, DHT22 är också lite dyrare.

1 x 16x4 tecken LCD 5V [3,30 €] - Ja, du kommer att behöva en 5V eftersom kretskortet är utformat så att LCD -skärmen drivs direkt från 5V snarare än spänningsregulatorn. Detta gjordes för att minska belastningen på spänningsregulatorn men också för att 5V -skärmar tenderar att vara billigare. Men oroa dig inte, även om ESP8266 fungerar med 3,3V kommer det fortfarande att fungera bra.

1 x LD1117V33 SMD spänningsregulator, även känd som LD33 (SOT223 -paket) [0.80 €]

1 x 100nF keramisk SMD -kondensator (0603 -paket)

1 x 10uF Tantal SMD -kondensator (3528 -paket)

1 x 10K SMD -motstånd (0805 -paket)

1 x 10K trimmer (genomgående hål)

1 x 47Ω SMD -motstånd (0805 -paket) - Detta är bara för att begränsa strömmen som går till bakgrundsbelysningen på LCD -skärmen. Experimentera gärna med olika motståndsvärden och välj den intensitet du föredrar.

1 x SMD Momentary Switch [0,80 €] - Den speciella jag använde är denna, men du kan använda vilken momentan switch du vill med samma fotavtryck. Jag kunde också hitta samma switchar på eBay för mindre genom att skaffa mer än en.

1 x 5,5x2,1 mm DC -uttag (panelfäste) [0,50 €] - Den jag använde har en 8 mm paneldiameter och en 9 mm längd. Den kan enkelt hittas på eBay genom att söka efter "Panel Mount DC Jack" (se bifogad bild).

1 x 2,54 mm (100mil) 40-stifts hanstifthuvud (genomgående hål)

1 x 2,54 mm (100mil) 40-polig bearbetad hona för stift (genomgående hål)

1 x 2,54 mm (100mil) bygel - Det är samma som de som används på datorns moderkort.

4 x M3 8 mm bultar

4 x M3 4x4mm gängade skär - De kan enkelt hittas genom att söka efter "M3 Press -In Messing Copper Inserts" på eBay (se bifogad bild).

4 x M2 12 mm bultar

4 x M2 -muttrar

1 x USB typ A till 5,5 x 2,1 mm likströmskabel [1,5 €] - Detta gör det möjligt att driva enheten antingen från en vanlig telefonladdare eller i stort sett vilken dator som helst med en USB -port. Enheten drar bara 300mA i värsta fall och 250mA i genomsnitt, så även en USB 2.0 -port kommer att göra.

1 x kretskort - Skivans tjocklek är inte kritisk, så gå bara på 1,6 mm vilket vanligtvis är det billigaste alternativet med de flesta kretskortstillverkare.

3 x bitar av strandad tråd (ca 60 mm vardera)

3 x bitar av värmekrympslang (ca 10 mm vardera)

Och följande verktyg:

Lödkolv

USB till seriell omvandlare - Du behöver detta för att programmera ESP8266 på kortet.

Phillips skruvmejsel och/eller insexnyckel - Beroende på vilken typ av skruvar du använder.

3D -skrivare - Om du inte har tillgång till en 3D -skrivare kan du alltid använda en generisk plastprojektlåda och göra utskärningarna själv med en Dremel. Minsta innermått för en sådan låda måste vara 24 mm höjd, 94 mm längd och 66 mm bredd. Du måste också använda 8 mm M2-avstånd för montering av LCD-skärmen.

Dremel - behövs bara om du inte går för 3D -tryckt hölje.

Steg 2: Gör kretskortet

Att göra kretskortet
Att göra kretskortet
Att göra kretskortet
Att göra kretskortet
Att göra kretskortet
Att göra kretskortet

Det första steget är att göra kretskortet. Du kan göra det genom att antingen etsa det själv eller bara gå till webbplatsen för din favorit PCB -tillverkare och göra en beställning. Om du inte planerar att göra några ändringar i tavlans layout kan du helt enkelt ta tag i ZIP -filen som innehåller gerberfilerna som bifogas i detta steg och skicka den direkt till tillverkaren. Om du vill göra ändringar kan KiCAD -schematiska och layoutfiler hittas här.

Efter att ha fått händerna på brädorna är det dags att lödda komponenterna. Detta borde vara ganska enkelt, men det är några saker som bör noteras. För det första, fortsätt inte med att löda kretskortet på LCD -rubriken ännu, detta måste göras under den slutliga monteringen på grund av hur höljet designades. Om du gör din egen inhägnad kan du dock ignorera det rådet.

U3 -kontakten är där DHT11 -sensorn ska anslutas. Helst bör du använda en 90 ° vinklad, bearbetad hona -stifthuvud för detta ändamål. Men om du som jag inte kan hitta en, ta bara en rak och böj den själv. Om du gör det senare kommer ledningarna för DHT11 också att vara lite korta, så du måste löda några tillägg. Avståndet mellan stifthuvudet och sensorn när den väl är ansluten måste vara ungefär 5 mm.

Anledningen till att du vill använda en bearbetad stifthuvud är att hålen är mindre jämfört med de vanliga tapphuvudena. Så sensorns ledningar kan sitta tätt där och skapa en solid anslutning. Men du kan också prova att löda DHT11 på ett stycke stifthuvud och ansluta det på det sättet till en vanlig vinklad tapphuvud, som ska fungera lika bra.

Steg 3: Gör höljet

Gör höljet
Gör höljet
Gör höljet
Gör höljet
Gör höljet
Gör höljet
Gör höljet
Gör höljet

Nu när kretskortet är lödt är det dags att göra höljet. Det finns två olika delar som måste skrivas ut, kabinettets huvuddel och lock. Locket har också monteringshål för att fästa det på din vägg.

Båda delarna kan skrivas ut med ett standard 0,4 mm munstycke på 0,2 mm lagerhöjd, för mitt fall var utskriftstiden cirka 4 timmar för båda delarna tillsammans. Locket kräver inga stöd, huvuddelen av skåpet gör det dock, främst för delen under skruvuttagen. Efter att ha skrivit ut var mycket försiktig med att ta bort stöden, lyckades jag bryta ett av avstånden för LCD-skärmen medan jag gjorde det och var tvungen att limma tillbaka det med superlim.

Höljet är utformat på FreeCAD, så om du vill göra några ändringar bör det vara ganska enkelt. STL -filerna för utskrift av höljet samt FreeCAD -designfiler finns på Thingiverse.

Steg 4: Montering av bildskärmen

Med höljet tryckt, dags att sätta ihop allt. Placera först LCD -skärmen inuti höljet och skjut det åt vänster, så att det blir ett mellanrum mellan det och hålet för sensorn.

Bild
Bild

Placera sedan kretskortet ovanpå det, med sensorn redan fäst på stifthuvudet.

Bild
Bild

Tryck sedan in sensorn i hålet, skjut tillbaka LCD -skärmen till läge och sätt in kretskortet på stifthuvudet. Fixera nu LCD -skärmen på plats med M2 -muttrar och bultar och löd kretskortet på stifthuvudet.

Bild
Bild

Sätt därefter strömuttaget på plats, fäst några ledningar på det och löd deras andra ändar till kretskortet. Användning av några krympslangar här skulle också vara en bra idé.

Bild
Bild

Sista steget är att installera metallgängade skär så att locket kan skruvas på plats med M3 -bultar. För detta ändamål måste du använda ditt lödkolv för att värma upp dem, så att de kan skjutas in i hålen. Du kan ta en titt på denna instruerbara om du behöver mer information om hur du lägger metalltrådar till dina 3D -utskrifter.

Bild
Bild

Steg 5: Konfigurera servern

Konfigurera servern
Konfigurera servern

Innan du laddar upp firmware till ESP8266 är det ytterligare en sak som måste göras, nämligen att konfigurera en server för att logga data som mottas av enheten. För det ändamålet kan du använda i stort sett vilken Linux -maskin du vill, från en Raspberry Pi på ditt privata nätverk till en DigitalOcean -droppe. Jag gick med senare, men processen är i stort sett densamma oavsett vad du väljer.

Installera Apache, MySQL (MariaDB) och PHP

Först måste vi konfigurera LAMP, eller med andra ord installera Apache, MySQL (MariaDB) och PHP på servern. För det måste du använda pakethanteraren för din distro, för exemplets skull kommer jag att använda apt som är pakethanteraren som används av nästan alla Debian -baserade distro, inklusive Raspbian.

sudo apt uppdatering

sudo apt installera apache2 mysql-server mysql-klient php libapache2-mod-php php-mysql

Efter att det är klart, om du lägger in IP -adressen till din server i adressfältet i din webbläsare bör du kunna se standardsidan för Apache.

Konfigurera databasen

Nu behöver vi en databas för att logga data. Anslut först till MySQL som root genom att köra, sudo mysql

Och skapa databasen och en användare med åtkomst till den enligt följande, SKAPA DATABASE `sensorer`

ANVÄND `sensorer`; SKAPA TABELL `temperatur` (` id` bigint (20) NOT NULL AUTO_INCREMENT, `client_id` smallint (6) NOT NULL,` value` smallint (6) NOT NULL, `created_at 'time stamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (` id`)) MOTOR = InnoDB; SKAPA TABELL `luftfuktighet` (` id` bigint (20) NOT NULL AUTO_INCREMENT, `client_id` smallint (6) NOT NULL,` value` smallint (6) NOT NULL, `created_at 'time stamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (` id`)) MOTOR = InnoDB; SKAPA ANVÄNDARE '[användarnamn]'@'localhost' IDENTIFIERAD MED '[lösenord]'; GE ALLA PRIVILEGER OM 'sensorer'.* TILL 'sensorer'@'localhost'; UTGÅNG

Se till att ersätta [användarnamn] och [lösenord] med det faktiska användarnamnet och lösenordet för den MySQL -användare som du gillar. Notera dem också eftersom du behöver dem för nästa steg.

Konfigurera skript för loggning och webbgränssnitt

Byt till/var/www/html -katalogen som är dokumentroten för standard virtuell värd för Apache, ta bort HTML -filen som innehåller standardwebbsidan och ladda ner loggnings- och webbgränssnittskript inuti 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

Redigera nu loggskriptet med nano, sudo nano log.php

Du måste ersätta [användarnamn] och [lösenord] med användarnamnet och lösenordet för MySQL -användaren som du skapade i föregående steg. Ersätt också [klientnyckeln] med en unik sträng och notera den. Detta kommer att användas som ett lösenord så att monitorn kan autentisera sig till servern.

Redigera slutligen index.php med nano, sudo nano index.php

och ersätt [användarnamn] och [lösenord] med användarnamnet och lösenordet för MySQL -användaren som du gjorde med loggskriptet.

Konfigurera HTTPS (valfritt)

Detta kan vara valfritt, men om anslutningen mellan ESP8266 och servern är över internet rekommenderas det starkt att använda viss kryptering.

Tyvärr kan du inte bara gå vidare och använda något som Let’s Encrypt för att erhålla ett certifikat. Det beror på att åtminstone vid skrivningstillfället kräver HTTP -klientbiblioteket för ESP8266 fortfarande fingeravtryck för certifikatet som ett andra argument när du anropar http.begin (). Det betyder att om du använder något som Let’s Encrypt, måste du ladda om firmware till chipet var tredje månad för att uppdatera certifikatets fingeravtryck efter varje förnyelse.

En väg runt det skulle vara att generera ett självsignerat certifikat som löper ut efter mycket lång tid (t.ex. 10 år) och behålla loggningskriptet på sin egen virtuella värd med sin egen underdomän. På så sätt kan du ha webbgränssnittet för åtkomst till data på en separat underdomän, som använder ett korrekt certifikat från en betrodd myndighet. Användningen av ett självsignerat certifikat i det här fallet är inte ett säkerhetsproblem, eftersom fingeravtrycket på certifikatet som unikt identifierar det kommer att vara hårdkodat i firmware och certifikatet kommer endast att användas av ESP8266.

Innan vi börjar antar jag att du redan äger ett domännamn och att du kan skapa underdomäner på det. Så, för att generera ett certifikat som löper ut efter 10 år kör följande kommando och svara på frågorna.

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

Eftersom detta är ett självsignerat certifikat spelar det som du svarar i de flesta frågor inte så mycket roll, förutom frågan som ställer det gemensamma namnet. Det är här du måste ange hela underdomänen som ska användas för den här virtuella värden. Underdomänen som du anger här måste vara densamma med servernamnet som du kommer att ställa in senare i din virtuella värdkonfiguration.

Skapa sedan en ny virtuell värdkonfiguration, sudo nano /etc/apache2/sites-available/sensors-ssl.conf

med följande innehåll, 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 kombinerat

Återigen, var noga med att ersätta [underdomänen] med samma underdomän som du använde med certifikatet. Vid denna tidpunkt måste du inaktivera standard virtuell värd för Apache, sudo a2dissite 000-standard

ändra namnet på dokumentrotskatalogen, sudo mv/var/www/html/var/www/sensorer

och slutligen aktivera den nya virtuella värden och starta om Apache, sudo a2ensite sensorer-ssl

sudo systemctl starta om apache2

Det sista som måste göras är att få certifikatets fingeravtryck, eftersom du måste använda det i firmware -koden.

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

Http.begin () förväntar sig att avgränsarna mellan fingeravtryckets byte ska vara mellanslag, så du måste ersätta kolon med mellanslag innan du använder den i din kod.

Om du nu inte vill använda ett självsignerat certifikat för webbgränssnittets konfigurering av en ny underdomän och skapa en ny virtuell värdkonfiguration, sudo nano /etc/apache2/sites-available/sensors-web-ssl.conf

med följande innehåll, Servernamn [underdomän] DocumentRoot/var/www/sensorer #SSLEngine ON #SSLCertificateFile /etc/letsencrypt/live/[subdomain]/cert.pem #SSLCertificateKeyFile /etc/letsencrypt/live//subdomain]/privkey.pem #Chain /letsencrypt/live/[subdomain]/chain.pem Alternativ +FollowSymlinks -Indexes AllowOverride All ErrorLog $ {APACHE_LOG_DIR} /sensors-web-error-ssl.log CustomLog $ {APACHE_LOG_DIR} /sensors-web-access-ssl.log kombinerat

Var noga med att ersätta [underdomänen] med den underdomän som du har konfigurerat för webbgränssnittet. Aktivera sedan den nya virtuella värden, starta om Apache, installera certbot och få ett certifikat för den nya underdomänen från Let's Encrypt, sudo a2ensite sensorer-web-ssl

sudo systemctl starta om apache2 sudo apt uppdatera sudo apt installera certbot sudo certbot certonly --apache -d [underdomän]

Efter att ha fått certifikatet redigerar du den virtuella värdkonfigurationen igen för att avmarkera SSLEngine, SSLCertificateFile, SSLCertificateKeyFile och SSLCertificateChainFile -linjerna och starta om Apache.

Och nu kan du använda den första underdomänen som använder det självsignerade certifikatet för att skicka data från ESP8266 till servern, medan du använder den andra för att komma åt webbgränssnittet från din webbläsare. Certbot kommer också att ta hand om att automatiskt förnya ditt Let's Encrypt -certifikat var tredje månad med en systemd -timer som bör vara aktiverad som standard.

Steg 6: Programmering av ESP8266

Programmering av ESP8266
Programmering av ESP8266

Slutligen är det enda som återstår att ladda firmware på mikrokontrollern. För att göra det, ladda ner källkoden för firmware här och öppna den med Arduino IDE. Du måste ersätta [SSID] och [Password] med det faktiska SSID och lösenordet för ditt WiFi -nätverk. Du måste också ersätta [Client ID] och [Client Key] på sprintf -funktionsanropet med dem som du använde på PHP -skriptet på servern. Slutligen måste du ersätta [Host] med domännamnet eller serverns IP -adress. Om du använder HTTPS måste du också ange fingeravtrycket på ditt certifikat som ett andra argument för funktionsanropet för http.begin (). Jag har förklarat hur du får certifikatets fingeravtryck i avsnittet "Konfigurera HTTPS" i föregående steg.

Om du sedan inte redan har gjort det kommer du att behöva installera ESP8266 Community -paketet med styrelsen för Arduino IDE. När detta är gjort väljer du NodeMCU 1.0 (ESP-12E-modulen) från kortmenyn. Därefter måste du installera SimpleDHT -biblioteket med hjälp av Library Manager. Slutligen, tryck på Verifiera -knappen i det övre vänstra hörnet av ditt IDE -fönster för att se till att koden kompileras utan fel.

Och nu är det äntligen dags att bränna fast programvara till mikrokontrollern. För att göra det, flytta bygeln JP1 till höger, så GPIO0 på ESP8266 kommer att anslutas till marken vilket möjliggör programmeringsläget. Anslut sedan din USB till serieomvandlaren med hjälp av bygelkablar till programmeringsrubriken som är märkt som P1. Stiften 1 på programmeringsrubriken är slipad, stift 2 är mottagningstappen på ESP8266 och stift 3 sändaren. Du behöver mottagningen av ESP8266 för att gå till sändningen av din USB till serieomvandlare, sändningen till mottagningen och naturligtvis marken till jorden.

Slutligen, strömförsörj enheten med 5V med din USB till DC -uttagskabel och anslut USB till serieomvandlaren till din dator. Du bör nu kunna se den virtuella serieporten där ESP8266 är ansluten, så snart du öppnar verktygsmenyn på din IDE. Nu trycker du bara på uppladdningsknappen och det är det! Om allt gick som förväntat borde du kunna se temperatur- och fuktighetsavläsningarna på enhetens LCD -skärm. När ESP8266 ansluter till ditt nätverk och börjar kommunicera med servern bör det aktuella datumet och tiden också visas på displayen.

Efter några timmar när servern har samlat in en bra mängd data bör du kunna se temperatur- och luftfuktighetstabellerna genom att besöka http (s): // [host] /index.php?client_id= [client id]. Där [värd] är antingen serverns IP -adress eller underdomänen du använder för webbgränssnittet, och [klient -id] enhetens klient -id som om du lämnade den till standardvärdet bör den vara 1.

Rekommenderad: