„ESP-Now Home Weather Station“: 9 žingsniai (su nuotraukomis)
„ESP-Now Home Weather Station“: 9 žingsniai (su nuotraukomis)
Anonim
„ESP-Now Home Weather Station“
„ESP-Now Home Weather Station“

Jau kurį laiką norėjau turėti namų orų stotį, kurią visi šeimos nariai galėtų lengvai patikrinti dėl temperatūros ir drėgmės. Be išorinių sąlygų stebėjimo, norėjau stebėti ir konkrečius namo kambarius bei savo garažo dirbtuves. Tai mums praneštų, kada tinkamas laikas išvėdinti namus ar paleisti sausintuvą (žiemą čia daug lyja). Aš sukūriau ESP-Now pagrįstą jutiklių sistemą, kuri praneša vietiniam žiniatinklio serveriui, kurį kiekvienas gali patikrinti iš savo kompiuterio ar telefono. Telefonui parašiau kaip paprastą „Android“programą, kad tai būtų dar lengviau.

1 žingsnis: dizaino detalės

Dizaino detalės
Dizaino detalės

Norėjau turėti įvairias jutiklių stotis, kurias galėčiau patalpinti skirtingose vietose, ir paprašyti, kad jos praneštų vienai pagrindinei stočiai (arba centrui), kuri išsaugotų informaciją. Išbandęs įvairias idėjas, nusprendžiau naudoti „Espressif“ESP-Now protokolą, nes tai leido greitai bendrauti tiesiogiai tarp įrenginių. Čia galite šiek tiek paskaityti apie ESP-Now ir ši „GitHub“repetacija buvo puiki mano įkvėpimo dalis.

Pirmajame paveikslėlyje parodytas sistemos išdėstymas. Kiekvienas jutiklis praneša apie savo matavimus šliuzo įrenginiui, kuris perduoda duomenis pagrindiniam serveriui laidiniu nuosekliu ryšiu. Taip yra todėl, kad ESP-Now protokolas negali būti aktyvus tuo pačiu metu kaip WIFI ryšys. Kad vartotojas galėtų pasiekti tinklalapį, WIFI turi būti įjungtas visą laiką, todėl neįmanoma naudoti ESP-Now ryšio tame pačiame įrenginyje. Nors šliuzo įrenginys turi būti „Espressif“pagrįstas įrenginys (galintis naudoti ESP-Now), pagrindinis serveris gali būti bet koks įrenginys, galintis paleisti tinklalapį.

Kai kurios jutiklių stotys išsikrauna iš baterijų (arba saulės baterijų), o kitos tiesiog turi maitinimą. Tačiau norėjau, kad visi sunaudotų kuo mažiau energijos ir būtent čia yra labai naudinga „deepsleep“funkcija, prieinama ESP8266 ir ESP32 įrenginiams. Jutiklių stotys periodiškai atsibunda, atlieka matavimus ir siunčia juos į šliuzo įrenginį ir vėl užmiega tam tikrą iš anksto užprogramuotą laiką. Jų pažadinimo laikotarpis yra tik apie 300 ms kas 5 minutes (mano atveju) žymiai sumažina jų energijos suvartojimą.

2 žingsnis: jutikliai

Jutikliai
Jutikliai
Jutikliai
Jutikliai

Aplinkos parametrams matuoti galima rinktis iš įvairių jutiklių. Aš nusprendžiau pasilikti tik su I2C ryšį palaikančiais jutikliais, nes tai leido greitai išmatuoti ir veiktų bet kuriame mano turimame įrenginyje. Užuot tiesiogiai dirbęs su IC, aš ieškojau paruoštų naudoti modulių, turinčių tuos pačius kaiščius, kad supaprastintų savo dizainą. Pradėjau tik norėdamas matuoti temperatūrą ir drėgmę, todėl pasirinkau modulį SI7021. Vėliau norėjau jutiklio, galinčio išmatuoti slėgį, ir nusprendžiau išbandyti BME280 pagrindu pagamintus jutiklių modulius. Kai kuriose vietose aš net norėjau stebėti šviesos lygį, o BH1750 modulis buvo idealus tam kaip atskiras jutiklio modulis. Aš nusipirkau savo jutiklių modulius iš „ebay“ir gavau šiuos modulius:

  • BME280 (GY-BMP/E280), matuoja temperatūrą, drėgmę ir slėgį
  • SI7021 (GY-21), matuoja temperatūrą ir drėgmę
  • BH1750 (GY-302), matuoja šviesą

Galima rasti dviejų tipų GY-BMP/E280 PCB modulius. Abu turi tą patį kaištį 1–4 kaiščiams. Viename modulyje yra du papildomi kaiščiai, CSB ir SDO. Šie du kaiščiai yra iš anksto prijungti prie 4 kontaktų modulio versijos. SDO kaiščio lygis nustato I2C adresą (įžeminimas = numatytasis 0x76, VCC = 0x77). Norėdami pasirinkti I2C sąsają, CSB kaištis turi būti prijungtas prie VCC. Man labiau patinka 4 kontaktų modulis, nes jis yra paruoštas naudoti pagal mano paskirtį.

Apskritai, šiuos modulius labai patogu naudoti, nes jie jau turi traukimo rezistorius, sumontuotus ryšių linijoms, ir visi veikia 3.3 V įtampa, todėl yra suderinami su plokštėmis, pagrįstomis ESP8266. Atminkite, kad šių jutiklių IC kaiščiai paprastai netoleruoja 5 V, todėl tiesiogiai juos sujungus su „Arduino Uno“, jie gali būti visam laikui sugadinti.

3 žingsnis: jutiklių stotys

Jutiklių stotys
Jutiklių stotys

Kaip minėta, visos jutiklių stotys būtų „Espressif“įrenginiai, naudojantys ESP-Now ryšio protokolą. Iš ankstesnių projektų ir eksperimentų turėjau kelis skirtingus prietaisus, kad galėčiau atlikti pradinius bandymus ir įtraukti juos į galutinį projektą. Po ranka turėjau šiuos įrenginius:

  • du ESP-01 moduliai
  • dvi „Wemos D1 mini“kūrimo plokštės
  • viena „Lolin ESP8266“kūrimo plokštė
  • viena ESP12E serijos WIFI rinkinio plokštė
  • viena GOOUUU ESP32 plokštė (38 kontaktų kūrimo plokštė)

Aš taip pat turėjau „Wemos D1 R2“kūrimo plokštę, tačiau su ja buvo problemų, kurios neleido jai pabusti iš gilaus miego, o kaip vartų įrenginys jis sudužo ir netinkamai paleidžiamas iš naujo. Vėliau jį suremontavau ir jis tapo „Garage Door“atidarymo projekto dalimi. Kad „deepsleep“veiktų, ESP8266 RST kaištis turi būti prijungtas prie GPIO16 kaiščio, kad miego laikmatis galėtų pažadinti įrenginį. Idealiu atveju šį ryšį reikia atlikti naudojant Schottky diodą (katodą prie GPIO16), kad programavimo metu rankinis atstatymas per USB-TLL jungtį vis tiek veiktų. Tačiau mažos vertės (300 omų omų) rezistorius ar net tiesioginis laidų prijungimas vis tiek gali būti sėkmingas.

ESP-01 moduliai neleidžia lengvai pasiekti GPIO16 kaiščio, o lituoti reikia tiesiai prie IC. Tai nėra paprasta užduotis ir nerekomenduočiau to visiems. ESP12E serijos WIFI rinkinio plokštė buvo šiek tiek naujovė ir reikėjo nemažai pakeitimų, kad ji būtų naudinga mano tikslui. Lengviausia naudoti „Wemos D1 mini“tipo plokštes ir „Lolin“plokštę. ESP32 įrenginiams nereikia jokių pakeitimų, kad veiktų miegas. Andreasas Spiesas turi gražią instrukciją šiuo klausimu.

4 žingsnis: ESP-01 jutiklių stotis

ESP-01 jutiklių stotis
ESP-01 jutiklių stotis
ESP-01 jutiklių stotis
ESP-01 jutiklių stotis
ESP-01 jutiklių stotis
ESP-01 jutiklių stotis

Visose jutiklių stotyse jutiklių moduliai yra sumontuoti vertikaliai, kad sumažėtų ant jų susikaupusių dulkių kiekis. Ne visi yra aptvaruose ir aš negaliu jų montuoti į aptvarus. Taip yra todėl, kad prietaisai gali sušilti ir paveikti temperatūros ir drėgmės rodmenis nepakankamai vėdinant.

ESP-01 plokštės yra labai kompaktiškos ir turi mažai skaitmeninių IO kaiščių, su kuriais galima dirbti, tačiau to pakanka I2C sąsajai. Tačiau plokštėms reikia sudėtingų pakeitimų, kad „gilus miegas“veiktų. Parodytoje nuotraukoje viela buvo lituojama nuo kampinio kaiščio (GPIO16) prie RST kaiščio antraštėje. Mano naudojama viela yra 0,1 mm skersmens izoliuota „remonto“viela. Šildant izoliacinė danga ištirpsta, todėl ją galima lituoti, kad būtų pataisytos pėdsakai ir tt PCB, ir vis tiek nesijaudinkite, kad nesusidarys šortai, kur viela liečiasi su kitais komponentais. Dėl jo dydžio sunku dirbti, ir aš suvirinau šią vielą po (mėgėjų/antspaudų kolekcionierių stiliaus) mikroskopu. Turėkite omenyje, kad dešinėje pusėje esančioje antraštėje yra 0,1 colio (2,54 mm) kaiščių tarpas. Įdiegti „Schottky“diodą čia būtų visai nelengva, todėl nusprendžiau tiesiog išbandyti laidą atskirai ir abu įrenginiai veikė ilgiau mėnesį be jokių problemų.

Moduliai buvo sumontuoti ant dviejų mano sukurtų prototipinių plokščių. Viena (#1) yra programavimo plokštė, kuri taip pat leidžia įdiegti ir išbandyti I2C modulius, o kita (#2) yra I2C įrenginių kūrimo/bandymo plokštė. Pirmai plokštei aš lituodavau seną USB vyrišką jungtį ir mažą PCB, kad įrenginys būtų maitinamas tiesiai iš USB sieninio adapterio. Kitas įrenginys turi įprastą nuolatinės srovės lizdą, modifikuotą taip, kad tilptų į varžto gnybtų galvutę, ir maitinamas per sieninį adapterį.

Schemoje parodyta, kaip jie prijungti ir kaip veikia programuotojas. Aš neturiu jokių kitų ESP-01 modulių, todėl neturėjau tiesioginio programuotojo poreikio. Ateityje greičiausiai padarysiu jiems PCB. Abiejose šiose plokštėse yra įdiegtas jutiklio modulis SI7021, nes manęs nedomino slėgio matavimai tose vietose.

5 žingsnis: ESP 12E serijos WIFI rinkinio jutiklių stotis

ESP 12E serijinė WIFI rinkinio jutiklių stotis
ESP 12E serijinė WIFI rinkinio jutiklių stotis
ESP 12E serijinė WIFI rinkinio jutiklių stotis
ESP 12E serijinė WIFI rinkinio jutiklių stotis

„ESP12E Serial WIFI Kit“plokštė nebuvo skirta tiek plėtrai, kiek parodyti, ką galima padaryti naudojant šį įrenginį. Aš nusipirkau jį seniai, norėdamas šiek tiek sužinoti apie ESP8266 programavimą, ir galiausiai nusprendžiau jį šiek tiek panaudoti. Pašalinau visus šviesos diodus, kurie buvo įdiegti demonstracijoms, ir pridėjau USB programavimo antraštę bei I2C antraštę, tinkančią mano naudojamiems moduliams. Prie analoginio įvesties kaiščio buvo prijungtas CdS foto rezistorius, ir aš nusprendžiau jį palikti. Šis įrenginys ketino stebėti mano garažo dirbtuves, o jo turėto foto jutiklio pakako, kad praneščiau, ar netyčia nebuvo įjungtos šviesos. Šviesos matavimui normalizavau rodmenis, kad gaučiau procentinę išvestį, o naktį daugiau nei „5“reikštų, kad lemputės buvo įjungtos arba namo durys nebuvo tinkamai uždarytos. RST ir GPIO16 kaiščiai yra aiškiai pažymėti ant PCB, o juos jungiantis Schottky diodas buvo sumontuotas apatinėje PCB pusėje. Jis maitinamas per USB nuosekliąją plokštę, kuri yra tiesiogiai prijungta prie USB sieninio įkroviklio. Turiu šių USB serijinių plokščių priedų ir man to dabar nereikia.

Aš nesudariau šios lentos schemos ir apskritai nerekomenduoju jos pirkti šiam tikslui. „Wemos D1 Mini“plokštės yra daug tinkamesnės ir bus aptartos toliau. Nors jei turite vieną iš šių ir jums reikia patarimo, aš mielai jums padėsiu.

6 žingsnis: D1 mini jutiklių stotys

D1 mini jutiklių stotys
D1 mini jutiklių stotys
D1 mini jutiklių stotys
D1 mini jutiklių stotys
D1 mini jutiklių stotys
D1 mini jutiklių stotys

„Wemos D1 Mini“tipo ESP8266 kūrimo plokštės yra mano pageidaujamos naudoti ir, jei turėčiau tai padaryti, aš tiesiog naudočiau šias. Jie turi daug prieinamų IO kaiščių, gali būti tiesiogiai užprogramuoti per „Arduino IDE“ir vis dar yra gana kompaktiški. D0 kaištis yra GPIO16 šiose plokštėse, o prijungti Schottky diodą yra gana paprasta. Schemoje parodyta, kaip aš turiu prijungti šias plokštes ir abi naudoja BME2808 jutiklio modulį.

Viena iš dviejų plokščių naudojama lauko orui stebėti ir veikia iš saulės energijos baterijos. 165 mm x 135 mm (6 V, 3,5 W) saulės kolektorius prijungtas prie TP4056 ličio jonų akumuliatoriaus įkrovimo modulio (žr. Saulės baterijų maitinimo jutiklio stoties nustatymo schemą). Šiame konkrečiame įkrovimo modulyje (03962A) yra akumuliatoriaus apsaugos grandinė, kuri yra būtina, jei akumuliatoriuje (pakuotėje) jo nėra. Ličio jonų akumuliatorius buvo perdirbtas iš seno nešiojamojo kompiuterio akumuliatoriaus ir vis tiek gali įkrauti pakankamai, kad veiktų „D1 Mini“plokštė, ypač įjungus gilų miegą. Lenta buvo įdėta į plastikinį gaubtą, kad būtų šiek tiek apsaugota nuo elementų. Tačiau norint, kad interjeras būtų veikiamas lauko temperatūros ir drėgmės, priešingose pusėse buvo išgręžtos dvi 25 mm skersmens skylės ir padengtos (iš vidaus) juodu kraštovaizdžio audiniu. Audinys sukurtas taip, kad drėgmė galėtų prasiskverbti, todėl galima išmatuoti drėgmę. Viename gaubto gale buvo išgręžta nedidelė skylė ir sumontuotas skaidrus plastikinis langas. Čia buvo pastatytas šviesos jutiklio modulis BH1750. Visas įrenginys yra lauke, pavėsyje (ne tiesioginėje saulėje), šviesos jutiklis nukreiptas į atvirą pusę. Lietingu/debesuotu žiemos oru čia beveik 4 savaites veikia saulės baterija.

7 žingsnis: Vartai ir interneto serveris

Vartai ir interneto serveris
Vartai ir interneto serveris
Vartai ir interneto serveris
Vartai ir interneto serveris
Vartai ir interneto serveris
Vartai ir interneto serveris

„Lolin NodeMCU V3“(ESP8266) plokštė buvo naudojama „ESP-Now Gateway“įrenginiui, o „ESP32“(„GOOUUU“plokštė)-interneto serveriui. Beveik bet kuri ESP8266 ar net ESP32 plokštė galėjo būti naudojama kaip šliuzo įtaisas, tai buvo tik ta plokštė, kurią „palikau“, kai panaudojau visas kitas turėtas plokštes.

Aš naudojau ESP32 plokštę, nes man reikia plokštės su šiek tiek daugiau skaičiavimo galios, kad galėčiau rinkti duomenis, rūšiuoti, išsaugoti juos saugykloje ir paleisti žiniatinklio serverį. Ateityje jis taip pat gali turėti savo jutiklį ir vietinį (OLED) ekraną. Saugojimui buvo naudojama SD kortelė su pritaikytu adapteriu. Naudojau įprastą „microSD“SD kortelės adapterį ir lituodavau 7 kontaktų (0,1 colio) antraštę prie padengtų kontaktų. Vykdžiau šio „GitHub“patarimus, kad galėčiau prisijungti.

Į prototipų sąranką (naudojant „Dupont“laidus) nėra jutiklio modulio, tačiau mano sukurta galutinė PCB leidžia tiek vieną, tiek mažą OLED ekraną. Išsami informacija apie tai, kaip aš sukūriau tą PCB, yra kito „Instructable“dalis.

8 žingsnis: programinė įranga

Programinė įranga
Programinė įranga

ESP8266 (ESP-NOW) įrenginiai

Visų įrenginių programinė įranga buvo parašyta naudojant „Arduino IDE“(v1.87). Kiekviena jutiklių stotis iš esmės vykdo tą patį kodą. Jie skiriasi tik tuo, kokie kaiščiai naudojami I2C ryšiams ir prie kurio jutiklio modulio jie yra prijungti. Svarbiausia, kad jie siunčia identiškus matavimo duomenų paketus į ESP-Now Gateway stotį, nepaisant to, ar jie turi tą patį jutiklį. Tai reiškia, kad kai kurios jutiklių stotys užpildys netikras slėgio ir šviesos lygio matavimo vertes, jei jose nėra jutiklių, kurie suteiktų realias vertes. Kiekvienos stoties ir šliuzo kodas buvo pritaikytas pagal Anthony Elderio pavyzdžius šiame „GitHub“.

Šliuzo įrenginio kodas naudojo „SoftwareSerial“, kad galėtų bendrauti su žiniatinklio serveriu, nes ESP8266 turi tik vieną visiškai veikiančią aparatinę UART. Vykdant maksimalų 9600 duomenų perdavimo spartą, jis atrodo gana patikimas ir yra daugiau nei pakankamas siunčiant šiuos palyginti mažus duomenų paketus. Šliuzo įrenginys taip pat užprogramuotas privačiu MAC adresu. To priežastis yra ta, kad jei ją reikia pakeisti, ne visos jutiklių stotys turi būti perprogramuotos naudojant naują gavėjo MAC adresą.

ESP32 (žiniatinklio serveris)

Kiekviena jutiklių stotis siunčia savo duomenų paketą į šliuzo įrenginį, kuris persiunčia jį žiniatinklio serveriui. Kartu su duomenų paketu siunčiamas ir jutiklio stoties MAC adresas kiekvienai stočiai identifikuoti. Žiniatinklio serveryje yra „paieškos“lentelė, skirta nustatyti kiekvieno jutiklio vietą, ir atitinkamai surūšiuoja duomenis. Laiko intervalas tarp matavimų buvo nustatytas į 5 min ir atsitiktinį koeficientą, kad būtų išvengta jutiklių „susidūrimo“siunčiant į vartų kelio įrenginį.

Namų WIFI maršrutizatorius buvo nustatytas taip, kad žiniatinklio serveriui priskirtų fiksuotą IP adresą, kai jis prisijungia prie WIFI. Mano atveju tai buvo 192.168.1.111. Įvedę tą adresą bet kurioje naršyklėje, prisijungsite prie orų stoties žiniatinklio serverio tol, kol vartotojas bus namų tinklo WIFI diapazone (ir prisijungs prie jo). Kai vartotojas prisijungia prie tinklalapio, žiniatinklio serveris pateikia matavimų lentelę ir įtraukia kiekvieno jutiklio paskutinio matavimo laiką. Tokiu būdu, jei jutiklio stotis nereaguoja, tai galima pamatyti iš lentelės, jei rodinys yra senesnis nei 5–6 min.

Duomenys išsaugomi atskiruose tekstiniuose failuose SD kortelėje, juos taip pat galima atsisiųsti iš tinklalapio. Jį galima importuoti į „Excel“ar bet kurią kitą duomenų braižymo programą

„Android“programa

Kad būtų lengviau peržiūrėti vietinę orų informaciją išmaniajame telefone, sukūriau palyginti „Android“programą naudodami „Android Studio“. Tai galima rasti mano „GitHub“puslapyje čia. Ji naudoja žiniatinklio peržiūros klasę tinklalapiui įkelti iš serverio ir yra ribotos funkcijos. Jis negali atsisiųsti duomenų failų, ir man nereikėjo tų, kurie yra mano telefone.

9 žingsnis: Rezultatai

Rezultatai
Rezultatai

Galiausiai, čia yra keletas mano namų oro stoties rezultatų. Duomenys buvo atsisiųsti į nešiojamąjį kompiuterį ir nubraižyti „Matlab“. Pridėjau savo „Matlab“scenarijus ir juos taip pat galite paleisti „GNU Octave“. Lauko jutiklis savo saulės baterija veikia beveik 4 savaites, o šiuo metų laiku saulė būna retai. Kol kas viskas veikia gerai ir kiekvienas šeimos narys gali pats ieškoti orų, o ne klausti manęs dabar!