Inhoudsopgave:

Temperatuur- en vochtigheidsmeter - Ajarnpa
Temperatuur- en vochtigheidsmeter - Ajarnpa

Video: Temperatuur- en vochtigheidsmeter - Ajarnpa

Video: Temperatuur- en vochtigheidsmeter - Ajarnpa
Video: MCO HOME CO2, Temperatuur en Vochtigheidsmeter en VESTA Alarmintegratie | By Demes 2024, Juli-
Anonim
Temperatuur- en vochtigheidsmeter
Temperatuur- en vochtigheidsmeter
Temperatuur- en vochtigheidsmeter
Temperatuur- en vochtigheidsmeter

In deze instructable laat ik je zien hoe je je eigen temperatuur- en vochtigheidsmeter voor je woonkamer kunt maken. Het apparaat beschikt ook over WiFi-mogelijkheden om de gegevens op een externe server (bijvoorbeeld een Raspberry Pi) te loggen en later via een eenvoudige webinterface te openen.

De belangrijkste onderdelen van het apparaat zijn een ESP8266-microcontroller, een DHT11-temperatuur- en vochtigheidssensor en een 16x4-karakter LCD. Het project is volledig open source, dus voel je vrij om het schema, de kaartlay-out en ontwerpbestanden voor de behuizing te downloaden en eventuele wijzigingen aan te brengen.

Stap 1: Gereedschap en onderdelen

Gereedschappen en onderdelen
Gereedschappen en onderdelen
Gereedschappen en onderdelen
Gereedschappen en onderdelen
Gereedschappen en onderdelen
Gereedschappen en onderdelen
Gereedschappen en onderdelen
Gereedschappen en onderdelen

Om de monitor te bouwen heb je de volgende onderdelen nodig:

1 x ESP-12F [2€] - Voor zover ik weet zijn ESP-12E en ESP-12F in principe identiek, met dit verschil dat ESP-12F een betere antenne heeft.

1 x DHT11 temperatuur- en vochtigheidssensor [0,80€] - De DHT22 gaat ook werken, maar er moeten enkele wijzigingen worden aangebracht aan het 3D-model van de behuizing, de DHT22 is ook iets duurder.

1 x 16x4 Character LCD 5V [3.30€] - Ja, je hebt een 5V nodig omdat de PCB zo is ontworpen dat de LCD rechtstreeks wordt gevoed door 5V in plaats van de spanningsregelaar. Dit werd gedaan om de belasting van de spanningsregelaar te verminderen, maar ook omdat 5V-schermen vaak goedkoper zijn. Maar maak je geen zorgen, ook al werkt de ESP8266 op 3,3V, hij zal nog steeds prima werken.

1 x LD1117V33 SMD Spanningsregelaar, ook bekend als LD33 (SOT223-pakket) [0.80€]

1 x 100nF keramische SMD-condensator (verpakking van 0603)

1 x 10uF Tantaal SMD-condensator (3528-verpakking)

1 x 10K SMD-weerstand (0805-pakket)

1 x 10K Trimmer Pot (doorgaand gat)

1 x 47Ω SMD-weerstand (0805-pakket) - Dit is alleen voor het beperken van de stroom die naar de achtergrondverlichting van het LCD-scherm gaat. Experimenteer gerust met verschillende weerstandswaarden en kies de intensiteit die u verkiest.

1 x SMD Momentary Switch [0,80€] - De specifieke die ik heb gebruikt is deze, maar je kunt elke gewenste momentschakelaar gebruiken met dezelfde footprint. Ik kon dezelfde schakelaars ook voor minder op eBay vinden door er meer dan één te kopen.

1 x 5,5 x 2,1 mm DC-aansluiting (paneelmontage) [0,50 €] - Degene die ik heb gebruikt, heeft een uitgesneden diameter van 8 mm en een lengte van 9 mm. Het kan gemakkelijk worden gevonden op eBay door te zoeken naar "Panel Mount DC Jack" (zie bijgevoegde afbeelding).

1 x 2,54 mm (100mil) 40-pins mannelijke pin-header (doorgaand gat)

1 x 2,54 mm (100mil) 40-pins machinaal bewerkte vrouwelijke pin-header (doorgaand gat)

1 x 2,54 mm (100mil) jumper - Het is hetzelfde als degene die op computermoederborden worden gebruikt.

4 x M3 8 mm bouten

4 x M3 4x4mm inzetstukken met schroefdraad - Ze kunnen gemakkelijk worden gevonden door te zoeken naar "M3 Press-In Brass Copper Inserts" op eBay (zie bijgevoegde afbeelding).

4 x M2 12 mm bouten

4 x M2 Moeren

1 x USB Type A naar 5,5 x 2,1 mm DC-stekkerkabel [1,5 €] - Hiermee kunt u uw apparaat van stroom voorzien via een standaard telefoonoplader of vrijwel elke computer met een USB-poort. Het apparaat trekt slechts 300mA in het slechtste geval en gemiddeld 250mA, dus zelfs een USB 2.0-poort is voldoende.

1 x PCB - De plaatdikte is niet kritisch, dus ga gewoon voor 1,6 mm, wat meestal de goedkoopste optie is bij de meeste PCB-fabrikanten.

3 x stukjes gevlochten draad (elk ongeveer 60 mm)

3 x stukken krimpkous (elk ongeveer 10 mm)

En de volgende hulpmiddelen:

Soldeerbout

USB to Serial Converter - Deze heb je nodig om de ESP8266 op het bord te programmeren.

Kruiskopschroevendraaier en/of inbussleutel - Afhankelijk van het type schroeven dat u gaat gebruiken.

3D-printer - Als u geen toegang heeft tot een 3D-printer, kunt u altijd een generieke plastic projectdoos gebruiken en de uitsparingen zelf maken met een Dremel. De minimale binnenafmetingen voor een dergelijke doos moeten 24 mm hoog, 94 mm lang en 66 mm breed zijn. U moet ook 8 mm M2-afstandhouders gebruiken om het LCD-scherm te monteren.

Dremel - Alleen nodig als je niet voor de 3D-geprinte behuizing kiest.

Stap 2: De printplaat maken

De printplaat maken
De printplaat maken
De printplaat maken
De printplaat maken
De printplaat maken
De printplaat maken

De eerste stap is het maken van de printplaat. U kunt dit doen door het zelf te etsen of door naar de website van uw favoriete PCB-fabrikant te gaan en een bestelling te plaatsen. Als u niet van plan bent wijzigingen aan te brengen in de indeling van het bord, kunt u eenvoudig het ZIP-bestand met de bij deze stap bijgevoegde gerber-bestanden pakken en rechtstreeks naar de fabrikant sturen. Als u echter wijzigingen wilt aanbrengen, vindt u hier de KiCAD-schema's en bordlay-outbestanden.

Nadat je de boards in handen hebt gekregen, is het tijd om de componenten te solderen. Dit zou vrij eenvoudig moeten zijn, maar er zijn een paar dingen die moeten worden opgemerkt. Ga eerst nog niet verder met het solderen van de print op de LCD-header, dit zal tijdens de eindmontage moeten gebeuren vanwege de manier waarop de behuizing is ontworpen. Als u echter uw eigen behuizing maakt, kunt u dat advies negeren.

De U3-connector is waar de DHT11-sensor wordt aangesloten. In het ideale geval zou u daarvoor een machinaal bewerkte vrouwelijke pin-header van 90° moeten gebruiken. Maar als je net als ik er geen kunt vinden, pak dan gewoon een rechte en buig hem zelf. Als je dat later doet, zullen de draden van de DHT11 ook wat kort zijn, dus je zult wat extensies moeten solderen. De afstand tussen de pin-header en de sensor, eenmaal aangesloten, moet ongeveer 5 mm zijn.

De reden waarom u een machinaal bewerkte pin-header wilt gebruiken, is omdat de gaten kleiner zijn in vergelijking met de reguliere vrouwelijke pin-headers. Dus de draden van de sensor kunnen daar stevig zitten en een solide verbinding creëren. Maar je kunt ook proberen de DHT11 op een stuk mannelijke pin-header te solderen en het op die manier aan te sluiten op een gewone, schuine vrouwelijke pin-header, die net zo goed zou moeten werken.

Stap 3: De behuizing maken

De behuizing maken
De behuizing maken
De behuizing maken
De behuizing maken
De behuizing maken
De behuizing maken
De behuizing maken
De behuizing maken

Nu de print is gesoldeerd, is het tijd om de behuizing te maken. Er zijn twee verschillende delen die moeten worden afgedrukt, het hoofdgedeelte van de behuizing en het deksel. Het deksel heeft ook bevestigingsgaten om het aan je muur te bevestigen.

Beide delen kunnen bedrukt worden met een standaard 0.4mm nozzle op 0.2mm laaghoogte, in mijn geval was de printtijd ongeveer 4 uur voor beide delen samen. Het deksel heeft geen ondersteuning nodig voor het hoofdgedeelte van de behuizing, voornamelijk voor het gedeelte onder de schroefbussen. Na het printen heel voorzichtig zijn geweest met het verwijderen van de steunen, ik slaagde erin om een van de afstandhouders voor het LCD-scherm te breken terwijl ik dat deed en moest het weer vastlijmen met secondelijm.

De behuizing is ontworpen op FreeCAD, dus als u wijzigingen wilt aanbrengen, moet dit vrij eenvoudig zijn. De STL-bestanden voor het afdrukken van de behuizing en de FreeCAD-ontwerpbestanden zijn te vinden op Thingiverse.

Stap 4: De monitor monteren

Met de behuizing gedrukt, tijd om alles in elkaar te zetten. Plaats eerst het LCD-scherm in de behuizing en schuif het naar links, zodat er een opening is tussen het LCD-scherm en het gat voor de sensor.

Afbeelding
Afbeelding

Plaats vervolgens de print erop, met de sensor al op de pin-header bevestigd.

Afbeelding
Afbeelding

Duw daarna de sensor in het gat, schuif het LCD-scherm terug op zijn plaats en plaats de PCB op de pin-header. Bevestig nu het LCD-scherm op zijn plaats met behulp van M2-bouten en -bouten en soldeer de PCB op de pin-header.

Afbeelding
Afbeelding

Plaats vervolgens de stroomaansluiting, bevestig er enkele draden aan en soldeer hun andere uiteinden aan de printplaat. Het gebruik van wat krimpkous hier zou ook een goed idee zijn.

Afbeelding
Afbeelding

De laatste stap is het installeren van de metalen inzetstukken met schroefdraad, zodat het deksel op zijn plaats kan worden geschroefd met M3-bouten. Daarvoor moet je je soldeerbout gebruiken om ze op te warmen, zodat ze in de gaatjes kunnen worden geduwd. U kunt deze instructable bekijken als u meer informatie nodig heeft over het toevoegen van metalen draden aan uw 3D-afdrukken.

Afbeelding
Afbeelding

Stap 5: De server instellen

De server instellen
De server instellen

Voordat de firmware naar de ESP8266 wordt geüpload, moet er nog één ding worden gedaan, namelijk het opzetten van een server voor het loggen van de gegevens die door het apparaat worden ontvangen. Voor dat doel kun je vrijwel elke Linux-machine gebruiken die je wilt, van een Raspberry Pi op je privénetwerk tot een DigitalOcean-druppel. Ik ging met de laatste, maar het proces is vrijwel hetzelfde, wat je ook kiest.

Apache, MySQL (MariaDB) en PHP installeren

Eerst moeten we LAMP instellen, of met andere woorden Apache, MySQL (MariaDB) en PHP op de server installeren. Daarvoor moet je de pakketbeheerder van je distro gebruiken, omwille van het voorbeeld zal ik apt gebruiken, de pakketbeheerder die wordt gebruikt door vrijwel elke op Debian gebaseerde distro, inclusief Raspbian.

sudo apt update

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

Als u daarna het IP-adres van uw server in de adresbalk van uw browser plaatst, zou u de standaardpagina van Apache moeten kunnen zien.

De database instellen

Nu hebben we een database nodig om de gegevens te loggen. Maak eerst verbinding met MySQL als root door te rennen, sudo mysql

En maak de database en een gebruiker met toegang ertoe als volgt, MAAK DATABASE `sensoren`

GEBRUIK `sensoren`; CREATE TABLE `temperature` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `client_id` smallint(6) NOT NULL, `value` smallint(6) NOT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (` id`)) MOTOR=InnoDB; CREATE TABLE `humidity` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `client_id` smallint(6) NOT NULL, `value` smallint(6) NOT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (` id`)) MOTOR=InnoDB; MAAK GEBRUIKER '[gebruikersnaam]'@'localhost' GEDENTIFICEERD DOOR '[wachtwoord]'; VERLENEN ALLE PRIVILEGES OP 'sensors'.* AAN 'sensors'@'localhost'; UITGANG

Zorg ervoor dat u [gebruikersnaam] en [wachtwoord] vervangt door de daadwerkelijke gebruikersnaam en het wachtwoord voor de MySQL-gebruiker die u leuk vindt. Noteer ze ook, want je hebt ze nodig voor de volgende stap.

De logboekregistratie en webinterfacescripts configureren

Ga naar de map /var/www/html, de documenthoofdmap van de standaard virtuele host van Apache, verwijder het HTML-bestand dat de standaardwebpagina bevat en download de logboekregistratie en webinterface-scripts erin.

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

Bewerk nu het logscript met nano, sudo nano log.php

U moet de [gebruikersnaam] en [wachtwoord] vervangen door de gebruikersnaam en het wachtwoord voor de MySQL-gebruiker die u in de vorige stap hebt gemaakt. Vervang ook de [clientsleutel] door een unieke tekenreeks en noteer deze. Dit wordt gebruikt als een wachtwoord zodat de monitor zichzelf kan authenticeren bij de server.

Bewerk ten slotte de index.php met nano, sudo nano index.php

en vervang de [gebruikersnaam] en [wachtwoord] door de gebruikersnaam en het wachtwoord voor de MySQL-gebruiker zoals je deed met het logscript.

HTTPS instellen (optioneel)

Dit kan optioneel zijn, maar als de verbinding tussen de ESP8266 en de server via internet is, is het ten zeerste aanbevolen om enige codering te gebruiken.

Helaas kun je niet zomaar doorgaan en iets als Let's Encrypt gebruiken voor het verkrijgen van een certificaat. Dat komt omdat op het moment van schrijven de HTTP-clientbibliotheek voor de ESP8266 nog steeds vereist dat de vingerafdruk van het certificaat wordt verstrekt als een tweede argument bij het aanroepen van http.begin(). Dit betekent dat als je iets als Let's Encrypt gebruikt, je de firmware elke 3 maanden opnieuw naar de chip moet flashen om de vingerafdruk van het certificaat na elke verlenging bij te werken.

Een manier om dat te omzeilen zou zijn om een zelfondertekend certificaat te genereren dat na een zeer lange tijd verloopt (bijvoorbeeld 10 jaar) en het logscript op zijn eigen virtuele host met zijn eigen subdomein te houden. Op die manier kunt u de webinterface hebben voor toegang tot de gegevens op een apart subdomein, dat een correct certificaat van een vertrouwde autoriteit gebruikt. Het gebruik van een zelfondertekend certificaat is in dit geval geen beveiligingsprobleem, omdat de vingerafdruk van het certificaat die het uniek identificeert, hardgecodeerd wordt in de firmware en het certificaat alleen door de ESP8266 zal worden gebruikt.

