Indholdsfortegnelse:
- Trin 1: Værktøjer og dele
- Trin 2: Fremstilling af printkortet
- Trin 3: Lav kabinettet
- Trin 4: Montering af skærmen
- Trin 5: Opsætning af serveren
- Trin 6: Programmering af ESP8266
Video: Temperatur- og fugtighedsmonitor: 6 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
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
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
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
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.
Placer derefter printet oven på det, med sensoren allerede fastgjort på stiftoverskriften.
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.
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é.
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.
Trin 5: 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
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:
Temperatur, fugtighedsmonitor - Arduino Mega + Ethernet W5100: 5 trin
Temperatur, luftfugtighedsmonitor - Arduino Mega + Ethernet W5100: Modul 1 - FLAT - hardware: Arduino Mega 2560 Wiznet W5100 Ethernet -skærm 8x DS18B20 temperatursensor på OneWire -bus - opdelt i 4 OneWire -busser (2,4,1,1) 2x digital temperatur og fugtføler DHT22 (AM2302) 1x temperatur og luftfugtighed
Let meget lav effekt BLE i Arduino del 2 - Temperatur/fugtighedsmonitor - Rev 3: 7 trin
Easy Very Low Power BLE in Arduino Part 2 - Temperatur/Fugtighedsmonitor - Rev 3: Opdatering: 23. november 2020 - Første udskiftning af 2 x AAA -batterier siden 15. januar 2019 dvs. 22 måneder til 2xAAA AlkalineUpdate: 7. april 2019 - Rev 3 af lp_BLE_TempHumidity, tilføjer plotter af dato/tid ved hjælp af pfodApp V3.0.362+og automatisk gasregulering, når
BBQ temperatur- og kødsensor på ESP8266 med display: 5 trin (med billeder)
BBQ temperatur- og kødsensor på ESP8266 med display: I denne instruktionsbog viser jeg dig, hvordan du laver din egen version af et grillværktøj, der måler den aktuelle temperatur i din grill og tænder en blæser for at tænde den, hvis det er nødvendigt. Ud over dette er der også en kødkerntemperaturføler, der
IoT temperatur- og fugtighedsmåler med OLED -skærm: 5 trin (med billeder)
IoT temperatur- og luftfugtighedsmåler med OLED -skærm: Kontroller temperatur og luftfugtighed på en OLED -skærm, når som helst du ønsker det, og saml samtidig disse data i en IoT -platform. Sidste uge udgav jeg et projekt kaldet Simplest IoT temperatur- og luftfugtighedsmåler. Det er et godt projekt, fordi du kan
Ugedag, kalender, tid, fugtighed/temperatur med batterisparer: 10 trin (med billeder)
Ugedag, kalender, tid, fugtighed/temperatur med batterisparer: Strømbesparelsestilstanden her er, hvad der adskiller denne instruktør fra andre eksempler, der viser ugedag, måned, dag i måneden, tid, fugtighed og temperatur. Det er denne kapacitet, der gør det muligt at køre dette projekt fra et batteri, uden at