ESP-Now koduilmajaam: 9 sammu (koos piltidega)
ESP-Now koduilmajaam: 9 sammu (koos piltidega)
Anonim
ESP-Now koduilmajaam
ESP-Now koduilmajaam

Tahtsin juba mõnda aega omada kodust ilmajaama, mida kõik pereliikmed saaksid hõlpsalt kontrollida temperatuuri ja niiskuse osas. Lisaks välitingimuste jälgimisele tahtsin jälgida ka konkreetseid ruume majas ja oma garaažitöökoda. See annaks meile teada, millal on õige aeg maja õhutada või õhukuivatit käitada (siin sajab talvel palju vihma). Ma lõin ESP-Now-põhise andurisüsteemi, mis annab aru kohalikule veebiserverile, mida igaüks saab oma arvutist või telefonist kontrollida. Telefoni jaoks kirjutasin selle lihtsa Android -rakendusena, et seda veelgi lihtsamaks muuta.

Samm: disaini üksikasjad

Disaini üksikasjad
Disaini üksikasjad

Ma tahtsin, et mul oleks erinevaid andurijaamu, mida saaksin paigutada erinevatesse kohtadesse ja lasta neil teatada ühele peajaamale (või jaoturile), mis teabe salvestaks. Pärast erinevate ideede proovimist otsustasin kasutada Espressifi ESP-Now protokolli, kuna see võimaldas kiiret suhtlust otse seadmete vahel. ESP-Now kohta saate natuke lugeda siit ja see GitHubi repo oli suurepärane osa minu inspiratsioonist.

Esimene pilt näitab süsteemi paigutust. Iga andur edastab oma mõõtmised lüüsiseadmele, mis edastab andmed kõvaketiga jadaühenduse kaudu põhiserverile. Selle põhjuseks on asjaolu, et ESP-Now protokoll ei saa olla aktiivne samaaegselt WIFI-ühendusega. Selleks, et kasutaja saaks veebilehele juurde pääseda, peaks WIFI olema kogu aeg sisse lülitatud ja see muudab võimatuks ESP-Now side kasutamise samas seadmes. Kui lüüsiseade peab olema Espressifil põhinev seade (võimeline ESP-Now jaoks), võib põhiserveriks olla mis tahes seade, mis on võimeline veebilehte käitama.

Mõned andurijaamad saaksid tühjaks patareid (või päikeseenergiaga laetud akud) ja teistel oleks lihtsalt võrgutoide. Kuid ma tahtsin, et kõik kasutaksid võimalikult vähe energiat ja just seal on ESP8266 ja ESP32 seadmete jaoks saadaval olev "deepsleep" funktsioon äärmiselt kasulik. Andurijaamad ärkavad perioodiliselt, võtavad mõõtmisi ja saadavad need lüüsiseadmesse ning lähevad mõneks eelprogrammeeritud ajaks tagasi magama. Nende ärkamisperiood, mis on vaid umbes 300 ms iga 5 minuti järel (minu puhul), vähendab oluliselt nende energiatarbimist.

Samm: andurid

Andurid
Andurid
Andurid
Andurid

Keskkonnaparameetrite mõõtmiseks on valida erinevate andurite vahel. Otsustasin jääda ainult I2C -sidet võimaldavate andurite juurde, kuna see võimaldas kiireid mõõtmisi ja toimiks kõigi minu seadmetega. Otseselt IC-dega töötamise asemel otsisin oma disaini lihtsustamiseks kasutusvalmis mooduleid, millel olid samad pistikud. Alustasin soovist mõõta ainult temperatuuri ja niiskust ning seetõttu valisin SI7021 -põhise mooduli. Hiljem tahtsin andurit, mis suudaks samuti rõhku mõõta, ja otsustasin proovida BME280 -põhiseid andurimooduleid. Mõnes kohas tahtsin isegi valguse taset jälgida ja BH1750 moodul sobis selle jaoks eraldi andurimoodulina ideaalselt. Ostsin oma andurimoodulid ebayst ja sain need moodulid:

  • BME280 (GY-BMP/E280), mõõdab temperatuuri, niiskust ja rõhku
  • SI7021 (GY-21), mõõdab temperatuuri ja niiskust
  • BH1750 (GY-302), mõõdab valgust

GY-BMP/E280 PCB moodulitest võib leida kahte stiili. Mõlemal on tihvtide 1 kuni 4 jaoks sama tihvt. Ühel moodulil on kaks täiendavat tihvti, CSB ja SDO. Need kaks tihvti on mooduli 4-kontaktilise versiooniga eelnevalt ühendatud. SDO tihvti tase määrab I2C aadressi (Ground = vaikimisi 0x76, VCC = 0x77). I2C liidese valimiseks peab CSB tihvt olema ühendatud VCC -ga. Ma eelistan 4 -kontaktilist moodulit, kuna see on minu eesmärgil kasutamiseks valmis.

Üldiselt on neid mooduleid väga mugav kasutada, kuna neil on juba kommunikatsiooniliinidele paigaldatud tõmbetakistid ja kõik töötavad 3,3 V toitel, seega ühilduvad ESP8266-põhiste tahvlitega. Pange tähele, et nende andurite IC -de tihvtid ei ole tavaliselt 5 V tolerantsid, nii et nende otsene ühendamine Arduino Uno -laadsega võib neid jäädavalt kahjustada.

3. samm: andurijaamad

Andurijaamad
Andurijaamad

Nagu mainitud, oleksid andurjaamad kõik Espressif-seadmed, mis kasutavad sideprotokolli ESP-Now. Varasematest projektidest ja katsetest oli mul esialgsete testide tegemiseks ja nende lõplikuks kujundamiseks kasutusel mitu erinevat seadet. Mul olid käepärast järgmised seadmed:

  • kaks ESP-01 moodulit
  • kaks Wemos D1 mini arendusplaati
  • üks Lolin ESP8266 arendusplaat
  • üks ESP12E seeria WIFI komplekti plaat
  • üks GOOUUU ESP32 plaat (38 kontaktiga arendusplaat)

Mul oli ka Wemos D1 R2 arendusplaat, kuid sellega oli probleeme, mis ei lasknud tal sügavast unest ärgata ja väravate seadmena kukkus see kokku ning ei käivitu korralikult. Hiljem parandasin selle ja sellest sai osa garaažiukse avaja projektist. "Deepsleep" toimimiseks peab ESP8266 RST -tihvt olema ühendatud GPIO16 kontaktiga, nii et unetaimer võib seadme üles äratada. Ideaalis tuleks see ühendus teha Schottky dioodiga (katood GPIO16-ga), et programmeerimise ajal käsitsi lähtestamine USB-TLL-ühenduse kaudu toimiks. Madala väärtusega (300-ish Ohm) takisti või isegi otsejuhtmeühendus võib siiski olla edukas.

ESP-01 moodulid ei võimalda hõlpsat juurdepääsu GPIO16 tihvtile ja üks peab jootma otse IC-le. See pole lihtne ülesanne ja ma ei soovita seda kõigile. ESP12E seeria WIFI komplekti plaat oli natuke uudne toode ja nõudis üsna palju muudatusi, et see oleks minu jaoks kasulik. Lihtsaimad plaadid olid Wemos D1 mini tüüpi plaadid ja Lolini plaat. ESP32 seadmed ei vaja sügava une toimimiseks mingeid muudatusi. Andreas Spiessil on selle kohta kena juhendamine.

Samm 4: ESP-01 andurjaam

ESP-01 andurijaam
ESP-01 andurijaam
ESP-01 andurijaam
ESP-01 andurijaam
ESP-01 andurijaam
ESP-01 andurijaam

Kõigil andurijaamadel on andurimoodulid vertikaalselt paigaldatud, et vähendada neile koguneva tolmu hulka. Kõik ei ole korpustes ja ma ei pruugi neid korpustesse paigaldada. Selle põhjuseks on asjaolu, et ebapiisava ventilatsiooniga seadmed võivad soojeneda ning mõjutada temperatuuri ja niiskuse näitu.

ESP-01 plaadid on väga kompaktsed ja neil on vähe digitaalseid IO kontakte, millega töötada, kuid sellest piisab I2C liidese jaoks. Lauad vajavad aga keerulist muudatust, et võimaldada "sügaval unel" töötada. Näidatud fotol joodi traat nurgatahvtilt (GPIO16) päise RST tihvtile. Traat, mida ma kasutasin, on 0,1 mm läbimõõduga isoleeritud "parandustraat". Isolatsioonikate sulab kuumutamisel ära, nii et seda saab joota trükkplaatide jms parandamiseks ega muretse, et tekivad lühikesed kohad, kus traat puutub kokku teiste komponentidega. Selle suurus raskendab töötamist ja jootsin selle traadi (harrastaja/margikogujate stiilis) mikroskoobi alla. Pidage meeles, et paremal küljel asuval päisel on 0,1 "(2,54 mm) tihvtide vahe. Schottky dioodi paigaldamine siia poleks üldse lihtne, seega otsustasin lihtsalt juhtme üksi proovida ja mõlemad seadmed on töötanud üle kuu ilma probleemideta.

Moodulid paigaldati kahele minu loodud prototüüpplaadile. Üks (#1) on programmeerimisplaat, mis võimaldab ka I2C mooduleid paigaldada ja testida, teine (#2) on I2C seadmete arendus-/testplaat. Esimese plaadi jaoks jootsin kokku vana USB -pistiku ja väikese PCB, et toita seadet otse USB -seinaadapterist. Teisel seadmel on tavaline alalisvoolu pistik, mis on modifitseeritud nii, et see sobiks kruviklemmi päisesse ja saab toite ka seinaadapteri kaudu.

Skeem näitab, kuidas need on ühendatud ja kuidas programmeerija töötab. Mul ei ole ühtegi teist ESP-01 moodulit, seega pole mul olnud kohest vajadust programmeerija järele. Tulevikus valmistan neile tõenäoliselt trükkplaadi. Mõlemale tahvlile on paigaldatud andurimoodul SI7021, kuna mind ei huvitanud nende kohtade rõhumõõtmised.

Samm: ESP 12E seeria WIFI komplekti andurjaam

ESP 12E seeria WIFI komplekti andurjaam
ESP 12E seeria WIFI komplekti andurjaam
ESP 12E seeria WIFI komplekti andurjaam
ESP 12E seeria WIFI komplekti andurjaam

ESP12E seeria WIFI komplekti plaat ei olnud mõeldud arendamiseks nii palju kui selle seadmega tehtavate võimaluste tutvustamiseks. Ostsin selle juba ammu, et natuke õppida ESP8266 programmeerimisest ja lõpuks otsustasin sellele uut kasutust anda. Eemaldasin kõik demonstratsiooniks paigaldatud LED -id ja lisasin USB -programmeerimispäise ning I2C -päise, mis sobib minu kasutatavate moodulite jaoks. Selle analoogsisendiga oli ühendatud CdS fototakisti ja otsustasin selle sinna jätta. See konkreetne seade kavatses jälgida minu garaažitöökoda ja sellest saadud fotoandurist piisas, et mulle teada anda, kas tuled jäeti kogemata põlema. Valguse mõõtmiseks normaliseerisin näidud, et anda mulle protsent väljundit ja öösel üle „5” tähendas see, et tuled jäid põlema või maja uks ei olnud korralikult suletud. RST ja GPIO16 tihvtid on trükkplaadil selgelt märgistatud ja neid ühendav Schottky diood paigaldati trükkplaadi alumisele küljele. Toiteallikaks on USB-jadaplaat, mis on otse ühendatud USB-laadijaga. Mul on nende USB-jadaplaatide lisad ja ma ei vaja seda praegu.

Ma ei teinud selle plaadi jaoks skeemi ega soovita üldiselt seda sel eesmärgil kasutada. Wemos D1 Mini lauad on palju sobivamad ja neid arutatakse järgmisena. Kuigi kui teil on üks neist ja vajate nõu, aitan hea meelega.

6. samm: D1 miniandurijaamad

D1 miniandurijaamad
D1 miniandurijaamad
D1 miniandurijaamad
D1 miniandurijaamad
D1 miniandurijaamad
D1 miniandurijaamad

Wemos D1 Mini tüüpi ESP8266 arendusplaadid on minu eelistatud ja kui peaksin selle üle tegema, kasutaksin neid lihtsalt. Neil on suur hulk juurdepääsetavaid IO -kontakte, neid saab otse Arduino IDE kaudu programmeerida ja need on endiselt üsna kompaktsed. Nendel tahvlitel on D0 tihvt GPIO16 ja Schottky dioodi ühendamine on üsna lihtne. Skeemil on näidatud, kuidas need plaadid on ühendatud ja mõlemad kasutavad BME2808 andurimoodulit.

Ühte kahest tahvlist kasutatakse välisilma jälgimiseks ja see töötab päikeseenergia patareist. 165 mm x 135 mm (6 V, 3,5 W) päikesepaneel on ühendatud TP4056 liitium-ioon aku laadimismooduliga (vt päikeseenergial töötava aku andurijaama seadistusskeemi). Sellel laadimismoodulil (03962A) on aku kaitselülitus, mis on vajalik, kui aku (pakk) seda ei sisalda. Liitium-ioonaku taaskasutati vanast sülearvuti akust ja see mahutab endiselt piisavalt laengut D1 Mini plaadi käitamiseks, eriti sügava une korral. Plaat paigutati plastkorpusesse, et see oleks elementide eest mõnevõrra ohutu. Kuid selleks, et interjöör puutuks kokku välistemperatuuri ja niiskusega, puuriti vastaskülgedele kaks 25 mm läbimõõduga auku ja kaeti (seestpoolt) musta maastikukangaga. Riie on loodud nii, et niiskus pääseks sisse ja seetõttu saab niiskust mõõta. Korpuse ühte otsa puuriti väike auk ja paigaldati läbipaistev plastikaken. Siia paigutati valgusanduri moodul BH1750. Kogu seade asetatakse õue varju (mitte otsese päikese kätte) valgussensoriga avatud poole. See on meie siinse vihmase/pilvise ilmaga töötanud päikeseenergiaga akust peaaegu 4 nädalat.

Samm: lüüs ja veebiserver

Lüüs ja veebiserver
Lüüs ja veebiserver
Lüüs ja veebiserver
Lüüs ja veebiserver
Lüüs ja veebiserver
Lüüs ja veebiserver

ESP-Now Gateway seadme jaoks kasutati plaati Lolin NodeMCU V3 (ESP8266) ja veebiserveri jaoks ESP32 (GOOUUU plaat). Peaaegu iga ESP8266 või isegi ESP32 plaat oleks võinud olla lüüsiseadmena, see oli lihtsalt plaat, mis mul pärast kõigi teiste tahvlite kasutamist "üle jäi".

Kasutasin ESP32 tahvlit, kuna vajan andmete kogumiseks, sortimiseks, salvestamiseks salvestamiseks ja veebiserveri käitamiseks tahvlit, millel on natuke rohkem arvutusvõimsust. Tulevikus võib sellel olla ka oma andur ja kohalik (OLED) ekraan. Salvestamiseks kasutati kohandatud adapteriga SD -kaarti. Kasutasin tavalist microSD -SD -kaardi adapterit ja jootsin kaetud kontaktidele 7 -kontaktilise isase (0,1 sammuga) päise. Ühenduste loomiseks järgisin selle GitHubi nõuandeid.

Prototüüpimise seadistus (Duponti juhtmetega) ei sisalda andurimoodulit, kuid minu kavandatud viimistletud trükkplaat võimaldab nii ühte kui ka väikest OLED -ekraani. Üksikasjad selle kohta, kuidas ma selle trükkplaadi kavandasin, on osa teisest juhendist.

8. samm: tarkvara

Tarkvara
Tarkvara

ESP8266 (ESP-NOW) seadmed

Kõigi seadmete tarkvara kirjutati Arduino IDE abil (v1.87). Iga andurjaam töötab sisuliselt identse koodiga. Need erinevad ainult selle poolest, milliseid kontakte kasutatakse I2C -side jaoks ja millise andurimooduliga need on ühendatud. Kõige tähtsam on see, et nad saadavad identsed mõõtmisandmete paketid ESP-Now Gateway jaama, olenemata sellest, kas neil on sama andur. See tähendab, et mõned andurijaamad täidavad rõhu ja valguse taseme mõõtmiseks näiv väärtused, kui neil pole andureid, mis annaksid tegelikke väärtusi. Iga jaama ja lüüsi kood kohandati Anthony Elderi näidetest sellel GitHubil.

Lüüsiseadme kood kasutas veebiserveriga suhtlemiseks SoftwareSerialit, kuna ESP8266 -l on ainult üks täielikult toimiv riistvara UART. Maksimaalse andmeedastuskiirusega 9600 töötamine tundub üsna usaldusväärne ja on suhteliselt väikeste andmepakettide saatmiseks enam kui piisav. Lüüsiseade on programmeeritud ka privaatse MAC -aadressiga. Põhjus on selles, et kui see vajab väljavahetamist, ei pea andurjaamu kõiki uue vastuvõtja MAC-aadressiga ümber programmeerima.

ESP32 (veebiserver)

Iga andurjaam saadab oma andmepaketi lüüsiseadmesse, mis edastab selle veebiserverile. Koos andmepaketiga saadetakse iga jaama tuvastamiseks ka andurjaama MAC -aadress. Veebiserveril on "otsingu" tabel iga anduri asukoha määramiseks ja sorteerib andmed vastavalt. Mõõtmiste vaheline ajavahemik määrati 5 minutile pluss juhuslik tegur, et vältida andurite kokkupõrget väravate seadmesse saatmisel.

Kodune WIFI -ruuter oli määratud määrama veebiserverile WIFI -ga ühenduse loomisel fikseeritud IP -aadressi. Minu jaoks oli see 192.168.1.111. Selle aadressi tippimine mis tahes brauseris loob ühenduse ilmajaama veebiserveriga seni, kuni kasutaja asub koduvõrgu WIFI -levialas (ja loob sellega ühenduse). Kui kasutaja loob veebilehega ühenduse, vastab veebiserver mõõtmiste tabeliga ja sisaldab iga anduri viimase mõõtmise aega. Kui andurjaam ei reageeri, näete seda tabelist, kui näit on üle 5-6 minuti vana.

Andmed salvestatakse üksikutesse tekstifailidesse SD -kaardile ja neid saab ka veebilehelt alla laadida. Seda saab importida Excelisse või mõnda teise andmete joonistamise rakendusse

Androidi rakendus

Et hõlbustada nutitelefonis kohaliku ilmateabe vaatamist, lõin Android Studio abil suhteliselt Androidi rakenduse. See on saadaval minu GitHubi lehel siin. See kasutab veebivaate klassi veebilehe laadimiseks serverist ja piiratud funktsionaalsusena. See ei ole võimeline andmefaile alla laadima ja mul ei olnud niikuinii vajadust nende telefonis olevate failide järele.

9. samm: tulemused

Tulemused
Tulemused

Lõpuks, siin on mõned tulemused minu koduilmajaamast. Andmed laaditi alla sülearvutile ja joonistati Matlabis. Lisasin oma Matlabi skriptid ja saate neid ka GNU Octave'is käivitada. Välisandur on töötanud päikeseenergiaga laetud akuga peaaegu 4 nädalat ja meil on sellel aastaajal harva päikest. Siiani töötab kõik hästi ja kõik pereliikmed saavad ise ilma otsida, mitte minult küsida!