Voordat we beginnen, ga ik ervan uit dat je al een domeinnaam hebt en dat je er subdomeinen op kunt maken. Dus om een certificaat te genereren dat na 10 jaar verloopt, voer je de volgende opdracht uit en beantwoord je de vragen.

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

Aangezien dit een zelfondertekend certificaat is, maakt het antwoord op de meeste vragen niet zoveel uit, behalve de vraag die om de Common Name vraagt. Hier moet u het volledige subdomein opgeven dat voor deze virtuele host zal worden gebruikt. Het subdomein dat u hier opgeeft, moet hetzelfde zijn als de Servernaam die u later in uw virtuele hostconfiguratie instelt.

Maak vervolgens een nieuwe virtuele hostconfiguratie, sudo nano /etc/apache2/sites-available/sensors-ssl.conf

met de volgende inhoud, Servernaam [subdomein] DocumentRoot /var/www/sensors SSLEngine ON SSLCertificateKeyFile /etc/ssl/private/sensors.key SSLCertificateFile /etc/ssl/certs/sensors.crt Opties +FollowSymlinks -Indexes AllowOverride All ErrorLog ${APACHE_LOG_D error-ssl.log CustomLog ${APACHE_LOG_DIR}/sensors-access-ssl.log gecombineerd

Nogmaals, zorg ervoor dat u het [subdomein] vervangt door hetzelfde subdomein dat u met het certificaat hebt gebruikt. Op dit punt moet u de standaard virtuele host van Apache uitschakelen, sudo a2dissite 000-standaard

verander de naam van de hoofdmap van het document, sudo mv /var/www/html /var/www/sensors

en tenslotte de nieuwe virtuele host inschakelen en Apache herstarten, sudo a2ensite sensoren-ssl

sudo systemctl herstart apache2

Het laatste dat u hoeft te doen, is de vingerafdruk van het certificaat verkrijgen, omdat u deze in de firmwarecode moet gebruiken.

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

De http.begin() verwacht dat de scheidingstekens tussen de bytes van de vingerafdruk spaties zijn, dus u moet de dubbele punten vervangen door spaties voordat u deze in uw code gebruikt.

Als u nu geen zelfondertekend certificaat voor de webinterface wilt gebruiken, stelt u een nieuw subdomein in en maakt u een nieuwe virtuele hostconfiguratie, sudo nano /etc/apache2/sites-available/sensors-web-ssl.conf

met de volgende inhoud, ServerName [subdomein] DocumentRoot /var/www/sensors #SSLEngine ON #SSLCertificateFile /etc/letsencrypt/live/[subdomain]/cert.pem #SSLCertificateKeyFile /etc/letsencrypt/live/[subdomain]/privkey.pem #SSLCertificateChainFile /etc /letsencrypt/live/[subdomain]/chain.pem Opties +FollowSymlinks -Indexen AllowOverride All ErrorLog ${APACHE_LOG_DIR}/sensors-web-error-ssl.log CustomLog ${APACHE_LOG_DIR}/sensors-web-access-ssl.log gecombineerd

Zorg ervoor dat u het [subdomein] vervangt door het subdomein dat u hebt ingesteld voor de webinterface. Schakel vervolgens de nieuwe virtuele host in, herstart Apache, installeer certbot en verkrijg een certificaat voor het nieuwe subdomein van Let's Encrypt, sudo a2ensite sensoren-web-ssl

sudo systemctl herstart apache2 sudo apt update sudo apt install certbot sudo certbot certonly --apache -d [subdomein]

Bewerk na het verkrijgen van het certificaat de configuratie van de virtuele host opnieuw om de regels SSLEngine, SSLCertificateFile, SSLCertificateKeyFile en SSLCertificateChainFile te verwijderen en Apache opnieuw te starten.

En nu kunt u het eerste subdomein gebruiken dat het zelfondertekende certificaat gebruikt voor het verzenden van de gegevens van de ESP8266 naar de server, terwijl u het tweede gebruikt voor toegang tot de webinterface vanuit uw browser. Certbot zorgt er ook voor dat uw Let's Encrypt-certificaat elke 3 maanden automatisch wordt vernieuwd, met behulp van een systemd-timer die standaard moet zijn ingeschakeld.

Stap 6: Programmeren van de ESP8266

Programmeren van de ESP8266
Programmeren van de ESP8266

Ten slotte hoeft u alleen nog de firmware op de microcontroller te laden. Download hiervoor de broncode voor de firmware van hier en open deze met de Arduino IDE. U moet [SSID] en [Password] vervangen door de daadwerkelijke SSID en het wachtwoord van uw WiFi-netwerk. Je moet ook [Client ID] en [Client Key] in de sprintf-functieaanroep vervangen door degene die je hebt gebruikt in het PHP-script op de server. Ten slotte moet je de [Host] vervangen door de domeinnaam of het IP-adres van de server. Als u HTTPS gebruikt, moet u ook de vingerafdruk van uw certificaat opgeven als tweede argument bij de functieaanroep van http.begin(). Ik heb uitgelegd hoe u de vingerafdruk van het certificaat kunt verkrijgen in het gedeelte 'HTTPS instellen' in de vorige stap.

Vervolgens, als je dat nog niet hebt gedaan, moet je het ESP8266 Community-kernpakket installeren met behulp van de Board Manager van de Arduino IDE. Zodra dit is gebeurd, selecteert u de NodeMCU 1.0 (ESP-12E-module) in het bordmenu. Vervolgens moet u de SimpleDHT-bibliotheek installeren met behulp van Bibliotheekbeheer. Klik ten slotte op de knop Verifiëren in de linkerbovenhoek van uw IDE-venster om ervoor te zorgen dat de code zonder fouten wordt gecompileerd.

En nu is het eindelijk tijd om de firmware op de microcontroller te branden. Verplaats hiervoor de jumper JP1 naar rechts, zodat GPIO0 van de ESP8266 met aarde wordt verbonden en de programmeermodus wordt geactiveerd. Sluit vervolgens uw USB-naar-serieel-converter met behulp van jumperdraden aan op de programmeerkop met het label P1. De pin 1 van de programmeerkop is massa, pin 2 is de ontvangstpin van de ESP8266 en pin 3 de zend. Je hebt de ontvangst van de ESP8266 nodig om naar de zend van je USB naar serieel converter te gaan, de zend naar de ontvanger en natuurlijk de aarde naar aarde.

Tot slot, voed het apparaat met 5V met behulp van uw USB-naar-DC-jackkabel en sluit de USB-naar-serieel-converter aan op uw computer. U zou nu de virtuele seriële poort moeten kunnen zien waarop de ESP8266 is aangesloten, zodra u het menu Extra op uw IDE opent. Klik nu op de knop Uploaden en dat is alles! Als alles naar verwachting is verlopen, zou u de temperatuur- en vochtigheidsmetingen op het LCD-scherm van het apparaat moeten kunnen zien. Nadat de ESP8266 verbinding heeft gemaakt met uw netwerk en begint te communiceren met de server, moeten de huidige datum en tijd ook op het display verschijnen.

Na een paar uur, wanneer de server een goede hoeveelheid gegevens heeft verzameld, zou u de temperatuur- en vochtigheidsgrafieken moeten kunnen zien door naar http(s)://[host]/index.php?client_id=[client id] te gaan. Waarbij [host] ofwel het IP-adres van uw server is of het subdomein dat u gebruikt voor de webinterface, en [client-id] de client-id van het apparaat dat, als u het op de standaardwaarde laat staan, 1 zou moeten zijn.

Aanbevolen: