Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Že dolgo sem želel imeti domačo vremensko postajo, ki bi jo vsi v družini zlahka preverili glede temperature in vlažnosti. Poleg spremljanja zunanjih razmer sem želel spremljati tudi posebne prostore v hiši in v garažni delavnici. Tako bi lahko vedeli, kdaj je pravi čas, da prezračite hišo ali zaženete razvlaževalec zraka (tukaj pozimi močno dežuje). Ustvaril sem sistem senzorjev, ki temelji na sistemu ESP-Now in poroča lokalnemu spletnemu strežniku, ki ga lahko vsak preveri iz svojega računalnika ali telefona. Za telefon sem napisal kot preprosto aplikacijo za Android, da bi bilo to še lažje.
1. korak: Podrobnosti o oblikovanju
Želel sem imeti različne senzorske postaje, ki bi jih lahko postavil na različne lokacije in naj jih javijo na eno glavno postajo (ali vozlišče), ki bi shranila podatke. Po preizkušanju različnih idej sem se odločil za uporabo protokola ESP-Now podjetja Espressif, saj je omogočal hitro komunikacijo neposredno med napravami. Nekaj o ESP-Now lahko preberete tukaj in ta repo GitHub je bil velik del mojega navdiha.
Prva slika prikazuje postavitev sistema. Vsak senzor poroča o svojih meritvah prehodni napravi, ki podatke posreduje glavnemu strežniku prek trde žične serijske povezave. Razlog za to je, da protokol ESP-Now ne more biti aktiven hkrati s povezavo WIFI. Za dostop do spletne strani mora biti WIFI ves čas vklopljen, kar onemogoča uporabo komunikacije ESP-Now na isti napravi. Medtem ko mora biti prehodna naprava naprava, ki temelji na Espressifu (z zmožnostjo ESP-Now), je lahko glavni strežnik katera koli naprava, ki lahko izvaja spletno stran.
Nekatere senzorske postaje bi se izpraznile iz baterij (ali solarno napolnjenih baterij), druge pa preprosto iz električnega omrežja. Vseeno sem želel, da bi vsi uporabili čim manj energije, in tu je funkcija "globokega spanca", ki je na voljo za naprave ESP8266 in ESP32, v veliko pomoč. Senzorske postaje bi se občasno prebudile, opravile meritve in jih poslale na prehodno napravo ter šle nazaj v stanje spanja za nekaj vnaprej programiranega obdobja. Njihovo obdobje bujenja le približno 300 ms vsakih 5 minut (v mojem primeru) znatno zmanjša njihovo porabo energije.
2. korak: Senzorji
Za merjenje okoljskih parametrov lahko izbirate med različnimi senzorji. Odločil sem se, da se bom držal samo senzorjev za komunikacijo I2C, saj so omogočali hitre meritve in bi deloval na kateri koli napravi, ki sem jo imel. Namesto da bi neposredno delal z IC-ji, sem za poenostavitev oblikovanja iskal module, pripravljene za uporabo, ki so imeli enake izhode. Začel sem samo z merjenjem temperature in vlažnosti, zato sem izbral modul na osnovi SI7021. Kasneje sem si želel senzor, ki bi lahko meril tudi tlak, in se odločil, da preizkusim senzorske module na osnovi BME280. Na nekaterih lokacijah sem celo želel spremljati raven svetlobe, modul BH1750 pa je bil za to idealen kot ločen senzorski modul. Senzorske module sem kupil pri ebayu in to so moduli, ki sem jih prejel:
- BME280 (GY-BMP/E280), meri temperaturo, vlažnost in tlak
- SI7021 (GY-21), meri temperaturo in vlažnost
- BH1750 (GY-302), meri svetlobo
Obstajata dva sloga modulov PCB GY-BMP/E280. Oba imata isti izhod za nožice od 1 do 4. En modul ima dva dodatna zatiča, CSB in SDO. Ta dva zatiča sta vnaprej priključena na 4-polno različico modula. Raven zatiča SDO določa naslov I2C (Ground = privzeto 0x76, VCC = 0x77). Za izbiro vmesnika I2C mora biti pin CSB priključen na VCC. Raje imam 4 -polni modul, saj je pripravljen za uporabo, kot je za moj namen.
Na splošno so ti moduli zelo priročni za uporabo, saj že imajo vgrajene uporovne upore za komunikacijske linije in vsi delujejo na 3.3V, zato so združljivi s ploščami na osnovi ESP8266. Upoštevajte, da nožice na teh senzorjih IC običajno ne prenašajo 5V, zato jih lahko neposredno poveže z nečim, kot je Arduino Uno, in jih trajno poškoduje.
3. korak: Senzorske postaje
Kot že omenjeno, bi bile vse senzorske postaje naprave Espressif, ki uporabljajo komunikacijski protokol ESP-Now. Od prejšnjih projektov in eksperimentov sem imel na voljo več različnih naprav za izvajanje svojih začetnih testov in njihovo vključitev v končno zasnovo. Pri roki sem imel naslednje naprave:
- dva modula ESP-01
- dve razvojni plošči Wemos D1 mini
- ena razvojna plošča Lolin ESP8266
- ena serijska komplet WIFI ESP12E
- ena plošča GOOUUU ESP32 (38 -polna razvojna plošča)
Imel sem tudi razvojno ploščo Wemos D1 R2, vendar so se z njo pojavile težave, ki ji niso dovolile, da bi se prebudil iz globokega spanca, zato bi se kot vhodna naprava zrušil in se ne bi pravilno zagnal. Kasneje sem ga popravil in postal je del projekta odpiranja garažnih vrat. Da bi "globoko spanje" delovalo, mora biti RST pin ESP8266 priključen na pin GPIO16, tako da lahko časovnik za spanje prebudi napravo. V idealnem primeru je treba to povezavo vzpostaviti s Schottkyjevo diodo (katoda do GPIO16), tako da ročna ponastavitev prek povezave USB-TLL med programiranjem še vedno deluje. Vendar pa je upor nizke vrednosti (300 ohmov) ali celo neposredna žična povezava še vedno uspešen.
Moduli ESP-01 ne omogočajo enostavnega dostopa do zatiča GPIO16 in jih je treba spajkati neposredno na IC. To ni enostavna naloga in tega ne priporočam vsem. ESP12E serijski komplet WIFI je bil nekaj novosti in je zahteval kar nekaj sprememb, da je bil uporaben za moj namen. Najlažje za uporabo so bile plošče mini tipa Wemos D1 in plošča Lolin. Naprave ESP32 ne potrebujejo nobenih sprememb za delovanje globokega spanca. Andreas Spiess ima o tem lepo navodilo.
4. korak: Senzorska postaja ESP-01
Na vseh senzorskih postajah so senzorski moduli nameščeni navpično, da se zmanjša količina prahu, ki se lahko nabira na njih. Vsi niso v ohišjih in jih ne smem namestiti v ohišja. Razlog za to je, da se naprave lahko segrejejo in vplivajo na odčitke temperature in vlažnosti pri nezadostno prezračevanju.
Plošče ESP-01 so zelo kompaktne in imajo malo digitalnih IO zatičev za delo, vendar je to dovolj za vmesnik I2C. Plošče pa zahtevajo zapleteno spremembo, ki bo omogočila delovanje "globokega spanca". Na prikazani fotografiji je bila žica spajkana od vogalnega zatiča (GPIO16) do zatiča RST na glavi. Žica, ki sem jo uporabil, je izolirana žica za popravilo s premerom 0,1 mm. Izolacijski premaz se pri segrevanju topi, zato ga lahko spajkamo, da popravimo sledi itd. Zaradi svoje velikosti je težko delati in to žico sem spajkal na mesto pod mikroskopom (v stilu ljubitelja/zbiratelja žigov). Upoštevajte, da ima glava na desni strani razmik med zatiči 0,1 "(2,54 mm). Namestitev Schottkyjeve diode tukaj ne bi bila enostavna, zato sem se odločil, da poskusim samo z žico in obe enoti delujeta že več kot mesec brez težav.
Moduli so bili nameščeni na dveh prototipnih ploščah, ki sem jih ustvaril. Ena (#1) je programska plošča, ki omogoča tudi namestitev in testiranje modulov I2C, druga (#2) pa je razvojna/preskusna plošča za naprave I2C. Za prvo ploščo sem spajal star moški priključek USB in majhno tiskano vezje za napajanje enote neposredno iz stenskega adapterja USB. Druga enota ima običajni enosmerni priključek, ki je prilagojen za pritrditev v glavo vijačne sponke, napaja pa se tudi prek stenskega adapterja.
Shema prikazuje, kako so povezani in kako deluje programer. Nimam drugih modulov ESP-01, zato programerja nisem imel takojšnje potrebe. V prihodnosti jim bom verjetno izdelal PCB. Na obeh ploščah je nameščen senzorski modul SI7021, saj me meritve tlaka na teh lokacijah niso zanimale.
5. korak: Senzorska postaja serijskega kompleta WIFI ESP 12E
Plošča ESP12E Serial WIFI Kit ni bila namenjena tako razvoju kot predstavitvi, kaj je mogoče storiti s to napravo. Kupil sem ga že zdavnaj, da bi izvedel nekaj o programiranju ESP8266, in se končno odločil, da mu dam novo uporabo. Odstranil sem vse LED diode, ki so bile nameščene za predstavitve, in dodal glavo za programiranje USB ter glavo I2C, ki je primerna za module, ki jih uporabljam. Na analogni vhodni pin je imel priključen fotografski upor CdS, zato sem se odločil, da ga pustim tam. Ta enota je nameravala nadzirati mojo garažno delavnico in foto-senzor, ki ga je imel, je zadoščal, da mi je povedal, če so luči slučajno ostale prižgane. Za merjenje svetlobe sem normaliziral odčitke, da sem dobil odstotek izhodne moči in vse, kar je bilo čez »5« ponoči, je pomenilo, da so luči ostale prižgane ali da vrata v hišo niso bila pravilno zaprta. Zatiči RST in GPIO16 so jasno označeni na tiskanem vezju, Schottkyjeva dioda, ki ju povezuje, pa je bila nameščena na spodnji strani tiskanega vezja. Napaja se prek serijske plošče USB, ki je neposredno priključena na stenski polnilnik USB. Imam dodatke za te serijske plošče USB in tega trenutno ne potrebujem.
Nisem izdelal sheme za to ploščo in na splošno ne priporočam nakupa ene za uporabo v ta namen. Plošče Wemos D1 Mini so veliko bolj primerne in bodo obravnavane v nadaljevanju. Čeprav, če imate katerega od teh in potrebujete nasvet, vam bom z veseljem pomagal.
Korak 6: Mini senzorske postaje D1
Razvojne plošče Wemos D1 Mini ESP8266 so moje najljubše za uporabo in če bi to moral storiti znova, bi jih uporabil. Imajo veliko število dostopnih IO zatičev, jih je mogoče neposredno programirati prek Arduino IDE in so še vedno precej kompaktni. Pin D0 je GPIO16 na teh ploščah in priključitev Schottkyjeve diode je precej enostavna. Shema prikazuje, kako povezujem te plošče in obe uporabljata senzorski modul BME2808.
Ena od obeh plošč se uporablja za spremljanje zunanjega vremena in deluje iz baterije na sončno energijo. Sončna plošča velikosti 165 mm x 135 mm (6 V, 3,5 W) je priključena na polnilni modul litij-ionske baterije TP4056 (glejte diagram nastavitve postaje senzorja solarne baterije). Ta poseben polnilni modul (03962A) ima zaščitno vezje akumulatorja, ki je potrebno, če ga baterija (paket) ne vsebuje. Li-ionska baterija je bila reciklirana iz starega baterijskega paketa prenosnega računalnika in še vedno lahko zadrži dovolj napolnjenosti za delovanje plošče D1 Mini, še posebej z omogočenim globokim spanjem. Plošča je bila postavljena v plastično ohišje, da je nekoliko zaščitena pred elementi. Da pa bi bila notranjost izpostavljena zunanji temperaturi in vlagi, sta bili na nasprotnih straneh izvrtani dve luknji s premerom 25 mm, ki so bili pokriti (od znotraj) s črno pokrajino. Tkanina je zasnovana tako, da omogoča prodiranje vlage, zato jo je mogoče izmeriti. Na enem koncu ograde je bila izvrtana majhna luknja in nameščeno prozorno plastično okno. Tu je bil nameščen modul svetlobnega senzorja BH1750. Celotna enota je postavljena na prostem v senco (ne na neposredno sonce) s svetlobnim senzorjem, usmerjenim na prosto. V našem deževnem/oblačnem zimskem vremenu tukaj skoraj 4 tedne deluje od sončne baterije.
7. korak: Prehod in spletni strežnik
Za napravo ESP-Now Gateway je bila uporabljena plošča Lolin NodeMCU V3 (ESP8266), za spletni strežnik pa ESP32 (plošča GOOUUU). Skoraj vsaka plošča ESP8266 ali celo ESP32 bi lahko služila kot prehodna naprava, to je bila preprosto plošča, ki mi je "ostala", potem ko sem uporabila vse druge plošče, ki sem jih imela.
Uporabil sem ploščo ESP32, ker potrebujem ploščo z malo več računalniške moči za zbiranje podatkov, njihovo razvrščanje, shranjevanje v shrambo in zagon spletnega strežnika. V prihodnosti bo morda imel tudi svoj senzor in lokalni (OLED) zaslon. Za shranjevanje je bila uporabljena kartica SD s prilagojenim adapterjem. Uporabil sem običajen adapter za kartico microSD na kartico SD in spajal 7 -polno moško glavo (0,1 koraka) na prevlečene kontakte. Za vzpostavitev povezave sem upošteval nasvete tega GitHub -a.
Nastavitev izdelave prototipov (z žicami Dupont) ne vključuje senzorskega modula, vendar dokončana tiskana vezja, ki sem jo oblikoval, omogočajo eno in tudi majhen zaslon OLED. Podrobnosti o tem, kako sem zasnoval tisto vezje, so del drugega Instructable.
8. korak: Programska oprema
Naprave ESP8266 (ESP-ZDAJ)
Programska oprema za vse naprave je bila napisana z uporabo Arduino IDE (v1.87). Vsaka senzorska postaja ima v bistvu isto kodo. Razlikujejo se le po tem, kateri zatiči se uporabljajo za komunikacijo I2C in na kateri senzorski modul so priključeni. Najpomembneje je, da pošljejo enak paket merilnih podatkov na postajo ESP-Now Gateway, ne glede na to, ali imajo isti senzor. To pomeni, da bodo nekatere senzorske postaje vnesle lažne vrednosti za meritve tlaka in ravni svetlobe, če nimajo senzorjev za zagotavljanje resničnih vrednosti. Koda za vsako postajo in prehod je bila prilagojena iz primerov Anthonyja Elderja na tem GitHubu.
Koda prehodne naprave je za komunikacijo s spletnim strežnikom uporabljala SoftwareSerial, saj ima ESP8266 samo en popolnoma delujoč strojni UART. Deluje pri največji hitrosti prenosa 9600 se zdi precej zanesljivo in je več kot dovolj za pošiljanje teh relativno majhnih podatkovnih paketov. Prehodna naprava je programirana tudi z zasebnim naslovom MAC. Če je potrebno zamenjati, senzorskih postaj ni treba znova programirati z novim naslovom MAC prejemnika.
ESP32 (spletni strežnik)
Vsaka senzorska postaja pošlje svoj podatkovni paket prehodni napravi, ki ga posreduje spletnemu strežniku. Skupaj s podatkovnim paketom se za identifikacijo vsake postaje pošlje tudi naslov MAC senzorske postaje. Spletni strežnik ima "iskalno" tabelo za določitev lokacije vsakega senzorja in ustrezno razvrsti podatke. Časovni interval med meritvami je bil nastavljen na 5 minut plus naključni faktor, da se izognemo "trčenju" senzorjev med pošiljanjem na napravo za vrata.
Domači usmerjevalnik WIFI je bil nastavljen tako, da spletnemu strežniku, ko se poveže z WIFI, dodeli stalen naslov IP. Za moje je bilo 192.168.1.111. Vnos tega naslova v katerem koli brskalniku se bo povezal s spletnim strežnikom vremenske postaje, dokler je uporabnik v dosegu WIFI (in se poveže z) domačega omrežja. Ko se uporabnik poveže s spletno stranjo, se spletni strežnik odzove s tabelo meritev in vključi čas zadnje meritve vsakega senzorja. Če senzorska postaja ne reagira, je to razvidno iz tabele, če je odčitek star več kot 5-6 minut.
Podatki se shranijo v posamezne besedilne datoteke na kartico SD, prenesete pa jih lahko tudi s spletne strani. Lahko ga uvozite v Excel ali katero koli drugo aplikacijo za risanje podatkov
Aplikacija za Android
Za lažji ogled lokalnih vremenskih informacij na pametnem telefonu sem s programom Android Studio ustvaril relativno aplikacijo za Android. Na voljo je na moji strani GitHub tukaj. Uporablja razred webview za nalaganje spletne strani s strežnika in zato omejena funkcionalnost. Ne more prenesti podatkovnih datotek in teh v telefonu vseeno nisem potreboval.
9. korak: Rezultati
Za konec pa še nekaj rezultatov za mojo domačo vremensko postajo. Podatki so bili preneseni na prenosni računalnik in narisani v Matlabu. Priložil sem svoje skripte Matlab in jih lahko zaženete tudi v GNU Octave. Zunanji senzor deluje na solarno napolnjeni bateriji že skoraj 4 tedne in v tem letnem času imamo le redko kakšno sonce. Zaenkrat vse dobro deluje in vsi v družini lahko sami pogledajo vreme, namesto da me zdaj vprašajo!