Cuprins:

Senzor de temperatură pentru rețeaua de domiciliu: 7 pași
Senzor de temperatură pentru rețeaua de domiciliu: 7 pași

Video: Senzor de temperatură pentru rețeaua de domiciliu: 7 pași

Video: Senzor de temperatură pentru rețeaua de domiciliu: 7 pași
Video: Audi a4,senzor temperatura ulei,lichid racire,termostate 2024, Noiembrie
Anonim
Senzor de temperatură pentru rețeaua de domiciliu
Senzor de temperatură pentru rețeaua de domiciliu

Ce trebuie să știți pentru a face acest proiect:

Trebuie să știți despre: - Unele abilități electronice (lipire)

- Linux

- ID Arduino

(va trebui să actualizați placi suplimentare în IDE:

- actualizarea / programarea unei plăci ESP prin Arduino IDE.

(există câteva tutoriale frumoase disponibile pe web)

Acest lucru se poate face folosind un Arduino Uno sau folosind un FTDI (USB către adaptor serial).

Mi-am folosit Uno pentru că nu aveam niciun port serial pe computerul meu și nici nu aveam FTDI

Pasul 1: Mergeți la cumpărături

A merge la cumparaturi
A merge la cumparaturi

De ce vei avea nevoie pentru ca acest lucru să se întâmple?

Pentru senzorul digital de temperatură și umiditate:

- Fie o placă de rețea, fie o alternativă, cum ar fi un prototip de PCB, lipit, lipit …

- Un fir

- doi săritori

- un rezistor de 10k Ohm

- un ESP12F (s-ar putea să funcționeze și alte modele …)

- un DHT22 (puțin mai scump decât DHT11, dar mai precis)

- 3 baterii reîncărcabile AA și un suport pentru baterii

- o cutie de plastic pentru a vă pune proiectul

- Într-o etapă ulterioară intenționez să adaug un HT7333 cu doi condensatori de 10 uF între acumulator și ESP

pentru a stabiliza tensiunea de intrare (VCC) la 3.3V recomandat dar și pentru a proteja ESP de supratensiune.

Pentru partea de rețea:

- Rețeaua WiFi de acasă

Pentru partea Server:

- Orice sistem bazat pe Linux (întotdeauna activ!)

Am folosit un Raspberry Pi (pe care îl folosesc și ca server pentru camerele mele IP în aer liber.)

- compilator gcc pentru a compila codul serverului

- pachetul rrdtool pentru a stoca datele și a genera grafice

- apache (sau alt server web)

PC-ul sau laptopul tău preferat cu Arduino IDE pe el.

Pasul 2: Configurare și fundal

Configurare și fundal
Configurare și fundal

În această versiune a unui WiFi conectat - ca să nu spun IOT - senzor de temperatură și umiditate am folosit un ESP12F, un DHT22 și un suport de baterii de 3 AA cu baterii reîncărcabile.

La fiecare 20 de minute ESP ia o măsurare de la DHT22 și o trimite la un server (un Raspberry Pi) prin UDP pe rețeaua mea WiFi de acasă. După trimiterea măsurătorilor, ESP intră în adâncuri. Aceasta înseamnă că doar ceasul în timp real al modulului rămâne alimentat, rezultând o economie incredibilă de energie. Timp de aproximativ 5 secunde, modulul necesită aproximativ 100mA, apoi în timpul somnului de 20 de minute doar 150uA.

Nu am vrut să folosesc niciun serviciu bazat pe Internet, deoarece am Raspberry Pi care este întotdeauna activat și în acest fel am avut plăcerea să scriu și partea serverului.

Pe server (un Raspberry Pi care rulează Raspbian) am scris un simplu ascultător UDP (server) care stochează valorile într-un RRD simplu. (Baza de date Round Robin folosind RRDtool de Tobias Oetiker.)

Avantajul RRDtool este că vă creați baza de date o dată și dimensiunea rămâne aceeași. Altfel nu este nevoie să aveți un server de baze de date (cum ar fi mySQLd) care rulează în fundal. RRDtool vă oferă instrumentele pentru a crea baza de date și a genera grafice.

Serverul meu creează graficele periodic și afișează totul într-o pagină http foarte simplă. Îmi pot consulta lecturile cu un browser simplu conectându-mă la serverul web Apache2 de pe Raspberry Pi!

În cele din urmă, nu aveam un FTDI (USB to Serial), așa că am folosit Arduino UNO. Trebuie să conectați TX-urile și RX-urile și GND-ul ESP și UNO. (Știu, instinctul tău ar putea să-ți spună să traversezi RX-urile și TX-urile … încercat și el, nu funcționează.)

Nu am făcut o conversie de nivel (UNO: High = 5V, dar ESP este practic un dispozitiv de 3,3V … Există câteva FTDI frumoase pe piață, unde puteți chiar să selectați nivelul dvs. înalt pentru a fi 5 sau 3,3V.

Circuitul meu este alimentat de 3 baterii reîncărcabile AA - deci de fapt 3 X 1,2V. Într-o fază ulterioară intenționez să pun un HT7333 între baterie și circuit pentru siguranță; bateriile nou încărcate ar putea avea mai mult de 1,2 V, iar ESP-ul ar trebui să fie alimentat cu o tensiune de minim. 3V și max. 3,6V. De asemenea, dacă decid - într-un moment de slăbiciune - să introduc baterii alcaline (3 X 1,5V = 4,5V) ESP-ul meu nu va fi prăjit!

De asemenea, am luat în considerare utilizarea unui panou solar de 10cm x 10cm, dar pur și simplu nu a meritat bătaia de cap. Făcând 3 măsurători pe oră (practic 3x 5 secunde @ 100mA max. Și restul timpului @ 100uA), sper să-mi alimentez circuitul timp de 1 an pe aceleași baterii reîncărcabile.

Pasul 3: Arduino - ESP12 Partea

Partea Arduino - ESP12
Partea Arduino - ESP12
Partea Arduino - ESP12
Partea Arduino - ESP12

Am făcut acest proiect în pași diferiți.

Există mai multe linkuri care vă ajută să importați ESP12 (aka. ESP8266) în IDE Arduino. (A trebuit să folosesc versiunea 2.3.0 în locul celei mai recente din cauza unui bug care ar fi putut fi rezolvat între timp …)

Am început prin conectarea ESP-ului, peste Arduino UNO (folosit doar ca o punte între PC-ul meu prin USB către Serial) la interfața serială ESP. Există instructabile separate care explică acest lucru.

În proiectul meu finalizat, am lăsat firele pentru a mă conecta la Serial, în cazul în care ar trebui să depanez vreodată. RX

Apoi, trebuie să vă conectați ESP12 după cum urmează:

PIN-uri ESP …

GND UNO GND

RX UNO RX

TX UNO TX

EN VCC

GPIO15 GND

Inițial am încercat să-mi alimentez ESP-ul de la 3,3V pe UNO, dar m-am mutat rapid la alimentarea ESP-ului meu cu o sursă de alimentare de pe bancă, dar poți folosi și bateria.

GPIO0 L-am conectat pe acesta cu un jumper la GND pentru a permite intermitentul (= programarea) ESP-ului.

Primul test: lăsați jumperul deschis și porniți un monitor serial în Arduino IDE (la 115200 baud!).

Porniți ciclul ESP, ar trebui să vedeți câteva caractere de gunoi și apoi un mesaj de genul:

Ai-Thinker Technology Co. Ltd. gata

În acest mod, ESP acționează un pic ca un modem de modă veche. Trebuie să utilizați comenzile AT.

Încercați următoarele comenzi:

AT + RST

și următoarele două comenzi

AT + CWMODE = 3

Bine

AT + CWLAP

Acest lucru ar trebui să vă ofere o listă a tuturor rețelelor WiFi din zonă.

Dacă acest lucru funcționează, sunteți gata pentru următorul pas.

Pasul 4: Testarea ESP-ului ca client Network Time Protocol (NTP)

Testarea ESP ca client al Network Time Protocol (NTP)
Testarea ESP ca client al Network Time Protocol (NTP)
Testarea ESP ca client de timp de rețea (NTP)
Testarea ESP ca client de timp de rețea (NTP)

În IDE-ul Arduino, sub Fișier, Exemple, ESP8266WiFi, încărcați NTPClient.

Sunt necesare modificări minore pentru ca acesta să funcționeze; trebuie să introduceți SSID-ul și parola rețelei WiFi.

Acum plasați jumperul, scurtcircuitând GPIO0 la GND.

Porniți ciclul ESP și încărcați schița în ESP.

După compilare, ar trebui să înceapă încărcarea în ESP. LED-ul albastru de pe ESP va clipi rapid pe măsură ce codul este descărcat.

Am observat că a trebuit să mă joc puțin cu repornirea IDE, repornirea ESP înainte ca încărcarea să funcționeze.

Înainte de a începe să compilați / încărcați schița, asigurați-vă că închideți consola serială (= monitorul serial), deoarece acest lucru vă va împiedica să faceți încărcarea.

Odată ce încărcarea a reușit, puteți redeschide monitorul serial pentru a vedea ESP-ul obținând efectiv timpul de pe Internet.

Minunat, ți-ai programat ESP-ul, te-ai conectat la WiFi și ai primit timpul de pe Internet.

Pasul următor vom testa DHT22.

Pasul 5: Testarea senzorului DHT22

Testarea senzorului DHT22
Testarea senzorului DHT22

Acum este necesar un cablaj suplimentar.

Pinii DHT … Conectați pinul 1 (din stânga) al senzorului la VCC (3,3V)

Conectați pinul 2 ESP GPIO5 (DHTPIN în schiță)

Conectați pinul 4 (din dreapta) al senzorului la Pământ

Conectați un rezistor de 10K de la pinul 2 (date) la pinul 1 (putere) al senzorului.

Similar testului NTP, găsiți schița DHTtester și modificați-o în felul următor:

#define DHTPIN 5 // am selectat GPIO5 pentru a ne conecta la senzor # define DHTTYPE DHT22 // deoarece folosim un DHT22 dar acest cod / bibliotecă este potrivit și pentru DHT11

Din nou, închideți monitorul serial, alimentați ciclu ESP și compilați și blocați ESP.

Dacă totul merge bine, ar trebui să vedeți măsurătorile apar pe monitorul serial.

Puteți juca puțin cu senzorul. Dacă respirați pe el, veți vedea umiditatea crescând.

Dacă aveți o lampă de birou (fără LED), puteți străluci pe senzor pentru a o încălzi puțin.

Grozav! Două părți mari ale senzorului funcționează acum.

În pasul următor voi comenta codul final.

Pasul 6: Pune-l împreună …

Punând laolaltă…
Punând laolaltă…

Din nou, unele cabluri suplimentare … aceasta este pentru a face DeepSleep posibil.

Amintiți-vă, DeepSleep este o funcție incredibilă pentru dispozitivele IoT.

Cu toate acestea, dacă senzorul dvs. este conectat la DeepSleep, ar putea fi dificil să reprogramați ESP, așa că vom face o altă conexiune jumper între

GPIO16-RST.

Da, TREBUIE să fie GPIO16, deoarece acesta este GPIO-ul care este conectat la cablu pentru a trezi dispozitivul când ceasul în timp real se stinge după DeepSleep!

În timp ce testați, puteți decide să faceți un DeepSleep de 15 secunde.

Când depanam, mutam jumperul pe GPIO0, astfel încât să-mi pot arăta programul.

La finalizarea descărcării, aș muta jumperul la GPIO16, astfel încât DeepSleep să funcționeze.

Codul pentru ESP se numește TnHclient.c

Trebuie să vă schimbați SSID-ul, parola și adresa IP a serverului.

Există linii suplimentare de cod pe care le puteți utiliza pentru depanarea sau testarea configurării.

Pasul 7: partea serverului

Partea serverului a lucrurilor
Partea serverului a lucrurilor
Partea serverului a lucrurilor
Partea serverului a lucrurilor

Este o neînțelegere obișnuită că UDP nu este fiabil și TCP este …

Este la fel de prostesc ca a spune că un ciocan este mai util decât o șurubelniță. Ele sunt pur și simplu diferite instrumente foarte utile și ambele își folosesc.

Apropo, fără UDP Internetul nu ar funcționa … DNS se bazează pe UDP.

Așadar, am ales UDP pentru că este foarte ușor, ușor și rapid.

Tind să cred că WiFi-ul meu este foarte fiabil, astfel încât clientul va trimite cel mult 3 pachete UDP dacă confirmarea „OK!” nu este primit.

Codul C pentru TnHserver se află în fișierul TnHServer.c.

Există mai multe comentarii în cod care explică acest lucru.

Vom avea nevoie de câteva instrumente suplimentare pe server: rrdtool, apache și poate tcpdump.

Pentru a instala rrdtool pe Raspbian, puteți instala pur și simplu pachetul astfel: apt-get install rrdtool

Dacă trebuie să depanați traficul de rețea, tcpdump vine la îndemână apt-get install tcpdump

Aveam nevoie de un server web pentru a putea folosi un browser pentru a consulta graficele: apt-get install apache2

Am folosit acest instrument: https://rrdwizard.appspot.com/index.php pentru a obține comanda pentru a crea baza de date Round Robin. Trebuie să rulați acest lucru o singură dată (dacă îl faceți bine prima dată).

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

- pasul '1200'

'DS: Temperatură: CALIBRU: 1200: -20,5: 45,5'

„DS: Umiditate: CALIBRU: 1200: 0: 100.0”

„RRA: MEDIE: 0,5: 1: 720”

„RRA: MEDIE: 0,5: 3: 960”

„RRA: MEDIE: 0,5: 18: 1600”

În cele din urmă, folosesc o intrare crontab pentru a reporni TnHserver în fiecare zi la miezul nopții. Execut TnHserver ca utilizator normal (adică NU root) ca măsură de siguranță.

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

Puteți verifica dacă TnHserver rulează efectiv

$ ps -elf | grep TnHserver

și puteți verifica dacă ascultă pachete pe portul 7777 procedând astfel

$ netstat -anu

Conexiuni active la internet (servere și stabilite)

Proto Recv-Q Trimite-Q Adresă locală Stare adresă străină

udp 0 0 0.0.0.0:7777 0.0.0.0:*

În cele din urmă CreateTnH_Graphs.sh.txt este un exemplu de script pentru a genera graficele. (Generez scripturile ca root, este posibil să nu doriți să faceți acest lucru.)

Folosind o pagină web foarte simplă puteți urmări graficele din orice browser din rețeaua dvs. de acasă.

Recomandat: