Sommario:

Monitor di temperatura e umidità: 6 passaggi (con immagini)
Monitor di temperatura e umidità: 6 passaggi (con immagini)

Video: Monitor di temperatura e umidità: 6 passaggi (con immagini)

Video: Monitor di temperatura e umidità: 6 passaggi (con immagini)
Video: Arduino: display LCD, sensore DHT11, misuriamo temperatura e umidità 2024, Luglio
Anonim
Monitor di temperatura e umidità
Monitor di temperatura e umidità
Monitor di temperatura e umidità
Monitor di temperatura e umidità

In questo tutorial ti mostrerò come creare il tuo monitor di temperatura e umidità per il tuo soggiorno. Il dispositivo dispone anche di funzionalità WiFi, allo scopo di registrare i dati su un server remoto (ad esempio un Raspberry Pi) e accedervi in seguito tramite una semplice interfaccia web.

Le parti principali del dispositivo sono un microcontrollore ESP8266, un sensore di temperatura e umidità DHT11 e un LCD 16x4 caratteri. Il progetto è completamente open source, quindi sentiti libero di scaricare lo schema, il layout della scheda e i file di progettazione per la custodia e apportare le modifiche che desideri.

Passaggio 1: strumenti e parti

Strumenti e parti
Strumenti e parti
Strumenti e parti
Strumenti e parti
Strumenti e parti
Strumenti e parti
Strumenti e parti
Strumenti e parti

Per costruire il monitor avrai bisogno delle seguenti parti:

1 x ESP-12F [2€] - Per quanto ne so, ESP-12E ed ESP-12F sono sostanzialmente identici, con la differenza che ESP-12F ha un'antenna migliore.

1 x DHT11 Sensore di temperatura e umidità [0,80€] - Anche il DHT22 funzionerà, ma sarà necessario apportare alcune modifiche al modello 3D della custodia, DHT22 è anche un po' più costoso.

1 x 16x4 caratteri LCD 5V [3,30€] - Sì, avrai bisogno di uno 5V poiché il PCB è progettato in modo che il display LCD venga alimentato direttamente da 5V anziché dal regolatore di tensione. Questo è stato fatto per ridurre il carico sul regolatore di tensione, ma anche perché i display a 5V tendono ad essere più economici. Ma non preoccuparti, anche se ESP8266 funziona a 3,3 V funzionerà comunque bene.

1 x Regolatore di tensione SMD LD1117V33, noto anche come LD33 (pacchetto SOT223) [0,80€]

1 x condensatore SMD ceramico da 100 nF (confezione 0603)

Condensatore SMD al tantalio 1 x 10uF (confezione 3528)

1 x 10K SMD Resistore (pacchetto 0805)

1 x 10K Trimmer Pot (attraverso il foro)

1 x 47Ω SMD Resistor (pacchetto 0805) - Questo è solo per limitare la corrente che va alla retroilluminazione del display LCD. Sentiti libero di sperimentare diversi valori di resistenza e scegli l'intensità che preferisci.

1 x SMD Momentary Switch [0,80€] - Il particolare che ho usato è questo, ma puoi usare qualsiasi interruttore momentaneo che desideri con lo stesso ingombro. Sono stato anche in grado di trovare gli stessi interruttori su eBay per meno ottenendo più di uno.

1 x Jack DC 5,5x2,1 mm (montaggio a pannello) [0,50 €] - Quello che ho usato ha un diametro di ritaglio del pannello di 8 mm e una lunghezza di 9 mm. Può essere facilmente trovato su eBay cercando "Jack DC per montaggio su pannello" (vedi immagine allegata).

1 x 2,54 mm (100 mil) Connettore maschio a 40 pin (foro passante)

1 x 2,54 mm (100 mil) connettore femmina lavorato a 40 pin (foro passante)

1 x 2,54 mm (100 mil) Jumper - È lo stesso di quelli utilizzati sulle schede madri dei computer.

4 bulloni M3 da 8 mm

4 inserti filettati M3 4x4mm - Possono essere facilmente trovati cercando "Inserti M3 in ottone e rame a pressione" su eBay (vedi immagine allegata).

4 bulloni M2 da 12 mm

4 dadi M2

1 x cavo da USB tipo A a spina CC da 5,5 x 2,1 mm [1,5 €] - Ciò consentirà di alimentare il dispositivo sia da un caricatore per telefono standard che da praticamente qualsiasi computer con una porta USB. Il dispositivo assorbe solo 300 mA nel caso peggiore e 250 mA in media, quindi anche una porta USB 2.0 funzionerà.

1 x PCB - Lo spessore della scheda non è critico, quindi scegli 1,6 mm che di solito è l'opzione più economica con la maggior parte dei produttori di PCB.

3 x pezzi di filo intrecciato (circa 60 mm ciascuno)

3 x pezzi di tubo termoretraibile (circa 10 mm ciascuno)

E i seguenti strumenti:

Saldatore

Convertitore da USB a seriale - Ne avrai bisogno per programmare ESP8266 sulla scheda.

Cacciavite Phillips e/o chiave esagonale - A seconda del tipo di viti che utilizzerai.

Stampante 3D - Se non hai accesso a una stampante 3D, puoi sempre utilizzare una scatola di plastica generica e realizzare i ritagli da solo con un Dremel. Le dimensioni interne minime per tale scatola dovranno essere di 24 mm di altezza, 94 mm di lunghezza e 66 mm di larghezza. Dovrai anche utilizzare distanziali M2 da 8 mm per il montaggio del display LCD.

Dremel - Necessario solo se non scegli la custodia stampata in 3D.

Passaggio 2: realizzare il PCB

Realizzare il PCB
Realizzare il PCB
Realizzare il PCB
Realizzare il PCB
Realizzare il PCB
Realizzare il PCB

Il primo passo è realizzare il PCB. Puoi farlo incidendolo tu stesso o semplicemente andando sul sito web del tuo produttore di PCB preferito ed effettuando un ordine. Se non prevedi di apportare modifiche al layout della scheda, puoi semplicemente prendere il file ZIP contenente i file gerber allegati in questo passaggio e inviarlo direttamente al produttore. Nel caso in cui desideri apportare modifiche, i file schematici e di layout della scheda di KiCAD possono essere trovati qui.

Dopo aver messo le mani sulle schede è il momento di saldare i componenti. Questo dovrebbe essere abbastanza semplice, ma ci sono alcune cose che dovrebbero essere notate. Innanzitutto, non procedere ancora alla saldatura del PCB sull'intestazione LCD, ciò dovrà essere fatto durante l'assemblaggio finale a causa del modo in cui è stato progettato l'involucro. Se stai creando il tuo recinto, sentiti libero di ignorare questo consiglio.

Il connettore U3 è dove verrà collegato il sensore DHT11. Idealmente, dovresti usare un connettore femmina a perno lavorato ad angolo di 90° per questo scopo. Ma se come me non riesci a trovarne uno, prendine uno dritto e piegalo da solo. Se lo fai in seguito, anche i cavi del DHT11 saranno un po' corti, quindi dovrai saldare alcune estensioni. La distanza tra l'intestazione del pin e il sensore una volta collegato deve essere di circa 5 mm.

Il motivo per cui si desidera utilizzare un'intestazione per pin lavorata è perché i fori sono più piccoli rispetto alle normali intestazioni per pin femmina. Quindi, i cavi del sensore possono stare lì saldamente creando una connessione solida. Ma potresti anche provare a saldare il DHT11 su un pezzo di connettore maschio e collegarlo in questo modo a un normale connettore maschio angolato, che dovrebbe funzionare altrettanto bene.

Passaggio 3: creazione dell'allegato

Fare la custodia
Fare la custodia
Fare la custodia
Fare la custodia
Fare la custodia
Fare la custodia
Fare la custodia
Fare la custodia

Ora che il PCB è saldato è il momento di realizzare la custodia. Ci sono due parti diverse che devono essere stampate, il corpo principale della custodia e il coperchio. Il coperchio dispone anche di fori di montaggio per fissarlo alla parete.

Entrambe le parti possono essere stampate con un ugello standard da 0,4 mm ad un'altezza dello strato di 0,2 mm, nel mio caso il tempo di stampa è stato di circa 4 ore per entrambe le parti combinate. Il coperchio non richiede alcun supporto, tuttavia la parte principale della custodia lo fa, principalmente per la parte sotto le prese delle viti. Dopo la stampa, stai molto attento a rimuovere i supporti, sono riuscito a rompere uno dei distanziatori per l'LCD mentre lo facevo e ho dovuto incollarlo di nuovo con la supercolla.

L'enclosure è progettato su FreeCAD, quindi se vuoi apportare modifiche dovrebbe essere praticamente semplice. I file STL per la stampa della custodia e i file di progettazione di FreeCAD sono disponibili su Thingiverse.

Passaggio 4: assemblaggio del monitor

Con la custodia stampata, è tempo di mettere tutto insieme. Innanzitutto, posiziona il display LCD all'interno della custodia e fallo scorrere verso sinistra, in modo che ci sia uno spazio tra esso e il foro per il sensore.

Immagine
Immagine

Quindi, posiziona il PCB sopra di esso, con il sensore già collegato all'intestazione del pin.

Immagine
Immagine

Dopodiché, spingi il sensore nel foro, fai scorrere il display LCD in posizione e inserisci il PCB sull'intestazione del pin. Ora fissa l'LCD in posizione usando dadi e bulloni M2 e salda il PCB sull'intestazione del pin.

Immagine
Immagine

Quindi, metti in posizione il jack di alimentazione, collega alcuni fili e salda le altre estremità al PCB. Anche l'uso di un tubo termoretraibile qui sarebbe una buona idea.

Immagine
Immagine

L'ultimo passaggio consiste nell'installare gli inserti filettati in metallo in modo che il coperchio possa essere avvitato in posizione con bulloni M3. A tal fine dovrai usare il tuo saldatore per riscaldarli, in modo che possano essere spinti nei fori. Puoi dare un'occhiata a questa istruzione se hai bisogno di maggiori informazioni sull'aggiunta di fili metallici alle tue stampe 3D.

Immagine
Immagine

Passaggio 5: configurazione del server

Configurazione del server
Configurazione del server

Prima di caricare il firmware su ESP8266 c'è un'altra cosa che deve essere fatta, che è la configurazione di un server per la registrazione dei dati ricevuti dal dispositivo. A tale scopo puoi utilizzare praticamente qualsiasi macchina Linux che desideri, da un Raspberry Pi sulla tua rete privata a una goccia di DigitalOcean. Sono andato con il successivo, ma il processo è praticamente lo stesso, non importa cosa scegli.

Installazione di Apache, MySQL (MariaDB) e PHP

Per prima cosa dobbiamo configurare LAMP, o in altre parole installare Apache, MySQL (MariaDB) e PHP sul server. Per questo dovrai usare il gestore di pacchetti della tua distribuzione, per il bene dell'esempio userò apt che è il gestore di pacchetti utilizzato praticamente da qualsiasi distribuzione basata su Debian, incluso Raspbian.

sudo apt update

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

Fatto ciò, se inserisci l'indirizzo IP del tuo server nella barra degli indirizzi del tuo browser dovresti essere in grado di vedere la pagina predefinita di Apache.

Configurazione del database

Ora abbiamo bisogno di un database per la registrazione dei dati. Innanzitutto, connettiti a MySQL come root eseguendo, sudo mysql

E crea il database e un utente con accesso ad esso come segue, CREA DATABASE `sensori`

UTILIZZARE `sensori`; 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`)) ENGINE=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`)) ENGINE=InnoDB; CREA UTENTE '[nome utente]'@'localhost' IDENTIFICATO DA '[password]'; CONCEDERE TUTTI I PRIVILEGI SU 'sensori'.* A 'sensori'@'host locale'; USCITA

Assicurati di sostituire [nome utente] e [password] con il nome utente e la password effettivi per l'utente MySQL che ti piace. Inoltre, prendine nota perché ne avrai bisogno per il passaggio successivo.

Configurazione degli script di registrazione e dell'interfaccia web

Passare alla directory /var/www/html che è la radice del documento dell'host virtuale predefinito di Apache, eliminare il file HTML che contiene la pagina Web predefinita e scaricare gli script di registrazione e dell'interfaccia Web al suo interno.

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

Ora modifica lo script di registrazione usando nano, sudo nano log.php

Dovrai sostituire [nome utente] e [password] con il nome utente e la password per l'utente MySQL che hai creato nel passaggio precedente. Inoltre, sostituisci la [chiave client] con una stringa univoca e prendine nota. Questa verrà utilizzata come password in modo che il monitor possa autenticarsi sul server.

Infine, modifica index.php con nano, sudo nano index.php

e sostituisci [nome utente] e [password] con il nome utente e la password per l'utente MySQL come hai fatto con lo script di registrazione.

Configurazione di HTTPS (opzionale)

Questo può essere facoltativo, ma se la connessione tra ESP8266 e il server avviene tramite Internet, si consiglia vivamente di utilizzare una crittografia.

Sfortunatamente, non puoi semplicemente andare avanti e usare qualcosa come Let's Encrypt per ottenere un certificato. Questo perché almeno al momento della scrittura, la libreria client HTTP per ESP8266 richiede ancora che l'impronta digitale del certificato venga fornita come secondo argomento quando si chiama http.begin(). Ciò significa che se usi qualcosa come Let's Encrypt, dovrai aggiornare il firmware sul chip ogni 3 mesi per aggiornare l'impronta digitale del certificato dopo ogni rinnovo.

Un modo per aggirare ciò sarebbe generare un certificato autofirmato che scade dopo molto tempo (ad esempio 10 anni) e mantenere lo script di registrazione sul proprio host virtuale con il proprio sottodominio. In questo modo, puoi avere l'interfaccia web per accedere ai dati su un sottodominio separato, che utilizzerà un certificato appropriato da un'autorità attendibile. L'utilizzo di un certificato autofirmato in questo caso non è un problema di sicurezza, poiché l'impronta digitale del certificato che lo identifica in modo univoco verrà codificata nel firmware e il certificato verrà utilizzato solo da ESP8266.

Prima di iniziare, presumo che tu possieda già un nome di dominio e che tu sia in grado di creare sottodomini su di esso. Quindi, per generare un certificato che scade dopo 10 anni, esegui il seguente comando e rispondi alle domande.

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

Poiché si tratta di un certificato autofirmato, ciò a cui si risponde nella maggior parte delle domande non ha molta importanza, ad eccezione della domanda che richiede il nome comune. Qui è dove dovrai fornire il sottodominio completo che verrà utilizzato per questo host virtuale. Il sottodominio che fornirai qui dovrà essere lo stesso con il ServerName che imposterai in seguito nella configurazione dell'host virtuale.

Quindi crea una nuova configurazione dell'host virtuale, sudo nano /etc/apache2/sites-available/sensors-ssl.conf

con i seguenti contenuti, ServerName [sottodominio] DocumentRoot /var/www/sensors SSLEngine ON SSLCertificateKeyFile /etc/ssl/private/sensors.key SSLCertificateFile /etc/ssl/certs/sensors.crt Opzioni +FollowSymlinks -Indexes AllowOverride All ErrorLog ${APACHE_LOG_DIR}/sensors error-ssl.log CustomLog ${APACHE_LOG_DIR}/sensors-access-ssl.log combinato

Ancora una volta, assicurati di sostituire il [sottodominio] con lo stesso sottodominio che hai usato con il certificato. A questo punto sarà necessario disabilitare l'host virtuale predefinito di Apache, sudo a2dissite 000-default

cambiare il nome della directory root del documento, sudo mv /var/www/html /var/www/sensori

e infine abilita il nuovo host virtuale e riavvia Apache, sudo a2ensite sensori-ssl

sudo systemctl riavvia apache2

L'ultima cosa che devi fare è ottenere l'impronta digitale del certificato, perché dovrai usarla nel codice del firmware.

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

Il http.begin() si aspetta che i delimitatori tra i byte dell'impronta digitale siano spazi, quindi dovrai sostituire i due punti con spazi prima di usarlo nel tuo codice.

Ora, se non desideri utilizzare un certificato autofirmato per l'interfaccia web, imposta un nuovo sottodominio e crea una nuova configurazione dell'host virtuale, sudo nano /etc/apache2/sites-available/sensors-web-ssl.conf

con i seguenti contenuti, ServerName [sottodominio] DocumentRoot /var/www/sensors #SSLEngine ON #SSLCertificateFile /etc/letsencrypt/live/[sottodominio]/cert.pem #SSLCertificateKeyFile /etc/letsencrypt/live/[sottodominio]/privkey.pem #SSLCertificateChainFile /etc /letsencrypt/live/[sottodominio]/chain.pem Opzioni +FollowSymlinks -Indexes AllowOverride All ErrorLog ${APACHE_LOG_DIR}/sensors-web-error-ssl.log CustomLog ${APACHE_LOG_DIR}/sensors-web-access-ssl.log combinato

Assicurati di sostituire il [sottodominio] con il sottodominio che hai impostato per l'interfaccia web. Quindi abilita il nuovo host virtuale, riavvia Apache, installa certbot e ottieni un certificato per il nuovo sottodominio da Let's Encrypt, sudo a2ensite sensori-web-ssl

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

Dopo aver ottenuto il certificato, modificare nuovamente la configurazione dell'host virtuale per rimuovere il commento dalle righe SSLEngine, SSLCertificateFile, SSLCertificateKeyFile e SSLCertificateChainFile e riavviare Apache.

E ora puoi utilizzare il primo sottodominio che utilizza il certificato autofirmato per inviare i dati dall'ESP8266 al server, mentre utilizzi il secondo per accedere all'interfaccia web dal tuo browser. Certbot si occuperà anche di rinnovare automaticamente il tuo certificato Let's Encrypt ogni 3 mesi, utilizzando un timer di sistema che dovrebbe essere abilitato per impostazione predefinita.

Passaggio 6: programmazione dell'ESP8266

Programmazione dell'ESP8266
Programmazione dell'ESP8266

Infine, non resta che caricare il firmware sul microcontrollore. Per fare ciò, scarica il codice sorgente per il firmware da qui e aprilo utilizzando l'IDE di Arduino. Dovrai sostituire [SSID] e [Password] con l'SSID e la password effettivi della tua rete WiFi. Dovrai anche sostituire [Client ID] e [Client Key] nella chiamata alla funzione sprintf con quelli che hai usato nello script PHP sul server. Infine, dovrai sostituire [Host] con il nome di dominio o l'indirizzo IP del server. Se stai usando HTTPS dovrai anche fornire l'impronta digitale del tuo certificato come secondo argomento sulla chiamata di funzione di http.begin(). Ho spiegato come ottenere l'impronta digitale del certificato nella sezione "Impostazione di HTTPS" nel passaggio precedente.

Successivamente, se non lo hai già fatto, dovrai installare il pacchetto core della comunità ESP8266 utilizzando il Board Manager dell'IDE Arduino. Fatto ciò, seleziona il NodeMCU 1.0 (ESP-12E Module) dal menu delle schede. Successivamente, dovrai installare la libreria SimpleDHT utilizzando il Gestore della libreria. Infine, premi il pulsante Verifica nell'angolo in alto a sinistra della finestra IDE per assicurarti che il codice venga compilato senza errori.

E ora è finalmente giunto il momento di masterizzare il firmware sul microcontrollore. Per farlo spostare il jumper JP1 a destra, così GPIO0 dell'ESP8266 sarà collegato a massa che abiliterà la modalità di programmazione. Quindi, collegare il convertitore da USB a seriale utilizzando i cavi dei ponticelli all'intestazione di programmazione etichettata come P1. Il pin 1 dell'intestazione di programmazione è la massa, il pin 2 è il pin di ricezione dell'ESP8266 e il pin 3 la trasmissione. Hai bisogno della ricezione dell'ESP8266 per andare alla trasmissione del tuo convertitore da USB a seriale, la trasmissione alla ricezione e, naturalmente, la messa a terra.

Infine, alimenta il dispositivo con 5 V utilizzando il cavo jack da USB a CC e collega il convertitore da USB a seriale al computer. Ora dovresti essere in grado di vedere la porta seriale virtuale a cui è collegato ESP8266, non appena apri il menu degli strumenti sul tuo IDE. Ora, premi il pulsante Carica e il gioco è fatto! Se tutto è andato come previsto dovresti essere in grado di vedere le letture di temperatura e umidità sul display LCD del dispositivo. Dopo che ESP8266 si connette alla rete e inizia a comunicare con il server, anche la data e l'ora correnti dovrebbero essere visualizzate sul display.

Dopo alcune ore, quando il server avrà raccolto una buona quantità di dati, dovresti essere in grado di vedere i grafici di temperatura e umidità visitando http(s)://[host]/index.php?client_id=[client id]. Dove [host] è l'indirizzo IP del tuo server o il sottodominio che stai utilizzando per l'interfaccia web e [client id] l'id client del dispositivo che se lo hai lasciato al suo valore predefinito dovrebbe essere 1.

Consigliato: