Kotiverkon lämpötila -anturi: 7 vaihetta
Kotiverkon lämpötila -anturi: 7 vaihetta
Anonim
Kotiverkon lämpötila -anturi
Kotiverkon lämpötila -anturi

Mitä sinun tarvitsee tietää tämän projektin toteuttamiseksi:

Sinun on tiedettävä:- Jotkut elektroniikan taidot (juotos)

- Linux

- Arduino IDE

(sinun on päivitettävä lisälevyjä IDE: ssä:

- ESP -kortin päivittäminen/ohjelmointi Arduino IDE: n kautta.

(netistä löytyy hyviä opetusohjelmia)

Tämä voidaan tehdä käyttämällä Arduino Unoa tai FTDI: tä (usb -sarjasovitin).

Käytin Unoa, koska tietokoneessani ei ollut sarjaporttia eikä minulla ollut FTDI -yhteyttä

Vaihe 1: Käy ostoksilla

Mennä ostoksille
Mennä ostoksille

Mitä tarvitset tämän toteuttamiseksi?

Digitaalinen lämpötila- ja kosteusanturi:

- Joko leipälauta tai vaihtoehto, kuten piirilevyn prototyyppi, juote, juotosrauda…

- Joku lanka

- kaksi hyppääjää

- 10 k ohmin vastus

- ESP12F (muut mallit saattavat toimia myös …)

- DHT22 (hieman kalliimpi kuin DHT11, mutta tarkempi)

- 3 ladattavaa AA -paristoa ja paristopidike

- pieni muovilaatikko, johon voit laittaa projektisi

- Myöhemmin aion lisätä HT7333: n, jossa on kaksi 10uF -kondensaattoria, akun ja ESP: n väliin

tulojännitteen (VCC) vakauttamiseksi suositellulle 3,3 V: lle, mutta myös ESP: n suojaamiseksi ylijännitteeltä.

Verkko -osa:

- Kotisi WiFi -verkko

Palvelinosa:

- Mikä tahansa Linux -pohjainen järjestelmä (aina päällä!)

Käytin Raspberry Pi: tä (jota käytän myös palvelimena ulkokäyttöön tarkoitettuihin IP -kameroihini.)

- gcc -kääntäjä palvelinkoodin kääntämiseksi

- rrdtool -paketti tietojen tallentamiseen ja kaavioiden luomiseen

- apache (tai muu verkkopalvelin)

Suosikki tietokoneesi tai kannettava tietokone, jossa on Arduino IDE.

Vaihe 2: Asennus ja tausta

Asennus ja tausta
Asennus ja tausta

Tässä WiFi -liitännän - ei sanoa IOT - lämpötila- ja kosteusanturin versiossa käytin ESP12F-, DHT22- ja 3 AA -paristopidikettä ladattavilla paristoilla.

ESP ottaa mittauksen 20 minuutin välein DHT22: sta ja lähettää sen palvelimelle (Raspberry Pi) UDP: n kautta kotini WiFi -verkossa. Mittausten lähettämisen jälkeen ESP siirtyy syvään uneen. Tämä tarkoittaa, että vain moduulin reaaliaikainen kello pysyy käynnissä, mikä johtaa uskomattomaan virransäästöön. Moduuli vaatii noin 100 sekuntia noin 5 sekunnin ajan, sitten 20 minuutin syvän unen aikana vain 150 mA.

En halunnut käyttää mitään Internet -pohjaista palvelua, koska minulla on Raspberry Pi, joka on aina päällä, ja tällä tavalla minulla oli ilo kirjoittaa myös palvelinosa.

Palvelimelle (Raspberry Pi, jossa on Raspbian) olen kirjoittanut yksinkertaisen UDP -kuuntelijan (palvelin), joka tallentaa arvot yksinkertaiseen RRD: hen. (Pyöreä Robin -tietokanta käyttäen Tobias Oetikerin RRDtoolia.)

RRDtoolin etuna on, että luot tietokannasi kerran ja koko pysyy samana. Muuten sinun ei tarvitse käyttää taustalla tietokantapalvelinta (kuten mySQLd). RRDtool tarjoaa työkalut tietokannan luomiseen ja kaavioiden luomiseen.

Palvelimeni luo kaaviot säännöllisesti ja näyttää kaiken hyvin yksinkertaisella http -sivulla. Voin lukea lukemiani yksinkertaisella selaimella yhdistämällä Raspberry Pi -laitteen Apache2 -verkkopalvelimeen!

Lopuksi minulla ei ollut FTDI: tä (USB -sarja), joten käytin Arduino UNO: ta. Sinun on yhdistettävä lähetin- ja vastaanotinlaitteet sekä ESP: n ja UNO: n GND. (Tiedän, vaistosi voi käskeä sinua ylittämään RX: n ja TX: n … kokeillut myös, ei toimi.)

En tehnyt tasomuunnosta (UNO: Korkea = 5 V, mutta ESP on pohjimmiltaan 3,3 V laite … Markkinoilla on hienoja FTDI -laitteita, joissa voit jopa valita korkean tasosi 5 tai 3,3 V: ksi.

Piirini saa virtansa 3 ladattavasta AA -paristosta - itse asiassa 3 X 1,2 V. Myöhemmässä vaiheessa aion laittaa HT7333 akun ja piirin väliin turvallisuuden vuoksi; äskettäin ladatuissa akuissa voi olla yli 1,2 V ja ESP: n tulee olla vähintään 3V ja maks. 3.6V. Lisäksi jos päätän - heikkouden hetkellä - laittaa alkaliparistot (3 x 1,5 V = 4,5 V), ESP ei paista!

Harkitsin myös 10 x 10 cm aurinkopaneelin käyttöä, mutta se ei vain ollut vaivan arvoista. Suorittamalla 3 mittausta tunnissa (pohjimmiltaan 3x 5 sekuntia @ 100mA maks. Ja loput ajasta @ 100uA), toivon voivani käyttää virtapiiriäni yhden vuoden ajan samoilla ladattavilla paristoilla.

Vaihe 3: Arduino - ESP12 -osa

Arduino - ESP12 osa
Arduino - ESP12 osa
Arduino - ESP12 osa
Arduino - ESP12 osa

Tein tämän projektin eri vaiheissa.

On olemassa useita linkkejä, joiden avulla voit tuoda ESP12: n (alias. ESP8266) Arduino IDE: hen. (Jouduin käyttämään versiota 2.3.0 viimeisimmän sijasta virheen vuoksi, joka olisi ehkä ratkaistu sillä välin …)

Aloitin kytkemällä ESP: n Arduino UNO -laitteeseeni (käytetään vain siltana tietokoneen välillä USB: n kautta sarjaan) ESP -sarjaliitäntään. On olemassa erilliset ohjeet, jotka selittävät tämän.

Valmiissa projektissani jätin johdot sarjaan yhdistämistä varten, jos minun on joskus suoritettava vianmääritys

Sitten sinun on kytkettävä ESP12 johtoon seuraavasti:

ESP -nastat…

GND UNO GND

RX UNO RX

TX UNO TX

FI VCC

GPIO15 GND

Aluksi yritin käyttää ESP: tä 3,3 V: n virralla UNO: ssa, mutta siirtyin nopeasti käyttämään ESP: täni virtalähteellä, mutta voit käyttää myös akkua.

GPIO0 Yhdistin tämän hyppyjohtimella GND: hen, jotta ESP vilkkuu (= ohjelmoidaan).

Ensimmäinen testi: jätä hyppyjohdin auki ja käynnistä sarjamonitori Arduino IDE: ssä (115200 baudilla!).

Käynnistä ESP, sinun pitäisi nähdä roskahahmoja ja sitten viesti, kuten:

Ai-Thinker Technology Co. Ltd. valmis

Tässä tilassa ESP toimii vähän kuin vanhanaikainen modeemi. Sinun on käytettävä AT -komentoja.

Kokeile seuraavia komentoja:

AT+RST

ja seuraavat kaksi komentoa

AT+CWMODE = 3

OK

AT+CWLAP

Tämän pitäisi antaa sinulle luettelo kaikista alueen WiFi -verkoista.

Jos tämä toimii, olet valmis seuraavaan vaiheeseen.

Vaihe 4: ESP: n testaaminen NTP (Network Time Protocol) -asiakkaana

ESP: n testaaminen NTP (Network Time Protocol) -asiakkaana
ESP: n testaaminen NTP (Network Time Protocol) -asiakkaana
ESP: n testaaminen NTP (Network Time Protocol) -asiakkaana
ESP: n testaaminen NTP (Network Time Protocol) -asiakkaana

Lataa Arduino IDE: ssä Tiedosto, esimerkit, ESP8266WiFi, NTPClient.

Jotta se toimisi, tarvitaan pieniä hienosäätöjä; sinun on syötettävä WiFi -verkon SSID ja salasana.

Aseta nyt hyppyjohdin, oikosulje GPIO0 GND: hen.

Käynnistä ESP ja käynnistä luonnos ESP: hen.

Kokoonpanon jälkeen latauksen ESP: n pitäisi alkaa. ESP: n sininen LED -valo vilkkuu nopeasti, kun koodia ladataan.

Huomasin, että minun piti leikkiä hieman uudelleenkäynnistämällä IDE, käynnistämällä ESP uudelleen ennen lataamista.

Ennen kuin aloitat luonnoksen kokoamisen/lataamisen, sulje sarjakonsoli (= sarjamonitori), koska tämä estää sinua lataamasta.

Kun lataus on onnistunut, voit avata sarjamonitorin uudelleen, jotta näet ESP: n tehokkaasti saavan ajan Internetistä.

Hienoa, olet ohjelmoinut ESP: si, muodostanut yhteyden WiFi -verkkoon ja saanut ajan Internetistä.

Seuraavaksi testataan DHT22.

Vaihe 5: DHT22 -anturin testaus

DHT22 -anturin testaus
DHT22 -anturin testaus

Nyt tarvitaan lisäjohdotusta.

DHT -nastat… Liitä anturin nasta 1 (vasemmalla) VCC: hen (3.3V)

Liitä nasta 2 ESP GPIO5 (luonnoksessa DHTPIN)

Liitä anturin nasta 4 (oikealla) maahan

Liitä 10K vastus nastasta 2 (data) anturin nastaan 1 (virta).

Samanlainen kuin NTP -testi, etsi DHTtester -luonnos ja säädä se seuraavasti:

#define DHTPIN 5 // valitsimme GPIO5: n liitettäväksi anturiin#define DHTTYPE DHT22 // koska käytämme DHT22: ta, mutta tämä koodi/kirjasto sopii myös DHT11: lle

Sulje jälleen sarjamonitori, käynnistä ESP ja käynnistä ESP.

Jos kaikki menee hyvin, sinun pitäisi nähdä mitat sarjamonitorissa.

Voit leikkiä hieman anturilla. Jos hengität sitä, näet kosteuden nousevan.

Jos sinulla on (ei -LED) pöytävalaisin, voit loistaa anturilla lämmittääksesi sitä hieman.

Loistava! Kaksi suurta osaa anturista toimii nyt.

Seuraavassa vaiheessa kommentoin lopullista koodia.

Vaihe 6: Yhdistäminen…

Yhdistäminen…
Yhdistäminen…

Jälleen ylimääräisiä johdotuksia… tämä on mahdollista DeepSleepin mahdollistamiseksi.

Muista, että DeepSleep on uskomaton toiminto IoT -laitteille.

Kuitenkin, jos anturi on kytketty DeepSleepiin, ESP: n uudelleenohjelmointi voi olla vaikeaa, joten aiomme muodostaa toisen hyppyliitännän

GPIO16-RST.

Kyllä sen PITÄÄ olla GPIO16, koska se on GPIO, joka on kiinteästi herättänyt laitteen, kun reaaliaikainen kello sammuu DeepSleepin jälkeen!

Kun testaat, voit päättää tehdä 15 sekunnin DeepSleepin.

Kun tein virheenkorjausta, siirrän hyppääjän GPIO0: een, jotta voin vilkuttaa ohjelmaa.

Kun lataus on valmis, siirrän hyppääjän GPIO16 -tilaan, jotta DeepSleep toimisi.

ESP -koodin nimi on TnHclient. C

Sinun on vaihdettava SSID, salasana ja palvelimesi IP -osoite.

On ylimääräisiä koodirivejä, joita voit käyttää vianmääritykseen tai asennuksen testaamiseen.

Vaihe 7: Asioiden palvelinpuoli

Asioiden palvelinpuoli
Asioiden palvelinpuoli
Asioiden palvelinpuoli
Asioiden palvelinpuoli

On yleinen väärinkäsitys, että UDP on epäluotettava ja TCP on…

Se on yhtä typerää kuin sanoa, että vasara on hyödyllisempi kuin ruuvimeisseli. Ne ovat yksinkertaisesti erilaisia erittäin hyödyllisiä työkaluja ja molemmilla on käyttötarkoituksensa.

Muuten, ilman UDP: tä Internet ei toimisi… DNS perustuu UDP: hen.

Joten valitsin UDP: n, koska se on erittäin kevyt, helppo ja nopea.

Minulla on taipumus ajatella, että WiFi on erittäin luotettava, joten asiakas lähettää enintään 3 UDP -pakettia, jos kuittaus "OK!" ei ole vastaanotettu.

TnHserverin C-koodi on TnHServer.c-tiedostossa.

Koodissa on useita kommentteja, jotka selittävät sen.

Tarvitsemme lisäpalvelimia palvelimelle: rrdtool, apache ja ehkä tcpdump.

Jos haluat asentaa rrdtoolin Raspbianiin, voit asentaa paketin seuraavasti: apt-get install rrdtool

Jos sinun on korjattava verkkoliikennettä, tcpdump on kätevä apt-get install tcpdump

Tarvitsin verkkopalvelimen voidakseni käyttää selainta, jotta voin tutustua kaavioihin: apt-get install apache2

Käytin tätä työkalua: https://rrdwizard.appspot.com/index.php saadakseni komennon Round Robin -tietokannan luomiseksi. Sinun on suoritettava tämä vain kerran (jos saat sen oikein ensimmäisellä kerralla).

rrdtool luo TnHdatabase.rrd-aloita nyt-10s

--vaihe '1200'

'DS: Lämpötila: MITTARI: 1200: -20,5: 45,5'

'DS: Kosteus: MITTAUS: 1200: 0: 100.0'

"RRA: KESKI: 0,5: 1: 720"

"RRA: KESKI: 0,5: 3: 960"

"RRA: KESKI: 0,5: 18: 1600"

Lopuksi käytän crontab -merkintää käynnistääkseni TnHserverini joka päivä keskiyöllä. Käytän TnHserveriä normaalina käyttäjänä (eli EI pääkäyttäjänä) varotoimenpiteenä.

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

Voit tarkistaa, että TnHserver on käynnissä tekemällä

$ ps -itse | grep TnHserver

ja voit varmistaa, että se kuuntelee paketteja portissa 7777 tekemällä

$ netstat -anu

Aktiiviset Internet -yhteydet (palvelimet ja vakiintuneet)

Proto Recv-Q Send-Q Paikallinen osoite Ulkomainen osoitetila

udp 0 0 0.0.0.0:7777 0.0.0.0:*

Lopuksi CreateTnH_Graphs.sh.txt on esimerkki komentosarjasta kaavioiden luomiseksi. (Luon komentosarjat pääkäyttäjänä, et ehkä halua tehdä tätä.)

Hyvin yksinkertaisen verkkosivun avulla voit katsella kaavioita mistä tahansa kotiverkon selaimesta.