ESP-Now Home Weather Station: 9 vaihetta (kuvilla)
ESP-Now Home Weather Station: 9 vaihetta (kuvilla)
Anonim
ESP-Now Home Weather Station
ESP-Now Home Weather Station

Halusin saada kodin sääaseman jo jonkin aikaa ja sellaisen, jonka kaikki perheenjäsenet voisivat helposti tarkistaa lämpötilan ja kosteuden suhteen. Ulko -olosuhteiden seurannan lisäksi halusin seurata myös talon tiettyjä huoneita ja autotalliani. Tämä kertoisi meille, milloin on hyvä aika tuulettaa talo tai käyttää ilmankuivainta (täällä sataa paljon talven aikana). Luomani on ESP-Now-pohjainen anturijärjestelmä, joka raportoi paikalliselle verkkopalvelimelle, jonka kuka tahansa voi tarkistaa tietokoneelta tai puhelimelta. Kirjoitin puhelimelle yksinkertaisena Android -sovelluksena, jotta se olisi vieläkin helpompaa.

Vaihe 1: Suunnittelun yksityiskohdat

Suunnittelun yksityiskohdat
Suunnittelun yksityiskohdat

Halusin saada erilaisia anturiasemia, jotka voisin sijoittaa eri paikkoihin, ja pyytää heitä raportoimaan yhdelle pääasemalle (tai keskittimelle), joka tallentaa tiedot. Kokeiltuani erilaisia ideoita päätin käyttää Espressifin ESP-Now-protokollaa, koska se mahdollisti nopean viestinnän suoraan laitteiden välillä. Voit lukea hieman ESP-Nowista täältä ja tämä GitHub-repo oli suuri osa inspiraatiostani.

Ensimmäinen kuva esittää järjestelmän asettelua. Jokainen anturi raportoi mittauksistaan yhdyskäytävälaitteelle, joka välittää tiedot pääpalvelimelle kiinteällä langallisella sarjayhteydellä. Syynä tähän on se, että ESP-Now-protokolla ei voi olla aktiivinen samanaikaisesti WIFI-yhteyden kanssa. Jotta käyttäjä voisi käyttää verkkosivua, WIFI: n olisi oltava päällä koko ajan, ja tämä tekee sitten mahdottomaksi käyttää ESP-Now-viestintää samalla laitteella. Vaikka yhdyskäytävälaitteen on oltava Espressif-pohjainen laite (ESP-Now-yhteensopiva), pääpalvelin voi olla mikä tahansa laite, joka pystyy suorittamaan verkkosivun.

Jotkut anturiasemat kuluttavat paristot (tai aurinkoenergialla ladatut paristot) ja toiset yksinkertaisesti verkkovirralla. Halusin kuitenkin, että kaikki käyttävät mahdollisimman vähän virtaa, ja silloin ESP8266- ja ESP32 -laitteiden "syväunet" -ominaisuus on erittäin hyödyllinen. Anturiasemat heräävät ajoittain, mittaavat ja lähettävät ne yhdyskäytävälaitteeseen ja menevät takaisin nukkumaan jonkin ennalta ohjelmoidun ajan. Heidän herätysaika on vain noin 300 ms 5 minuutin välein (minun tapauksessani) vähentää virrankulutusta merkittävästi.

Vaihe 2: Anturit

Anturit
Anturit
Anturit
Anturit

Valittavana on erilaisia antureita ympäristöparametrien mittaamiseen. Päätin pysyä vain I2C -tiedonsiirtokykyisten antureiden kanssa, koska se mahdollisti nopeat mittaukset ja toimisi kaikilla laitteilla, joita minulla oli. Sen sijaan, että työskentelisin suoraan IC-laitteiden kanssa, etsin käyttövalmiita moduuleja, joissa oli samat nastat suunnittelun yksinkertaistamiseksi. Aloitin vain halutessani mitata lämpötilaa ja kosteutta ja valitsin siksi SI7021 -pohjaisen moduulin. Myöhemmin halusin anturin, joka voisi myös mitata painetta, ja päätin kokeilla BME280 -pohjaisia anturimoduuleja. Joissakin paikoissa halusin jopa seurata valotasoja ja BH1750 -moduuli oli ihanteellinen tähän erillisenä anturimoduulina. Ostin anturimoduulini ebaysta ja sain nämä moduulit:

  • BME280 (GY-BMP/E280), mittaa lämpötilan, kosteuden ja paineen
  • SI7021 (GY-21), mittaa lämpötilan ja kosteuden
  • BH1750 (GY-302), mittaa valoa

GY-BMP/E280-piirilevymoduuleista löytyy kaksi tyyliä. Molemmilla on sama nasta nastoille 1-4. Yhdessä moduulissa on kaksi lisätappia, CSB ja SDO. Nämä kaksi nastaa on liitetty valmiiksi moduulin 4-nastaiseen versioon. SDO -nastan taso määrittää I2C -osoitteen (Ground = oletus 0x76, VCC = 0x77). CSB -nasta on kytkettävä VCC: hen I2C -liitännän valitsemiseksi. Pidän parempana 4 -nastaista moduulia, koska se on käyttövalmis tarkoituksessani.

Yleensä nämä moduulit ovat erittäin käteviä käyttää, koska niissä on jo valmiiksi asennetut vetovastusvastukset tietoliikennelinjoille ja ne toimivat 3,3 V: n jännitteellä, joten ne ovat yhteensopivia ESP8266-pohjaisten levyjen kanssa. Huomaa, että näiden anturipiirien nastat eivät yleensä ole 5 V: n kestäviä, joten niiden liittäminen suoraan Arduino Unon kaltaiseen voi vahingoittaa niitä pysyvästi.

Vaihe 3: Anturiasemat

Anturiasemat
Anturiasemat

Kuten mainittiin, anturiasemat olisivat kaikki Espressif-laitteita, jotka käyttävät ESP-Now-viestintäprotokollaa. Aiemmista projekteista ja kokeilusta minulla oli käytettävissäni useita erilaisia laitteita suorittamaan ensimmäiset testit ja sisällyttämään ne lopulliseen suunnitteluun. Minulla oli seuraavat laitteet käsillä:

  • kaksi ESP-01-moduulia
  • kaksi Wemos D1 minikehityslevyä
  • yksi Lolin ESP8266 -kehityslevy
  • yksi ESP12E -sarjan WIFI -sarjalevy
  • yksi GOOUUU ESP32 -kortti (38 -nastainen kehityskortti)

Minulla oli myös Wemos D1 R2 -kehityskortti, mutta siinä oli ongelmia, jotka eivät antaneet sen herätä syvästä unesta ja porttityölaitteena se kaatui eikä käynnisty kunnolla. Korjasin sen myöhemmin ja siitä tuli osa Garage Door -avaajaprojektia. Jotta "syväunet" toimisi, ESP8266: n RST -nasta on liitettävä GPIO16 -nastaan, jotta uniajastin voi herättää laitteen. Ihannetapauksessa tämä liitäntä tulisi tehdä Schottky-diodilla (katodi GPIO16: een), jotta manuaalinen palautus USB-TLL-liitännän kautta ohjelmoinnin aikana toimii edelleen. Pienen arvon (300 ishin ohmi) vastus tai jopa suora johdinkytkentä voi kuitenkin silti onnistua.

ESP-01-moduulit eivät salli helppoa pääsyä GPIO16-nastaan, ja sinun on juotettava suoraan IC: hen. Tämä ei ole yksinkertainen tehtävä, enkä suosittele tätä kaikille. ESP12E -sarjan WIFI -sarjalevy oli hieman uutuus ja vaati melkoisia muutoksia, jotta se olisi hyödyllinen tarkoitukseeni. Helpoimmin käytetyt levyt olivat Wemos D1 mini -tyyppiset levyt ja Lolin -levy. ESP32 -laitteet eivät vaadi muutoksia, jotta syväunet toimivat. Andreas Spiessillä on mukava Instructable tästä.

Vaihe 4: ESP-01-anturiasema

ESP-01-anturiasema
ESP-01-anturiasema
ESP-01-anturiasema
ESP-01-anturiasema
ESP-01-anturiasema
ESP-01-anturiasema

Kaikille anturiasemille anturimoduulit on asennettu pystysuoraan vähentääkseen niihin kerääntyvän pölyn määrää. Kaikki eivät ole koteloissa, enkä saa asentaa niitä koteloihin. Syynä tähän on se, että laitteet voivat lämmetä ja vaikuttaa lämpötila- ja kosteuslukemiin, jos niitä ei tuuleteta riittävästi.

ESP-01-levyt ovat erittäin pienikokoisia ja niissä on vain vähän digitaalisia IO-nastoja, mutta se riittää I2C-liitäntään. Levyt vaativat kuitenkin hankalia muutoksia, jotta "syväunet" toimisivat. Esitetyssä kuvassa lanka juotettiin kulmatapista (GPIO16) otsikon RST -nastaan. Käytetty lanka on halkaisijaltaan 0,1 mm eristetty "korjaus" -lanka. Eristyspinnoite sulaa kuumennettaessa, joten se voidaan juottaa korjaamaan jälkiä jne. Piirilevyissä, eikä silti tarvitse huolehtia oikosulkujen syntymisestä, jos lanka koskettaa muita komponentteja. Sen koko vaikeuttaa työskentelyä ja juotin tämän langan paikalleen (harrastajan/postimerkkien keräilijän tyyliin) mikroskoopilla. Muista, että oikealla puolella olevassa otsikossa on 0,1 "(2,54 mm) nastaväli. Schottky -diodin asentaminen tähän ei olisi ollenkaan helppoa, joten päätin kokeilla johtoa yksin ja molemmat yksiköt ovat olleet käynnissä yli kuukausi ilman ongelmia.

Moduulit asennettiin kahdelle luomalleni prototyyppikortille. Yksi (#1) on ohjelmointikortti, joka mahdollistaa myös I2C -moduulien asentamisen ja testaamisen, kun taas toinen (#2) on I2C -laitteiden kehitys-/testikortti. Ensimmäistä levyä varten juotin yhteen vanhan USB -urosliittimen ja pienen piirilevyn, jotta yksikkö saa virtaa suoraan USB -seinäsovittimesta. Toisessa yksikössä on tavallinen tasavirtaliitin, joka on muokattu sopimaan ruuviliittimen liittimeen, ja se saa virtaa myös seinäadapterin kautta.

Kaaviossa näkyy, miten ne on kytketty ja miten ohjelmoija toimii. Minulla ei ole muita ESP-01-moduuleja, joten minulla ei ole ollut välitöntä tarvetta ohjelmoijalle. Jatkossa teen todennäköisesti piirilevyn heille. Molempiin levyihin on asennettu SI7021 -anturimoduuli, koska en ollut niin kiinnostunut painemittauksista näissä paikoissa.

Vaihe 5: ESP 12E -sarjan WIFI -sarja -anturiasema

ESP 12E -sarjan WIFI -sarja -anturiasema
ESP 12E -sarjan WIFI -sarja -anturiasema
ESP 12E -sarjan WIFI -sarja -anturiasema
ESP 12E -sarjan WIFI -sarja -anturiasema

ESP12E Serial WIFI Kit -korttia ei ollut tarkoitettu niin paljon kehittämiseen kuin sen esittelyyn, mitä tällä laitteella voitaisiin tehdä. Ostin sen kauan sitten oppiakseni hieman ESP8266 -ohjelmoinnista ja päätin lopulta antaa sille uuden käytön. Poistin kaikki esittelyä varten asennetut LEDit ja lisäsin USB -ohjelmointiotsikon sekä käyttämilleni moduuleille sopivan I2C -otsikon. Siinä oli CdS -valokuvavastus kytketty analogiseen tulonastapaan ja päätin jättää sen sinne. Tämä yksikkö aikoi valvoa autotallini työpajaa ja sillä oleva valokenno riitti kertomaan minulle, oliko valot jätetty vahingossa päälle. Valonmittausta varten normalisoin lukemat, jotta saan prosenttiosuuden ja mikä tahansa yli”5” yöllä tarkoitti, että valot jätettiin päälle tai talon ovi ei ollut kunnolla kiinni. RST- ja GPIO16 -nastat on selvästi merkitty piirilevylle ja niitä yhdistävä Schottky -diodi on asennettu piirilevyn alapuolelle. Se saa virtansa USB-sarjalevyltä, joka on kytketty suoraan USB-seinälaturiin. Minulla on lisävarusteita näistä USB-sarjalevyistä, enkä tarvitse tätä nyt.

En tehnyt kaaviota tälle levylle enkä yleensä suosittele sellaisen ostamista käytettäväksi tähän tarkoitukseen. Wemos D1 Mini -levyt ovat paljon sopivampia ja niistä keskustellaan seuraavassa. Vaikka sinulla on jokin näistä ja tarvitset neuvoja, autan mielelläni.

Vaihe 6: D1 -anturiasemat

D1 -anturiasemat
D1 -anturiasemat
D1 -anturiasemat
D1 -anturiasemat
D1 -anturiasemat
D1 -anturiasemat

Wemos D1 Mini -tyyppiset ESP8266 -kehityskortit ovat suosituimpia käyttöni, ja jos minun olisi tehtävä se uudelleen, käyttäisin vain näitä. Niissä on suuri määrä helppokäyttöisiä IO -nastoja, ne voidaan ohjelmoida suoraan Arduino IDE: n kautta ja ne ovat edelleen melko pienikokoisia. Näiden levyjen D0 -nasta on GPIO16, ja Schottky -diodin liittäminen on melko helppoa. Kaaviossa näkyy, miten nämä levyt on kytketty ja kumpikin käyttää BME2808 -anturimoduulia.

Yksi kahdesta levystä käytetään ulkoilman seurantaan ja toimii aurinkokennolla. 165 mm x 135 mm (6 V, 3,5 W) aurinkopaneeli on liitetty TP4056-litiumioniakun latausmoduuliin (katso aurinkokäyttöisen akun anturiaseman asennuskaavio). Tässä latausmoduulissa (03962A) on akun suojapiiri, joka on välttämätön, jos akku (pakkaus) ei sisällä sitä. Li-ion-akku on kierrätetty vanhasta kannettavan tietokoneen akusta, ja se voi silti pitää riittävän latauksen D1 Mini -kortin käyttämiseen, etenkin kun syvä lepotila on käytössä. Levy sijoitettiin muovikoteloon pitämään se jonkin verran turvassa elementteiltä. Kuitenkin, jotta sisätila altistuisi ulkolämpötilalle ja kosteudelle, porattiin kaksi halkaisijaltaan 25 mm: n reikää vastakkaisille puolille ja peitettiin (sisältä) mustalla maisemakankaalla. Kangas on suunniteltu sallimaan kosteuden tunkeutuminen ja siksi kosteus voidaan mitata. Kotelon toiseen päähän porattiin pieni reikä ja asennettiin kirkas muovi -ikkuna. Tähän paikkaan sijoitettiin BH1750 -valoanturimoduuli. Koko yksikkö sijoitetaan ulkona varjoon (ei suoraan auringonpaisteeseen) valotunnistimen ollessa ulospäin. Se on toiminut aurinkokäyttöisellä akulla lähes 4 viikkoa täällä sateisessa/pilvisessä talvisäässä.

Vaihe 7: Yhdyskäytävä ja verkkopalvelin

Yhdyskäytävä ja verkkopalvelin
Yhdyskäytävä ja verkkopalvelin
Yhdyskäytävä ja verkkopalvelin
Yhdyskäytävä ja verkkopalvelin
Yhdyskäytävä ja verkkopalvelin
Yhdyskäytävä ja verkkopalvelin

ESP-Now Gateway -laitteessa käytettiin Lolin NodeMCU V3 (ESP8266) -korttia ja Web-palvelimessa ESP32 (GOOUUU-kortti). Lähes mikä tahansa ESP8266 tai jopa ESP32 -levy olisi voinut toimia yhdyskäytävälaitteena, tämä oli yksinkertaisesti levy, joka oli "jäänyt" sen jälkeen, kun käytin kaikkia muita levyjä, joita minulla oli.

Käytin ESP32 -korttia, koska tarvitsen levyn, jolla on hieman enemmän laskentatehoa tietojen keräämiseen, lajitteluun, tallentamiseen tallennustilaan ja verkkopalvelimen suorittamiseen. Tulevaisuudessa sillä voi olla myös oma anturi ja paikallinen (OLED) näyttö. Tallennukseen käytettiin SD -korttia mukautetun sovittimen kanssa. Käytin tavallista microSD -SD -korttisovitinta ja juotin 7 -nastaisen urospuolisen (0,1 tuuman) otsikon päällystettyihin kontakteihin. Noudatin tämän GitHubin neuvoja liitosten tekemiseksi.

Prototyyppiasetukset (Dupont -johdoilla) eivät sisällä anturimoduulia, mutta suunnittelemani viimeistelty piirilevy mahdollistaa yhden sekä pienen OLED -näytön. Yksityiskohdat PCB: n suunnittelusta ovat osa eri Instructable -ohjelmaa.

Vaihe 8: Ohjelmisto

Ohjelmisto
Ohjelmisto

ESP8266 (ESP-NOW) -laitteet

Kaikkien laitteiden ohjelmisto on kirjoitettu Arduino IDE: llä (versio 1.87). Jokainen anturiasema käyttää olennaisesti samaa koodia. Ne eroavat vain siitä, mitä tappeja käytetään I2C -tiedonsiirtoon ja mihin anturimoduuliin ne on kytketty. Mikä tärkeintä, ne lähettävät saman mittaustietopaketin ESP-Now Gateway -asemalle riippumatta siitä, onko niillä sama anturi. Tämä tarkoittaa sitä, että jotkut anturiasemat täyttävät paineen ja valon tason mittaukset, jos niillä ei ole antureita todellisten arvojen tuottamiseksi. Kunkin aseman ja yhdyskäytävän koodi on mukautettu Anthony Elderin esimerkeistä tässä GitHubissa.

Yhdyskäytävälaitteen koodi käytti SoftwareSerialia kommunikoidakseen verkkopalvelimen kanssa, koska ESP8266: ssa on vain yksi täysin toimiva laitteisto UART. Suurimmalla 9600 baudinopeudella ajaminen vaikuttaa melko luotettavalta ja riittää näiden suhteellisen pienien datapakettien lähettämiseen. Yhdyskäytävälaitteeseen on myös ohjelmoitu yksityinen MAC -osoite. Syynä tähän on, että jos se on vaihdettava, anturiasemia ei tarvitse ohjelmoida uudelleen uudella vastaanottajan MAC-osoitteella.

ESP32 (verkkopalvelin)

Jokainen anturiasema lähettää datapaketin yhdyskäytävälaitteelle, joka välittää sen edelleen verkkopalvelimelle. Datapaketin ohella lähetetään myös anturiaseman MAC -osoite kunkin aseman tunnistamiseksi. Verkkopalvelimessa on "hakutaulukko" kunkin anturin sijainnin määrittämiseksi ja lajittelee tiedot sen mukaan. Mittausten välinen aikaväli asetettiin 5 minuutiksi plus satunnaiskertoimella, jotta vältettäisiin anturien "törmääminen" toisiinsa lähetettäessä porttitielaitteeseen.

Kodin WIFI -reititin asetettiin jakamaan kiinteä IP -osoite verkkopalvelimelle, kun se muodostaa yhteyden WIFI -verkkoon. Minun kohdalla se oli 192.168.1.111. Tämän osoitteen kirjoittaminen mihin tahansa selaimeen muodostaa yhteyden sääaseman verkkopalvelimeen niin kauan kuin käyttäjä on kotiverkon WIFI -alueella (ja muodostaa yhteyden). Kun käyttäjä muodostaa yhteyden verkkosivulle, verkkopalvelin vastaa mittaustaulukon kanssa ja sisältää kunkin anturin viimeisen mittauksen ajan. Jos anturiasema ei reagoi, tämä näkyy taulukosta, jos lukema on yli 5-6 minuuttia vanha.

Tiedot tallennetaan yksittäisiin tekstitiedostoihin SD -kortille, ja ne voidaan myös ladata verkkosivulta. Se voidaan tuoda Exceliin tai mihin tahansa muuhun sovellukseen tietojen piirtämiseksi

Android -sovellus

Helpottaakseni paikallisten säätietojen tarkastelemista älypuhelimella, loin suhteellisen Android -sovelluksen Android Studion avulla. Se löytyy GitHub -sivultani täältä. Se käyttää webview -luokkaa verkkosivun lataamiseen palvelimelta ja sellaisenaan rajoitettuina toimintoina. Se ei pysty lataamaan datatiedostoja, eikä minulla ollut tarvetta puhelimessani oleville.

Vaihe 9: Tulokset

Tulokset
Tulokset

Lopuksi tässä muutamia tuloksia kotisääasemalta. Tiedot ladattiin kannettavalle tietokoneelle ja piirrettiin Matlabiin. Liitin Matlab -skriptini ja voit käyttää niitä myös GNU Octavessa. Ulkoanturi on toiminut aurinkopaneelilla ladatulla akullaan lähes 4 viikkoa, ja meillä on harvoin aurinkoa tähän aikaan vuodesta. Toistaiseksi kaikki toimii hyvin ja jokainen perheenjäsen voi itse katsoa säätä sen sijaan, että kysyisi minulta nyt!