Turinys:

Namų tinklo temperatūros jutiklis: 7 žingsniai
Namų tinklo temperatūros jutiklis: 7 žingsniai

Video: Namų tinklo temperatūros jutiklis: 7 žingsniai

Video: Namų tinklo temperatūros jutiklis: 7 žingsniai
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Lapkritis
Anonim
Namų tinklo temperatūros jutiklis
Namų tinklo temperatūros jutiklis

Ką reikia žinoti norint įgyvendinti šį projektą:

Turite žinoti apie:- kai kuriuos elektronikos įgūdžius (litavimas)

- „Linux“

- „Arduino IDE“

(turėsite atnaujinti papildomas IDE plokštes:

- ESP plokštės atnaujinimas/programavimas naudojant „Arduino IDE“.

(internete yra keletas puikių pamokų)

Tai galima padaryti naudojant „Arduino Uno“arba naudojant FTDI (USB į nuoseklųjį adapterį).

Aš naudojau „Uno“, nes kompiuteryje neturėjau jokio nuoseklaus prievado ir neturėjau FTDI

1 žingsnis: eikite apsipirkti

Eiti apsipirkti
Eiti apsipirkti

Ko jums reikės, kad tai įvyktų?

Skaitmeniniam temperatūros ir drėgmės jutikliui:

- Duonos lenta arba alternatyva, pvz., Prototipas PCB, lituoklis, lituoklis…

- Kažkoks laidas

- du džemperiai

- 10k omų rezistorius

- ESP12F (kiti modeliai taip pat gali veikti …)

- DHT22 (šiek tiek brangesnis nei DHT11, bet tikslesnis)

- 3 AA įkraunamos baterijos ir baterijų laikiklis

- maža plastikinė dėžutė jūsų projektui sudėti

- Vėlesniame etape tarp akumuliatoriaus ir ESP planuoju pridėti HT7333 su dviem 10uF kondensatoriais

stabilizuoti įėjimo įtampą (VCC) iki rekomenduojamos 3,3 V, bet taip pat apsaugoti ESP nuo viršįtampio.

Tinklo daliai:

- Jūsų namų „WiFi“tinklas

Dėl serverio dalies:

- Bet kuri „Linux“sistema (visada įjungta!)

Aš naudojau „Raspberry Pi“(kurį taip pat naudoju kaip serverį savo lauko IP kameroms).

- gcc kompiliatorius, kad sudarytų jūsų serverio kodą

- „rrdtool“paketas duomenims saugoti ir grafikams kurti

- apache (ar kita žiniatinklio serveris)

Jūsų mėgstamiausias kompiuteris ar nešiojamas kompiuteris su „Arduino IDE“.

2 žingsnis: sąranka ir fonas

Sąranka ir fonas
Sąranka ir fonas

Šioje „WiFi“versijoje prijungtas - o ne sakyti IOT - temperatūros ir drėgmės jutiklis naudojau ESP12F, DHT22 ir 3 AA baterijų laikiklį su įkraunamomis baterijomis.

Kas 20 minučių ESP atlieka matavimą iš DHT22 ir siunčia jį į serverį („Raspberry Pi“) per UDP mano namų „WiFi“tinkle. Išsiuntus matavimus, ESP užmiega. Tai reiškia, kad tik modulio laikrodis realiuoju laiku lieka įjungtas, todėl sutaupoma neįtikėtinai daug energijos. Maždaug 5 sekundes moduliui reikia apie 100 mA, tada per 20 minučių užmigti tik 150uA.

Nenorėjau naudotis jokia interneto paslauga, nes turiu „Raspberry Pi“, kuri visada yra įjungta, ir tokiu būdu man buvo malonu parašyti ir serverio dalį.

Serveryje („Raspberry Pi“, kuriame veikia „Raspbian“) parašiau paprastą UDP klausyklę (serverį), kuri išsaugo vertes į paprastą RRD. („Round Robin“duomenų bazė naudojant „Tobias Oetiker“RRDtool.)

„RRDtool“pranašumas yra tas, kad sukuriate savo duomenų bazę vieną kartą ir jos dydis išlieka tas pats. Taip pat nereikia, kad fone veiktų duomenų bazės serveris (pvz., „MySQLd“). „RRDtool“suteikia jums įrankius duomenų bazei kurti ir diagramoms generuoti.

Mano serveris periodiškai kuria grafikus ir viską rodo labai paprastame http puslapyje. Galiu peržiūrėti savo rodmenis naudodami paprastą naršyklę prisijungęs prie „Apache2“žiniatinklio serverio „Raspberry Pi“!

Galiausiai neturėjau FTDI (USB į serijinį), todėl naudojau savo „Arduino UNO“. Turite prijungti TX ir RX bei ESP ir UNO GND. (Žinau, tavo nuojauta gali liepti kirsti RX ir TX… taip pat bandė, neveikia.)

Aš nepadariau lygio konvertavimo (UNO: aukštas = 5 V, bet ESP iš esmės yra 3,3 V įrenginys … Rinkoje yra keletas gražių FTDI, kuriuose netgi galite pasirinkti aukštą lygį 5 arba 3,3 V.

Mano grandinę maitina 3 įkraunamos AA baterijos - taigi iš tikrųjų 3 X 1,2 V. Vėlesniame etape aš ketinu įdėti HT7333 tarp akumuliatoriaus bloko ir grandinės dėl saugumo; naujai įkrautos baterijos gali turėti daugiau nei 1,2 V įtampą, o ESP turėtų būti maitinamas min. 3V ir maks. 3.6V. Taip pat, jei nuspręsiu - silpnumo akimirką - įdėti šarmines baterijas (3 X 1,5 V = 4,5 V), mano ESP nebus kepti!

Aš taip pat svarsčiau galimybę naudoti 10 cm x 10 cm saulės skydelį, tačiau tai nebuvo verta vargo. Atlikdamas 3 matavimus per valandą (iš esmės 3x 5 sekundes, esant maksimaliai 100 mA, o likusiam laikui @ 100uA), tikiuosi, kad 1 metus maitinu savo grandinę iš tų pačių įkraunamų baterijų.

3 žingsnis: „Arduino“- ESP12 dalis

„Arduino“- ESP12 dalis
„Arduino“- ESP12 dalis
„Arduino“- ESP12 dalis
„Arduino“- ESP12 dalis

Šį projektą vykdžiau įvairiais žingsniais.

Yra keletas nuorodų, padedančių importuoti ESP12 (dar žinomą kaip ESP8266) į „Arduino IDE“. (Turėjau naudoti 2.3.0 versiją, o ne naujausią dėl klaidos, kuri tuo metu galėjo būti išspręsta …)

Pradėjau prijungdamas ESP per savo „Arduino UNO“(naudojamas tik kaip tiltas tarp kompiuterio per USB prie serijos) prie ESP serijinės sąsajos. Yra atskiros instrukcijos, paaiškinančios tai.

Baigęs projektą palikau laidus, kad galėčiau prisijungti prie serijos, jei man kada nors prireiktų trikčių šalinimo. RX

Tada turite prijungti ESP12 taip:

ESP kaiščiai…

GND UNO GND

RX UNO RX

TX UNO TX

LT VCC

GPIO15 GND

Iš pradžių bandžiau maitinti savo ESP iš 3,3 V UNO, bet greitai pradėjau maitinti savo ESP su maitinimo šaltiniu, tačiau galite naudoti ir akumuliatorių.

GPIO0 Aš prijungiau šį su trumpikliu prie GND, kad būtų galima mirksėti (= programuoti) ESP.

Pirmasis bandymas: palikite trumpiklį atvirą ir paleiskite serijinį monitorių „Arduino IDE“(esant 115200 baudų!).

Įjungę ESP maitinimo ciklą, turėtumėte pamatyti keletą šiukšlių simbolių ir tada tokį pranešimą:

„Ai-Thinker Technology Co. Ltd.“paruošta

Šiuo režimu ESP veikia šiek tiek kaip senamadiškas modemas. Turite naudoti AT komandas.

Išbandykite šias komandas:

AT+RST

ir dvi toliau nurodytas komandas

AT+CWMODE = 3

Gerai

AT+CWLAP

Tai turėtų pateikti visų vietovės „WiFi“tinklų sąrašą.

Jei tai veikia, esate pasirengęs kitam žingsniui.

4 žingsnis: išbandykite ESP kaip tinklo laiko protokolo (NTP) klientą

ESP kaip tinklo laiko protokolo (NTP) kliento testavimas
ESP kaip tinklo laiko protokolo (NTP) kliento testavimas
ESP kaip tinklo laiko protokolo (NTP) kliento testavimas
ESP kaip tinklo laiko protokolo (NTP) kliento testavimas

„Arduino IDE“skiltyje Failas, pavyzdžiai, ESP8266WiFi įkelkite „NTPClient“.

Kad jis veiktų, reikia atlikti nedidelius pakeitimus; turite įvesti savo „WiFi“tinklo SSID ir slaptažodį.

Dabar uždėkite trumpiklį, trumpai sujungdami GPIO0 su GND.

Įjunkite ESP maitinimo ciklą ir įkelkite eskizą į ESP.

Po kompiliavimo turėtų būti pradėtas įkėlimas į ESP. Atsisiunčiant kodą, ESP mėlynas šviesos diodas greitai mirksės.

Pastebėjau, kad turiu šiek tiek pažaisti iš naujo paleisdamas IDE, iš naujo paleisdamas ESP, kol įkėlimas veiks.

Prieš pradėdami rinkti/įkelti eskizą, būtinai uždarykite serijos konsolę (= nuoseklųjį monitorių), nes tai neleis jums įkelti.

Kai įkėlimas pavyko, galite iš naujo atidaryti serijinį monitorių, kad pamatytumėte, kaip ESP efektyviai gauna laiko iš interneto.

Puiku, jūs užprogramavote savo ESP, prisijungėte prie „WiFi“ir gavote laiko iš interneto.

Kitas žingsnis bus išbandyti DHT22.

5 žingsnis: išbandykite DHT22 jutiklį

DHT22 jutiklio bandymas
DHT22 jutiklio bandymas

Dabar reikia papildomų laidų.

DHT kaiščiai… Prijunkite jutiklio 1 kaištį (kairėje) prie VCC (3.3V)

Prijunkite 2 kaištį ESP GPIO5 (eskizo DHTPIN)

Prijunkite jutiklio 4 kaištį (dešinėje) prie GROUND

Prijunkite 10K rezistorių nuo 2 kaiščio (duomenys) prie jutiklio 1 kaiščio (maitinimas).

Panašiai kaip NTP testas, suraskite DHTtester eskizą ir pataisykite jį taip:

#define DHTPIN 5 // mes pasirinkome GPIO5 prisijungti prie jutiklio#define DHTTYPE DHT22 // kadangi mes naudojame DHT22, bet šis kodas/biblioteka taip pat tinka DHT11

Vėl uždarykite serijinį monitorių, įjunkite ESP maitinimo ciklą ir sukompiliuokite bei paleiskite ESP.

Jei viskas gerai, matavimai turėtų būti rodomi serijiniame monitoriuje.

Su jutikliu galite šiek tiek pažaisti. Jei kvėpuosite, pamatysite, kaip padidėja drėgmė.

Jei turite (ne LED) stalinę lempą, galite apšviesti jutiklį, kad jis šiek tiek įkaistų.

Puiku! Dabar veikia dvi didelės jutiklio dalys.

Kitame žingsnyje pakomentuosiu galutinį kodą.

6 veiksmas: sujungimas …

Sudedant kartu…
Sudedant kartu…

Vėlgi kai kurie papildomi laidai … tai leidžia padaryti „DeepSleep“.

Atminkite, kad „DeepSleep“yra neįtikėtina „IoT“įrenginių funkcija.

Tačiau jei jūsų jutiklis yra prijungtas prie „DeepSleep“, gali būti sunku perprogramuoti ESP, todėl ketiname užmegzti dar vieną jungiamąjį ryšį tarp

GPIO16-RST.

Taip, tai TURI būti GPIO16, nes būtent tas GPIO yra priverstas pažadinti įrenginį, kai realiojo laiko laikrodis išsijungia po „DeepSleep“!

Kol bandote, galite nuspręsti padaryti 15 sekundžių „DeepSleep“.

Kai derinau, perkėliau trumpiklį į GPIO0, kad galėčiau paleisti savo programą.

Kai atsisiuntimas bus baigtas, perkelčiau trumpiklį į GPIO16, kad „DeepSleep“veiktų.

ESP kodas vadinamas TnHclient.c

Turite pakeisti savo SSID, slaptažodį ir serverio IP adresą.

Yra papildomų kodo eilučių, kurias galite naudoti trikčių šalinimui arba sąrankos testavimui.

7 žingsnis: Serverio dalykai

Daiktų pusė serveryje
Daiktų pusė serveryje
Daiktų pusė serveryje
Daiktų pusė serveryje

Dažnas nesusipratimas, kad UDP yra nepatikimas, o TCP yra…

Tai taip pat kvaila, kaip sakyti, kad plaktukas yra naudingesnis už atsuktuvą. Jie tiesiog yra skirtingi labai naudingi įrankiai ir jie abu turi savo paskirtį.

Beje, be UDP internetas neveiktų … DNS yra pagrįstas UDP.

Taigi, aš pasirinkau UDP, nes jis yra labai lengvas, lengvas ir greitas.

Aš linkęs manyti, kad mano „WiFi“yra labai patikimas, todėl klientas atsiųs ne daugiau kaip 3 UDP paketus, jei patvirtinimas „Gerai!“nėra gautas.

„TnHserver“C kodas yra TnHServer.c faile.

Kodekse yra keletas paaiškinimų.

Serveryje mums reikės papildomų įrankių: rrdtool, apache ir galbūt tcpdump.

Norėdami įdiegti „rrdtool“„Raspbian“, galite tiesiog įdiegti paketą taip: apt-get install rrdtool

Jei reikia derinti tinklo srautą, „tcpdump“yra naudingas apt-get install tcpdump

Man reikėjo žiniatinklio serverio, kad galėčiau naudoti naršyklę, kad galėčiau peržiūrėti grafikus: apt-get install apache2

Aš naudoju šį įrankį: https://rrdwizard.appspot.com/index.php, kad gaučiau komandą sukurti „Round Robin“duomenų bazę. Jums reikia tai paleisti tik vieną kartą (jei pirmą kartą tai padarysite teisingai).

rrdtool sukurkite „TnHdatabase.rrd“-pradėkite dabar-10s

-žingsnis „1200“

„DS: temperatūra: MATUOLIS: 1200: -20,5: 45,5“

„DS: Drėgmė: GAUGE: 1200: 0: 100.0“

„RRA: VIDUTINIS: 0,5: 1: 720“

„RRA: VIDUTINIS: 0,5: 3: 960“

„RRA: VIDUTINIS: 0.5: 18: 1600“

Galiausiai naudoju „crontab“įrašą, kad iš naujo paleisčiau „TnHserver“kiekvieną vidurnaktį. „TnHserver“naudoju kaip įprastas vartotojas (ty NE šaknis) kaip saugumo priemonė.

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

Galite patikrinti, ar „TnHserver“veikia

$ ps -save | grep TnHserver

ir jūs galite patikrinti, ar jis klausosi paketų 7777 prievade

$ netstat -anu

Aktyvūs interneto ryšiai (serveriai ir nustatyti)

Proto Recv-Q Send-Q Vietinis adresas Užsienio adreso valstybė

udp 0 0 0.0.0.0:7777 0.0.0.0:*

Galiausiai „CreateTnH_Graphs.sh.txt“yra scenarijaus pavyzdys, leidžiantis generuoti diagramas. (Aš sukuriu scenarijus kaip root, galbūt nenorėsite to daryti.)

Naudodami labai paprastą tinklalapį, galite žiūrėti diagramas iš bet kurios savo namų tinklo naršyklės.

Rekomenduojamas: