Sommario:

Sensore di temperatura della rete domestica: 7 passaggi
Sensore di temperatura della rete domestica: 7 passaggi

Video: Sensore di temperatura della rete domestica: 7 passaggi

Video: Sensore di temperatura della rete domestica: 7 passaggi
Video: Controllare temperatura in ogni stanza!! 2024, Dicembre
Anonim
Sensore di temperatura della rete domestica
Sensore di temperatura della rete domestica

Cosa devi sapere per realizzare questo progetto:

È necessario conoscere:- Alcune abilità elettroniche (saldatura)

- Linux

- Arduino IDE

(dovrai aggiornare schede aggiuntive nell'IDE:

- aggiornamento/programmazione di una scheda ESP tramite l'IDE Arduino.

(ci sono dei bei tutorial disponibili sul web)

Questo può essere fatto usando un Arduino Uno o usando un FTDI (adattatore da USB a seriale).

Ho usato il mio Uno perché non avevo alcuna porta seriale sul mio PC né avevo un FTDI

Passaggio 1: vai a fare shopping

Andare a fare shopping
Andare a fare shopping

Di cosa avrai bisogno per far sì che ciò accada?

Per il sensore digitale di temperatura e umidità:

- Una breadboard o un'alternativa come PCB prototipo, saldatura, saldatore …

- Qualche filo

- due ponticelli

- un resistore da 10k Ohm

- un ESP12F (anche altri modelli potrebbero funzionare…)

- un DHT22 (un po' più costoso del DHT11 ma più preciso)

- 3 batterie AA ricaricabili e un portabatterie

- una piccola scatola di plastica dove inserire il tuo progetto

- In una fase successiva ho intenzione di aggiungere un HT7333 con due condensatori da 10uF tra il pacco batteria e l'ESP

per stabilizzare la tensione di ingresso (VCC) ai 3,3V consigliati ma anche per proteggere l'ESP da sovratensioni.

Per la parte Rete:

- La tua rete WiFi domestica

Per la parte Server:

- Qualsiasi sistema basato su Linux (sempre attivo!)

Ho usato un Raspberry Pi (che uso anche come server per le mie telecamere IP Outdoor.)

- compilatore gcc per compilare il codice del tuo server

- pacchetto rrdtool per memorizzare i dati e generare grafici

- apache (o un altro server web)

Il tuo PC o laptop preferito con Arduino IDE su di esso.

Passaggio 2: configurazione e sfondo

Configurazione e sfondo
Configurazione e sfondo

In questa versione di un sensore di temperatura e umidità connesso WiFi - per non dire IOT - ho utilizzato un ESP12F, un DHT22 e un portabatterie 3 AA con batterie ricaricabili.

Ogni 20 minuti l'ESP effettua una misurazione dal DHT22 e la invia a un server (un Raspberry Pi) tramite UDP sulla mia rete WiFi domestica. Dopo che le misurazioni sono state inviate, l'ESP entra in modalità sonno profondo. Ciò significa che solo il Real Time Clock del modulo rimane alimentato, con un conseguente risparmio energetico incredibile. Per circa 5 secondi, il modulo richiede circa 100mA, quindi durante i 20 minuti di deepsleep solo 150uA.

Non volevo utilizzare nessun servizio basato su Internet perché ho il mio Raspberry Pi che comunque è sempre acceso e in questo modo ho avuto il piacere di scrivere anche la parte server.

Sul server (un Raspberry Pi con Raspbian) ho scritto un semplice listener UDP (server) che memorizza i valori in un semplice RRD. (Database Round Robin che utilizza RRDtool di Tobias Oetiker.)

Il vantaggio di RRDtool è che crei il tuo database una volta e la dimensione rimane la stessa. Inoltre non è necessario disporre di un server di database (come mySQLd) in esecuzione in background. RRDtool ti fornisce gli strumenti per creare il Database e generare i grafici.

Il mio server crea i grafici periodicamente e visualizza tutto in una semplicissima pagina http. Posso consultare le mie letture con un semplice browser collegandomi al webserver Apache2 sul Raspberry Pi!

Infine, non avevo un FTDI (da USB a seriale) quindi ho usato il mio Arduino UNO. Devi collegare i TX e gli RX e il GND dell'ESP e dell'UNO. (Lo so, il tuo istinto potrebbe dirti di incrociare RX e TX … anche provato, non funziona.)

Non ho fatto una conversione di livello (UNO: High = 5V ma ESP è fondamentalmente un dispositivo da 3,3 V … Ci sono alcuni buoni FTDI sul mercato in cui puoi persino selezionare il tuo livello alto per essere 5 o 3,3 V.

Il mio circuito è alimentato da 3 batterie AA ricaricabili - quindi in effetti 3 X 1.2V. In una fase successiva ho intenzione di inserire un HT7333 tra il pacco batterie e il circuito per sicurezza; le batterie appena caricate potrebbero avere più di 1.2V e l'ESP dovrebbe essere alimentato con min. 3V e max. 3.6V. Anche se decido - in un momento di debolezza - di inserire batterie alcaline (3 X 1,5 V = 4,5 V) il mio ESP non sarà fritto!

Ho anche pensato di utilizzare un pannello solare da 10 cm x 10 cm, ma non ne valeva la pena. Facendo 3 misurazioni all'ora (fondamentalmente 3x 5 secondi @ 100mA max. e il resto del tempo @100uA), spero di alimentare il mio circuito per 1 anno con le stesse batterie ricaricabili.

Passaggio 3: Arduino - Parte ESP12

L'Arduino - Parte ESP12
L'Arduino - Parte ESP12
L'Arduino - Parte ESP12
L'Arduino - Parte ESP12

Ho realizzato questo progetto in diversi passaggi.

Esistono diversi collegamenti che ti aiutano a importare ESP12 (aka. ESP8266) nell'IDE di Arduino. (Ho dovuto usare la versione 2.3.0 invece dell'ultima a causa di un bug che potrebbe essere stato risolto nel frattempo…)

Ho iniziato collegando l'ESP, tramite il mio Arduino UNO (utilizzato solo come bridge tra il mio PC tramite USB e seriale) all'interfaccia seriale ESP. Ci sono Instructables separati che spiegano questo.

Nel mio progetto finito ho lasciato i fili per collegarmi alla seriale nel caso avessi bisogno di risolvere i problemi. RX

Quindi devi cablare il tuo ESP12 come segue:

Perni ESP…

GND UNO GND

RX UNO RX

TX UNO TX

IT VCC

GPIO15 GND

Inizialmente ho provato ad alimentare il mio ESP da 3,3 V sull'UNO, ma sono passato rapidamente ad alimentare il mio ESP con un alimentatore da banco, ma puoi usare anche la batteria.

GPIO0 Ho collegato questo con un ponticello a GND per abilitare il lampeggio (= programmazione) dell'ESP.

Primo test: lasciare il jumper aperto e avviare un monitor seriale nell'IDE di Arduino (a 115200 baud!).

Spegni e riaccendi l'ESP, dovresti vedere alcuni caratteri spazzatura e poi un messaggio come:

Ai-Thinker Technology Co. Ltd. pronto

In questa modalità, l'ESP si comporta un po' come un modem vecchio stile. Devi usare i comandi AT.

Prova i seguenti comandi:

AT+RST

e i seguenti due comandi

AT+CWMODE=3

ok

AT+CWLAP

Questo dovrebbe darti un elenco di tutte le reti WiFi nell'area.

Se funziona, sei pronto per il passaggio successivo.

Passaggio 4: test dell'ESP come client NTP (Network Time Protocol)

Test dell'ESP come client NTP (Network Time Protocol)
Test dell'ESP come client NTP (Network Time Protocol)
Test dell'ESP come client NTP (Network Time Protocol)
Test dell'ESP come client NTP (Network Time Protocol)

Nell'IDE Arduino, in File, Esempi, ESP8266WiFi, caricare NTPClient.

Sono necessarie piccole modifiche per farlo funzionare; devi inserire il tuo SSID e la password della tua rete WiFi.

Ora posiziona il ponticello, cortocircuitando GPIO0 su GND.

Spegni e riaccendi l'ESP e carica lo schizzo sull'ESP.

Dopo la compilazione, dovrebbe iniziare il caricamento sull'ESP. Il LED blu sull'ESP lampeggerà rapidamente durante il download del codice.

Ho notato che dovevo giocare un po' con il riavvio dell'IDE, riavviando l'ESP prima che il caricamento funzionasse.

Prima di iniziare a compilare/caricare lo sketch, assicurati di chiudere la console seriale (= monitor seriale) perché questo ti impedirà di eseguire il caricamento.

Una volta che il caricamento è riuscito, puoi riaprire il monitor seriale per vedere l'ESP ottenere efficacemente l'ora da Internet.

Ottimo, hai programmato il tuo ESP, connesso al tuo WiFi e ottenuto l'ora da Internet.

Il prossimo passo testeremo il DHT22.

Passaggio 5: test del sensore DHT22

Test del sensore DHT22
Test del sensore DHT22

Ora è necessario un cablaggio aggiuntivo.

Pin DHT… Collegare il pin 1 (a sinistra) del sensore a VCC (3,3 V)

Collegare il pin 2 ESP GPIO5 (DHTPIN nello schizzo)

Collegare il pin 4 (a destra) del sensore a GROUND

Collegare un resistore da 10K dal pin 2 (dati) al pin 1 (alimentazione) del sensore.

Simile al test NTP, trova lo schizzo DHTtester e modificalo nel modo seguente:

#define DHTPIN 5 // abbiamo selezionato GPIO5 per connetterci al sensore#define DHTTYPE DHT22 // poiché stiamo usando un DHT22 ma questo codice/libreria è adatto anche per DHT11

Di nuovo, chiudi il monitor seriale, spegni e riaccendi l'ESP e compila e flasha l'ESP.

Se tutto va bene dovresti vedere le misurazioni apparire nel monitor seriale.

Puoi giocare un po' con il sensore. Se ci respiri sopra, vedrai l'umidità salire.

Se hai una lampada da tavolo (non a LED), puoi illuminare il sensore per riscaldarlo un po'.

Grande! Ora funzionano due grandi parti del sensore.

Nel passaggio successivo commenterò il codice finale.

Passaggio 6: metterlo insieme…

Mettendolo insieme…
Mettendolo insieme…

Ancora un po' di cablaggio extra… questo serve per rendere possibile il DeepSleep.

Ricorda, DeepSleep è una funzione incredibile per i dispositivi IoT.

Tuttavia, se il tuo sensore è cablato per DeepSleep, potrebbe essere difficile riprogrammare l'ESP, quindi effettueremo un'altra connessione jumper tra

GPIO16-RST.

Sì, DEVE essere GPIO16, perché questo è il GPIO che è cablato per riattivare il dispositivo quando l'orologio in tempo reale si spegne dopo il DeepSleep!

Durante il test, puoi decidere di eseguire un DeepSleep di 15 secondi.

Durante il debug, spostavo il ponticello su GPIO0 in modo da poter eseguire il flashing del mio programma.

Al termine del download, sposterei il ponticello su GPIO16 in modo che DeepSleep funzioni.

Il codice per l'ESP si chiama TnHclient.c

Devi cambiare il tuo SSID, la password e l'indirizzo IP del tuo server.

Sono disponibili righe di codice aggiuntive che puoi utilizzare per risolvere i problemi o testare la tua configurazione.

Passaggio 7: il lato server delle cose

Il lato server delle cose
Il lato server delle cose
Il lato server delle cose
Il lato server delle cose

È un malinteso comune che UDP sia inaffidabile e TCP sia…

È sciocco come dire che un martello è più utile di un cacciavite. Sono semplicemente diversi strumenti molto utili ed entrambi hanno i loro usi.

A proposito, senza UDP Internet non funzionerebbe… Il DNS si basa su UDP.

Quindi, ho scelto UDP perché è molto leggero, facile e veloce.

Tendo a pensare che il mio WiFi sia molto affidabile, quindi il client invierà al massimo 3 pacchetti UDP se il riconoscimento "OK!" non è ricevuto.

Il codice C per TnHserver si trova nel file TnHServer.c.

Ci sono diversi commenti nel codice che lo spiegano.

Avremo bisogno di alcuni strumenti extra sul server: rrdtool, apache e forse tcpdump.

Per installare rrdtool su Raspbian puoi semplicemente installare il pacchetto in questo modo: apt-get install rrdtool

Se hai bisogno di eseguire il debug del traffico di rete, tcpdump è utile apt-get install tcpdump

Avevo bisogno di un webserver per poter utilizzare un browser per consultare i grafici: apt-get install apache2

Ho usato questo strumento: https://rrdwizard.appspot.com/index.php per ottenere il comando per creare il database Round Robin. Devi solo eseguirlo una volta (se lo fai bene la prima volta).

rrdtool crea TnHdatabase.rrd --start now-10s

--passo '1200'

'DS:Temperatura:GAUGE:1200:-20.5:45.5'

'DS:Umidità:GAUGE:1200:0:100.0'

'RRA:MEDIA:0.5:1:720'

'RRA:MEDIA:0.5:3:960'

'RRA:MEDIA:0.5:18:1600'

Infine, utilizzo una voce crontab per riavviare il mio TnHserver ogni giorno a mezzanotte. Eseguo il TnHserver come utente normale (cioè NON root) come precauzione di sicurezza.

0 0 * * * /usr/bin/pkill TnHserver; /home/utente/bin/TnHserver >/dev/null 2>&1

Puoi controllare che TnHserver sia in esecuzione facendo

$ ps -elfo | grep TnHserver

e puoi verificare che stia ascoltando i pacchetti sulla porta 7777 facendo

$ netstat -anu

Connessioni Internet attive (server e stabilite)

Proto Recv-Q Send-Q Indirizzo locale Indirizzo estero Stato

udp 0 0 0.0.0.0:7777 0.0.0.0:*

Infine CreateTnH_Graphs.sh.txt è uno script di esempio per generare i grafici. (Genero gli script come root, potresti non volerlo fare.)

Utilizzando una pagina web molto semplice puoi guardare i grafici da qualsiasi browser sulla tua rete domestica.

Consigliato: