Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-13 06:57
Želela sam da već neko vreme imam kućnu meteorološku stanicu koju bi svi u porodici mogli lako proveriti na temperaturu i vlažnost. Osim nadziranja vanjskih uvjeta, htio sam nadzirati i određene prostorije u kući i svoju garažu. To bi nas obavijestilo kada je dobro vrijeme da prozračite kuću ili pokrenete odvlaživač zraka (ovdje pada velika kiša tokom zime). Ono što sam stvorio je sistem senzora zasnovan na ESP-u koji izvještava lokalni web-server koji svako može provjeriti sa svog računara ili telefona. Za telefon sam napisao kao jednostavnu Android aplikaciju kako bih to učinio još lakšim.
Korak 1: Detalji dizajna
Htio sam imati različite senzorske stanice koje bih mogao postaviti na različite lokacije i prijaviti ih na jednu glavnu stanicu (ili čvorište) koja bi spremila informacije. Nakon isprobavanja različitih ideja, odlučio sam koristiti Espressifov protokol ESP-Now, jer je omogućavao brzu komunikaciju izravno između uređaja. Ovdje možete pročitati nešto o ESP-Now-u, a ovaj GitHub repo bio je veliki dio moje inspiracije.
Prva slika prikazuje izgled sistema. Svaki senzor prijavljuje svoja mjerenja pristupnom uređaju koji podatke prosljeđuje glavnom serveru putem žičane serijske veze. Razlog za to je što protokol ESP-Now ne može biti aktivan istovremeno s WIFI vezom. Da bi korisnik mogao pristupiti web stranici, WIFI bi trebao biti uključen cijelo vrijeme, što onemogućuje korištenje komunikacije ESP-Now na istom uređaju. Dok gateway uređaj mora biti uređaj zasnovan na Espressifu (sposoban za ESP-Now), glavni poslužitelj može biti bilo koji uređaj koji može pokrenuti web stranicu.
Neke senzorske stanice bi se ispraznile iz baterija (ili solarno napunjenih baterija), dok bi druge jednostavno imale napajanje iz mreže. Međutim, želio sam da svi koriste što je moguće manje energije i tu je funkcija "dubokog sna" dostupna za uređaje ESP8266 i ESP32 izuzetno korisna. Senzorske stanice bi se povremeno budile, uzimale mjerenja i slale ih na gateway uređaj i vraćale u san na neko unaprijed programirano vrijeme. Njihovo razdoblje budnosti od samo 300 ms svakih 5 minuta (u mom slučaju) značajno smanjuje njihovu potrošnju energije.
Korak 2: Senzori
Za mjerenje parametara okoliša možete izabrati različite senzore. Odlučio sam se držati samo I2C komunikacijskih senzora, jer su dopuštali brza mjerenja i radili bi na bilo kojem uređaju koji sam imao. Umjesto da radim direktno s IC-ovima, tražio sam module spremne za upotrebu sa istim pin-outima kako bih pojednostavio dizajn. Počeo sam samo sa mjerenjem temperature i vlažnosti pa sam odabrao modul zasnovan na SI7021. Kasnije sam htio senzor koji je mogao mjeriti i pritisak i odlučio sam isprobati senzorske module zasnovane na BME280. Na nekim sam lokacijama čak želio pratiti razinu svjetlosti, a modul BH1750 za to je bio idealan kao zaseban senzorski modul. Moje senzorske module kupio sam na ebayu i ovo su moduli koje sam dobio:
- BME280 (GY-BMP/E280), mjeri temperaturu, vlažnost i pritisak
- SI7021 (GY-21), mjeri temperaturu i vlažnost
- BH1750 (GY-302), mjeri svjetlost
Postoje dva stila PCB modula GY-BMP/E280 koji se mogu pronaći. Oba dijele isti pin out za pinove 1 do 4. Jedan modul ima dva dodatna pina, CSB i SDO. Ta dva pina su unaprijed spojena na 4-pinsku verziju modula. Nivo SDO pina određuje I2C adresu (Uzemljenje = zadano 0x76, VCC = 0x77). CSB pin mora biti spojen na VCC da biste odabrali I2C sučelje. Više volim 4 -pinski modul, jer je spreman za upotrebu onako kako je za moju namjenu.
Općenito, ovi moduli su vrlo zgodni za upotrebu jer već imaju instalirane pull-up otpornike za komunikacijske linije i svi rade na 3.3V pa su kompatibilni s pločama baziranim na ESP8266. Imajte na umu da pinovi na ovim IC osjetnicima općenito nisu tolerantni na 5V, pa ih direktno povezivanje s nečim poput Arduino Uno može trajno oštetiti.
Korak 3: Senzorske stanice
Kao što je spomenuto, sve senzorske stanice bi bile Espressif uređaji koji koriste komunikacijski protokol ESP-Now. Od prethodnih projekata i eksperimenata, na raspolaganju mi je bilo nekoliko različitih uređaja za provođenje mojih početnih testova i njihovo uključivanje u konačni dizajn. Pri ruci sam imao sljedeće uređaje:
- dva ESP-01 modula
- dvije razvojne ploče Wemos D1 mini
- jedna razvojna ploča Lolin ESP8266
- jedna ESP12E serijska WIFI kit ploča
- jedna GOOUUU ESP32 ploča (38 -pinska razvojna ploča)
Imao sam i razvojnu ploču Wemos D1 R2, ali bilo je problema s njom koji joj nisu dozvoljavali da se probudi iz dubokog sna, a kao ulazni uređaj bi se srušio i ne bi ispravno ponovo pokrenuo. Kasnije sam ga popravio i postao je dio projekta otvaranja garažnih vrata. Da bi "duboki san" funkcionirao, RST pin ESP8266 mora biti spojen na pin GPIO16, tako da mjerač vremena za isključivanje može probuditi uređaj. Idealno bi bilo da se ovo povezivanje izvede sa Schottky diodom (katoda na GPIO16) tako da ručno resetiranje putem USB-TLL veze tokom programiranja i dalje radi. Međutim, otpornik niske vrijednosti (300 ohma) ili čak izravna veza mogu i dalje biti uspješni.
ESP-01 moduli ne dopuštaju lak pristup GPIO16 pinu i potrebno je lemljenje direktno na IC. Ovo nije jednostavan zadatak i ne bih ga preporučio svima. ESP12E serijska WIFI ploča je bila nešto novo i zahtijevalo je dosta promjena kako bi mi bila korisna. Najjednostavnije ploče za upotrebu bile su Wemos D1 mini tip ploče i Lolin ploča. ESP32 uređaji ne zahtijevaju nikakve izmjene za funkcioniranje dubokog sna. Andreas Spiess ima lijepu instrukciju o ovome.
Korak 4: Senzorska stanica ESP-01
Na svim senzorskim stanicama senzorski moduli montirani su okomito kako bi se smanjila količina prašine koja se može skupiti na njima. Nisu svi u kućištima i ne mogu ih montirati u kućišta. Razlog za to je što se uređaji mogu zagrijati i utjecati na očitanje temperature i vlažnosti u nedovoljno prozračenom prostoru.
ESP-01 ploče su vrlo kompaktne i imaju nekoliko digitalnih IO pinova za rad, ali to je dovoljno za I2C sučelje. Ploče ipak zahtijevaju lukavu izmjenu kako bi omogućile "duboki san" da radi. Na prikazanoj fotografiji žica je lemljena od kutnog pina (GPIO16) do RST pina na zaglavlju. Žica koju sam koristio je izolacijska "popravna" žica promjera 0,1 mm. Izolacijski premaz se pri zagrijavanju topi, pa se može lemiti za popravak tragova itd. U PCB -ovima i dalje ne brinuti o stvaranju kratkih spojeva gdje žica dolazi u kontakt s drugim komponentama. Njegova veličina otežava rad i lemio sam ovu žicu na mjesto pod mikroskopom (u stilu hobista/sakupljača marki). Imajte na umu da zaglavlje s desne strane ima razmak između pinova 0,1 "(2,54 mm). Ugradnja Schottky diode ovdje ne bi bila nimalo laka, pa sam odlučio samo isprobati žicu i obje jedinice rade više od mesec dana bez ikakvih problema.
Moduli su instalirani na dvije prototipne ploče koje sam stvorio. Jedna (#1) je ploča za programere koja također omogućava instaliranje i testiranje I2C modula, dok je druga (#2) razvojna/testna ploča za I2C uređaje. Za prvu ploču sam lemio stari USB muški konektor i malu PCB za napajanje jedinice izravno iz USB zidnog adaptera. Druga jedinica ima običnu istosmjernu utičnicu modificiranu tako da stane u zavojnu stezaljku, a napaja se i putem zidnog adaptera.
Shema prikazuje kako su spojeni i kako radi programer. Nemam drugih ESP-01 modula, pa nisam imao trenutnu potrebu za programatorom. U budućnosti ću vjerovatno napraviti PCB za njih. Obje ove ploče imaju instaliran senzorski modul SI7021 jer me nisu zanimala mjerenja tlaka na tim lokacijama.
Korak 5: Serijski WIFI komplet senzora ESP 12E
Ploča ESP12E Serial WIFI Kit nije bila namijenjena za razvoj koliko za prikazivanje onoga što se može učiniti s ovim uređajem. Davno sam ga kupio da naučim nešto o programiranju ESP8266 i konačno sam mu odlučio dati novu upotrebu. Uklonio sam sve LED diode koje su instalirane za demonstracije i dodao USB zaglavlje za programiranje, kao i I2C zaglavlje pogodno za module koje koristim. Imao je CdS foto otpornik spojen na analogni ulazni pin i odlučio sam ga ostaviti tamo. Ova jedinica će nadgledati moju garažu i foto-senzor koji je imao bio je dovoljan da me obavijesti da li su svjetla slučajno bila uključena. Za mjerenje svjetlosti normalizirao sam očitanja kako bih postigao postotak izlaza, a sve preko "5" noću značilo je da su svjetla ostavljena upaljena ili vrata kuće nisu pravilno zatvorena. Igle RST i GPIO16 su jasno označene na PCB -u, a Schottky dioda koja ih povezuje je instalirana na donjoj strani PCB -a. Napaja se putem USB serijske ploče koja je direktno priključena na USB zidni punjač. Imam dodatke ovih USB serijskih ploča i ova mi trenutno ne treba.
Nisam napravio shemu za ovu ploču i općenito ne preporučujem da je kupite u tu svrhu. Ploče Wemos D1 Mini mnogo su prikladnije i o njima će biti riječi dalje. Iako, ako imate neki od ovih i trebate savjet, rado ću vam pomoći.
Korak 6: D1 mini senzorske stanice
Razvojne ploče Wemos D1 Mini tipa ESP8266 su moje preferirane za upotrebu i ako bih morao to ponoviti, samo bih ih koristio. Imaju veliki broj pristupačnih IO pinova, mogu se izravno programirati putem Arduino IDE -a i još uvijek su prilično kompaktni. D0 pin je GPIO16 na ovim pločama, a povezivanje Schottky diode prilično je jednostavno. Shema prikazuje kako sam spojio ove ploče i obje koriste senzorski modul BME2808.
Jedna od dvije ploče koristi se za praćenje vanjskog vremena i radi na solarnu bateriju. Solarni panel dimenzija 165 mm x 135 mm (6V, 3,5 W) povezan je s modulom za punjenje litij-ionske baterije TP4056 (pogledajte dijagram postavljanja postaje senzora baterije sa solarnom energijom). Ovaj određeni modul za punjenje (03962A) sadrži zaštitni krug baterije koji je neophodan ako ga baterija (paket) ne sadrži. Li-ion baterija je reciklirana iz stare baterije za prijenosno računalo i još uvijek može držati dovoljno napunjenosti za rad D1 Mini ploče, posebno ako je omogućen duboki san. Ploča je postavljena u plastično kućište kako bi bila donekle zaštićena od elemenata. Međutim, kako bi unutrašnjost bila izložena vanjskoj temperaturi i vlažnosti, dvije su rupe promjera 25 mm izbušene na suprotnim stranama i prekrivene (iznutra) crnom pejzažnom tkaninom. Tkanina je dizajnirana tako da propušta vlagu, pa se vlažnost može mjeriti. Na jednom kraju ograde izbušena je mala rupa i instaliran je prozirni plastični prozor. Ovdje je smješten modul svjetlosnog senzora BH1750. Cijela jedinica je postavljena na otvorenom u sjeni (ne na direktnom suncu) sa svjetlosnim senzorom usmjerenim prema otvorenom. Radi na solarnu bateriju skoro 4 sedmice po našem kišnom/oblačnom zimskom vremenu ovdje.
Korak 7: Mrežni prolaz i web poslužitelj
Lolin NodeMCU V3 (ESP8266) ploča je korištena za uređaj ESP-Now Gateway, a ESP32 (GOOUUU ploča) za web poslužitelj. Gotovo svaka ploča ESP8266 ili čak ESP32 mogla je poslužiti kao gateway uređaj, ovo je jednostavno ploča koju sam "ostavio" nakon što sam upotrijebio sve ostale ploče koje sam imao.
Koristio sam ploču ESP32 jer mi je potrebna ploča s nešto više računalne snage za prikupljanje podataka, sortiranje, spremanje u pohranu i pokretanje web servera. U budućnosti bi mogao imati i vlastiti senzor i lokalni (OLED) ekran. Za pohranu je korištena SD kartica s prilagođenim adapterom. Koristio sam uobičajeni adapter za microSD na SD karticu i lemio 7 -polno muško (0,1 razmak) zaglavlje na presvučene kontakte. Slijedio sam savjet ovog GitHub -a za povezivanje.
Postavljanje prototipa (s Dupont žicama) ne uključuje senzorski modul, ali finalizirana PCB ploča koju sam dizajnirao dopušta jedan, ali i mali OLED ekran. Detalji o tome kako sam dizajnirao PCB dio su drugog Instructable -a.
Korak 8: Softver
ESP8266 (ESP-NOW) uređaji
Softver za sve uređaje napisan je pomoću Arduino IDE -a (v1.87). Svaka senzorska stanica u osnovi ima identičan kod. Razlikuju se samo po tome koji se pinovi koriste za I2C komunikacije i na koji senzorski modul su spojeni. Ono što je najvažnije, oni šalju identičan paket mjernih podataka na stanicu ESP-Now Gateway, bez obzira imaju li isti senzor. To znači da će neke senzorske stanice popuniti lažne vrijednosti za mjerenje pritiska i nivoa svjetlosti ako nemaju senzore za pružanje stvarnih vrijednosti. Kôd za svaku stanicu i pristupnik prilagođen je iz primjera Anthonyja Eldera na ovom GitHubu.
Kod pristupnog uređaja koristio je SoftwareSerial za komunikaciju s web poslužiteljem, budući da ESP8266 ima samo jedan potpuno funkcionalan hardverski UART. Radi na maksimalnoj brzini prijenosa od 9600 čini se prilično pouzdanim i više je nego dovoljnim za slanje ovih relativno malih paketa podataka. Gateway uređaj je takođe programiran sa privatnom MAC adresom. Razlog za to je što, ako je potrebno zamijeniti, senzorske stanice ne moraju sve biti ponovno programirane novom MAC adresom primatelja.
ESP32 (web server)
Svaka senzorska stanica šalje svoj paket podataka na gateway uređaj koji ga prosljeđuje web serveru. Zajedno sa paketom podataka, MAC adresa senzorske stanice šalje se i za identifikaciju svake stanice. Web poslužitelj ima "tražilicu" tablicu za određivanje lokacije svakog senzora i prema tome sortira podatke. Vremenski interval između mjerenja postavljen je na 5 min plus slučajni faktor kako bi se izbjeglo da se senzori "sudaraju" jedni s drugima pri slanju na gateway uređaj.
Kućni WIFI usmjerivač postavljen je tako da dodijeli fiksnu IP adresu web serveru kada se poveže na WIFI. Za moj je to bio 192.168.1.111. Upisivanjem te adrese u bilo koji preglednik povezat će se s web serverom meteorološke stanice sve dok je korisnik u dometu WIFI -a (i povezuje se s) kućnom mrežom. Kada se korisnik poveže na web stranicu, web server odgovara tablicom mjerenja i uključuje vrijeme posljednjeg mjerenja svakog senzora. Na ovaj način, ako senzorska stanica ne reagira, to se može vidjeti iz tablice ako je očitanje staro više od 5-6 minuta.
Podaci se spremaju u pojedinačne tekstualne datoteke na SD karticu, a mogu se preuzeti i sa web stranice. Može se uvesti u Excel ili bilo koju drugu aplikaciju za crtanje podataka
Android aplikacija
Da bih olakšao pregled lokalnih vremenskih podataka na pametnom telefonu, stvorio sam relativno Android aplikaciju koristeći Android Studio. Dostupno je na mojoj GitHub stranici ovdje. Ona koristi klasu webview za učitavanje web stranice s poslužitelja i kao takva ima ograničenu funkcionalnost. Ne može preuzeti datoteke s podacima, a ja ionako nisam imao potrebe za onima na svom telefonu.
Korak 9: Rezultati
Na kraju, evo nekoliko rezultata za moju kućnu meteorološku stanicu. Podaci su preuzeti na prijenosno računalo i iscrtani u Matlabu. Priložio sam svoje Matlab skripte, a možete ih pokrenuti i u GNU Octave. Vanjski senzor radi na svojoj solarno napunjenoj bateriji gotovo 4 sedmice i rijetko imamo sunce u ovo doba godine. Do sada sve funkcionira dobro i svi u porodici mogu sami pogledati vrijeme umjesto da me pitaju sada!