Sommario:
- Passaggio 1: strumenti e parti
- Passaggio 2: realizzare il PCB
- Passaggio 3: creazione dell'allegato
- Passaggio 4: assemblaggio del monitor
- Passaggio 5: configurazione del server
- Passaggio 6: programmazione dell'ESP8266
Video: Monitor di temperatura e umidità: 6 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:04
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
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
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
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.
Quindi, posiziona il PCB sopra di esso, con il sensore già collegato all'intestazione del pin.
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.
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.
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.
Passaggio 5: 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
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:
Misuratore di temperatura e umidità IoT con schermo OLED: 5 passaggi (con immagini)
Misuratore di temperatura e umidità IoT con schermo OLED: controlla la temperatura e l'umidità in uno schermo OLED ogni volta che vuoi e allo stesso tempo raccogli quei dati in una piattaforma IoT. La scorsa settimana ho pubblicato un progetto chiamato Misuratore di temperatura e umidità IoT più semplice. Questo è un buon progetto perché puoi c
Automatizzare una serra con LoRa! (Parte 1) -- Sensori (temperatura, umidità, umidità del suolo): 5 passaggi
Automatizzare una serra con LoRa! (Parte 1) || Sensori (temperatura, umidità, umidità del suolo): in questo progetto ti mostrerò come ho automatizzato una serra. Ciò significa che ti mostrerò come ho costruito la serra e come ho collegato l'elettronica di alimentazione e automazione. Inoltre ti mostrerò come programmare una scheda Arduino che utilizza L
Monitoraggio della temperatura e dell'umidità con Raspberry Pi: 6 passaggi (con immagini)
Monitoraggio della temperatura e dell'umidità tramite Raspberry Pi: l'estate sta arrivando e chi non ha un condizionatore d'aria dovrebbe essere pronto a controllare manualmente l'atmosfera all'interno. In questo post descrivo il modo moderno di misurare i parametri più importanti per il comfort umano: temperatura e umidità. T
Monitor meteo M5Stack M5stick C basato su ESP32 con DHT11 - Monitora l'umidità della temperatura e l'indice di calore su M5stick-C con DHT11: 6 passaggi
Monitor meteo M5Stack M5stick C basato su ESP32 con DHT11 | Monitora l'umidità della temperatura e l'indice di calore su M5stick-C con DHT11: Ciao ragazzi, in questo tutorial impareremo come interfacciare il sensore di temperatura DHT11 con m5stick-C (una scheda di sviluppo di m5stack) e visualizzarlo sul display di m5stick-C. Quindi in questo tutorial leggeremo la temperatura, l'umidità & calore io
Monitor di umidità wireless (ESP8266 + sensore di umidità): 5 passaggi
Wireless Moisture Monitor (ESP8266 + Moisture Sensor): compro il prezzemolo in vaso e la maggior parte del giorno il terreno era asciutto. Quindi decido di realizzare questo progetto, sul rilevamento dell'umidità del terreno in vaso con prezzemolo, per verificare, quando ho bisogno di versare il terreno con acqua. Penso che questo sensore (sensore di umidità capacitivo v1.2) sia buono perché