Sadržaj:

Pametni distribuirani IoT sustav za praćenje vremena pomoću NodeMCU: 11 koraka
Pametni distribuirani IoT sustav za praćenje vremena pomoću NodeMCU: 11 koraka

Video: Pametni distribuirani IoT sustav za praćenje vremena pomoću NodeMCU: 11 koraka

Video: Pametni distribuirani IoT sustav za praćenje vremena pomoću NodeMCU: 11 koraka
Video: GDi Webinar - Pametni gradovi i inteligentni prometni sustavi 2024, Srpanj
Anonim
Pametni distribuirani IoT sustav za praćenje vremena pomoću NodeMCU -a
Pametni distribuirani IoT sustav za praćenje vremena pomoću NodeMCU -a

Možda ste svi svjesni tradicionalne meteorološke postaje; ali jeste li se ikada zapitali kako to zapravo funkcionira? Budući da je tradicionalna meteorološka stanica skupa i glomazna, gustoća tih postaja po jedinici površine vrlo je mala što pridonosi netočnosti podataka. Objasnit ću vam kako: Pretpostavimo da se stanica nalazi usred grada i to je jedina stanica koja se nalazi u radijusu 'x' metra, može se lako pristrasiti ako je u blizini prisutan bilo koji uzročnik zagađenja stanice koja prikazuje cijelo područje radijusa 'x' metra kao zagađeno budući da je ta jedina stanica odgovorna za određivanje vremenskih podataka za cijelo područje.

Da bi se prevladao ovaj problem, mora se povećati gustoća modula, što je moguće samo ako su moduli jeftiniji i zauzimaju manje prostora od postojećeg.

To je razlog zašto je moje predloženo rješenje savršeno rješenje za ovaj problem, košta manje od 10 USD i lako mi leži na dlanu.

Kako radi…

Postoje 3 glavna dijela ovog projekta.

Strana uređaja:

Uređaj je IoT modul prikazan na slici koji šalje vremenske podatke poslužitelju svaki vremenski interval 'x'. Podaci uključuju stvarne vremenske podatke, zemljopisni položaj modula; tj. njegove koordinate, njegova MAC adresa; za jedinstvenu identifikaciju uređaja, verzije firmvera na kojoj se trenutno izvodi. Na strani uređaja nalaze se N-moduli raspoređeni po cijelom području koji aktivno pridonose podacima poslužitelju.

Na strani poslužitelja:

Kao što naziv govori, centralizirani poslužitelj upravlja s nekoliko operacija, poput primanja podataka iz modula i pohranjivanja u bazu podataka, ažuriranja modula najnovijim firmverom ako radi na starijoj verziji, slanja vremenskih podataka na adresu klijent na zahtjev.

Strana klijenta/korisnika:

Krajnji korisnik traži vremenske podatke od poslužitelja. Klijent šalje trenutnu lokaciju i na temelju lokacije poslužitelj izračunava udaljenost između klijenta i svih modula te šalje podatke o vremenu najbližeg modula klijentu koji se smatra točnim.

Pribor

  • NodeMCU (ESP8266-12E)
  • DHT11 (Senzor vlage i temperature)
  • BMP180 (senzor pritiska i temperature)
  • MQ-135 (senzor indeksa kvalitete zraka)
  • USB kabel (za učitavanje programa)
  • Napajanje od 5 volti
  • Kondenzatori (izborno: postavljaju se paralelno s dalekovodom)
  • Arduino IDE (za ispravljanje pogrešaka i prijenos programa)
  • POSTMAN aplikacija (izborno: za ispravljanje pogrešaka u API -ju)
  • Web stranica (za hostovanje PHP i MySQL poslužitelja)

Korak 1: Lemite sve komponente i prenesite program na NodeMCU

Lemite sve komponente i prenesite program na NodeMCU
Lemite sve komponente i prenesite program na NodeMCU
Lemite sve komponente i prenesite program na NodeMCU
Lemite sve komponente i prenesite program na NodeMCU

Lemite sve komponente na NodeMCU kao što je prikazano na dijagramu sklopa na perf ploči. Također, lemite kondenzator paralelno s dalekovodima jer se snaga povećava tijekom aktivnog prijenosa i primanja podataka.

Nakon što ste obavili posao lemljenja, učitajte kôd koji se nalazi u datoteci "code.c".

Napomena: Ne zaboravite zamijeniti vjerodajnice vlastitim vjerodajnicama. Također postavite datoteku pod nazivom "html_file.h" u mapu arduino skica. Sve datoteke zaglavlja korištene u ovom projektu možete pronaći ovdje

Značajke koda:

Pristupna točka: Budući da je teško programirati svaki modul s vjerodajnicama u masovnoj proizvodnji, modul hostira web stranicu pri prvom pokretanju kako bi prihvatio vjerodajnice WiFi -ja na koje se moduli moraju povezati i pohraniti u EEPROM za kasniju upotrebu.

Nakon što su vjerodajnice konfigurirane, NodeMCU provjerava vjerodajnice na EEPROM -u i povezuje se s WiFi vjerodajnicama prisutnim u EEPROM -u.

Nakon uspješnog povezivanja na WiFi, NodeMCU počinje učitavati podatke na poslužitelj svaki 'x' interval, podaci uključuju vremenske podatke, MAC adresu modula, verziju firmvera, geografski položaj uređaja.

OTA ažuriranje: Modul također provjerava ima li novih ažuriranja firmvera svaki dan u određeno vrijeme navedeno u kodu. Ova je značajka korisna jer nije moguće da bilo koji proizvođač nastavi s promjenom programa pojedinog modula u slučaju bilo kakvih promjena.

Watchdog Timer: Atlast mora postojati način da se oporavi bez ikakve ljudske intervencije ako zapne ili padne. To se može postići korištenjem mjerača vremena za nadzor. Način na koji ovo funkcionira je sljedeći: Postoji podrutina Prekid koja se izvodi svake sekunde. ISR povećava brojač svaki put kada se izvrši i provjerava je li brojač dosegao maksimalni broj. Nakon što brojač dosegne maksimalnu vrijednost, modul se resetira pod pretpostavkom da se srušio. U normalnom radu, brojač se uvijek resetira prije nego što dosegne maksimalni broj.

Korak 2: Konfiguriranje SQL servera

Konfiguriranje SQL servera
Konfiguriranje SQL servera

Postavljanje SQL Servera također je vrlo jednostavno. Samo stvorite bazu podataka u SQL poslužitelju i uvezite postavku uvozom datoteke pod nazivom "database_structure.txt". Datoteku možete pronaći u ovom koraku. Kako instrukcije ne dopuštaju učitavanje ".sql" datoteka, preimenovao sam datoteku u ".txt".

Napomena: Preimenujte datoteku iz ".txt" u ".sql".

Korak 3: Konfiguriranje poslužitelja datoteka

Konfiguriranje poslužitelja zaista je jednostavno ako posjedujete web stranicu i ona se nalazi na mreži. Neću prolaziti kroz cijeli postupak postavljanja web stranice i njezinog hostinga jer to izlazi iz okvira ovog vodiča. Ali možete ga ugostiti na vlastitom računalu kao localhost kako biste isprobali rad datoteka.

Budući da Instructable ne dopušta postavljanje PHP datoteka, preimenovao sam datoteke u ".txt".

Napomena: Molimo preimenujte proširenje datoteka u ".php". Također ne zaboravite promijeniti vjerodajnice datoteke "config.php".

Samo učitajte datoteke na poslužitelj i spremni ste.

Dat ću vam kratke informacije o PHP datotekama.

db_config.php:

U ovoj su datoteci pohranjene sve vjerodajnice potrebne za povezivanje sa SQL poslužiteljem.

db_connect:

U ovoj datoteci postoji klasa potrebna za povezivanje baze podataka.

insert.php:

NodeMCU poziva ovu PHP datoteku za prijenos podataka na poslužitelj pomoću metode GET. Ova je datoteka također odgovorna za spremanje istih podataka na SQL poslužitelj.

retrieve.php:

Korisnik/klijent poziva ovaj PHP metodom GET. Poslužitelj izračunava udaljenost između korisnika i svih modula. Zatim se podaci najbližeg modula šalju kao odgovor klijentu u JSON/XML formatu prema želji klijenta.

update.php:

Modul poziva ovu PHP datoteku svaki dan u određeno vrijeme kako bi provjerio radi li modul s najnovijom verzijom firmvera. Samo postavite najnoviju datoteku ".bin" na poslužitelj datoteka i navedite direktorij datoteke u varijabli datoteke.

Ako vam se na prvi pogled čini da je toliko datoteka zastrašujuće, uključio sam korisničku dokumentaciju u sljedeći korak.

Korak 4: Korisnička dokumentacija

Korisnička dokumentacija
Korisnička dokumentacija
Korisnička dokumentacija
Korisnička dokumentacija

Uvod:

Weather API pruža jednostavno sučelje za traženje vremenskih podataka za lokacije na površini zemlje. Tražite vremenske podatke za određeni par zemljopisne širine/dužine s navedenim izlaznim formatom. API vraća temperaturu, vlažnost, tlak i indeks kvalitete zraka koji je posljednji modul snimio sa traženog mjesta.

Prije nego što počneš:

Ovaj je dokument namijenjen programerima web stranica i mobilnih uređaja koji žele uključiti vremenske podatke u aplikaciju koja se razvija. Uvodi upotrebu pomoću API -ja i referentnog materijala o dostupnim parametrima.

Zahtjev za vremenske podatke:

Weather API zahtjevi konstruirani su kao URL niz. API vraća vremenske podatke za točku na zemlji, specificiranu parom zemljopisna širina/dužina. Imajte na umu da je točnost vremenskih podataka izravno proporcionalna gustoći modula postavljenih u području.

Zahtjev Weather API -ja ima sljedeći oblik:

example.com/retrieve.php?lat=25.96446&lon=53.9443&format=json

Gdje izlazni format (format) može imati bilo koju od sljedećih vrijednosti:

  • JSON (preporučeno), označava izlaz u JavaScript Object Notation (JSON); ili
  • XML, označava izlaz u XML -u, omotan unutar čvora.

Parametri zahtjeva:

Kao što je standardno u svim URL -ovima, parametri se odvajaju znakom ampersand (&). Popis parametara i njihovih mogućih vrijednosti označeni su u nastavku.

Potrebni parametri:

  • lat: Predstavlja zemljopisnu širinu lokacije za pretraživanje. (npr. lat = 19,56875)
  • lon: Predstavlja zemljopisnu dužinu lokacije za pretraživanje. (npr. lon = 72.97568)

Opcijski parametri:

format: Određuje izlazni format odgovora vremenskih podataka. To može biti ili JSON ili XML. Zadana vrijednost je JSON. (npr. format = json ili format = xml)

Vremenski odzivi:

Za svaki valjani zahtjev usluga vremenske zone vratit će odgovor u formatu navedenom u URL -u zahtjeva. Svaki odgovor sadržavat će sljedeće elemente:

  • uspjeh: vrijednost koja označava status odgovora.

    • 0: Negativno; označava da je zahtjev bio neispravno oblikovan.
    • 1: potvrdno; označava da je zahtjev uspješan.
  • poruka: niz koji ukazuje na razlog neispravnosti zahtjeva. Dostupno samo ako je status negativan.
  • data: niz s više vremenskih parametara.

    • temp: podaci o temperaturi.
    • hum: podaci o prisutnosti vlage.
    • pres: podaci o apsolutnom tlaku.
    • aqi: sadašnji indeks kvalitete zraka.

Primjeri odgovora oba formata mogu se vidjeti na slikama.

Korak 5: Postavljanje modula

Postavljanje modula
Postavljanje modula
Postavljanje modula
Postavljanje modula

Pristupna točka je stvorena i web stranica je smještena na IP adresi (zadano: 192.168.4.1) za primanje vjerodajnica od upravitelja uređaja/korisnika pri prvom pokretanju ili ako modul ne pronađe već pohranjene vjerodajnice u EEPROM.

Korisnik mora unijeti SSID i lozinku na koju želi da se modul poveže. Geografska širina i dužina automatski se popunjavaju ako dopustite pregledniku pristup lokaciji.

Nakon što su svi detalji uneseni, kliknite gumb "POŠALJI", a zatim se sve vjerodajnice zapisuju u EEPROM modula.

Ovaj je korak vrlo važan jer, iako se masovno proizvode moduli, nije moguće programirati sve module s točnim podacima o lokaciji i vjerodajnicama za WiFi. Također, nije preporučljivo tvrdo kodirati vjerodajnice u programu jer ako uopće moramo premjestiti modul na neko drugo mjesto ili želimo promijeniti WiFi vjerodajnice, morat ćemo reprogramirati modul. Kako bi se izbjegle ove gnjavaže, implementirana je funkcija početnog postavljanja.

Korak 6: Sada je vrijeme za doprinos podacima u oblaku

Vrijeme je za doprinos podacima u oblaku
Vrijeme je za doprinos podacima u oblaku
Vrijeme je za doprinos podacima u oblaku
Vrijeme je za doprinos podacima u oblaku

Nakon što su dovršeni svi prethodni koraci, vrijeme je da dopustite modulu da učita podatke na poslužitelj. Automatski se počinje učitavati nakon što spremite vjerodajnice.

Poziva "insert.php" kao API poziv s prosljeđivanjem svih parametara za slanje u GET metodi.

Ispod isječak koda prikazuje kako se parametri obrađuju.

if (isset ($ _ GET ['temp']) && isset ($ _ GET ['hum']) && isset ($ _ GET ['pres']) && isset ($ _ GET ['aqi']) && isset ($ _ GET ['mac']) && isset ($ _ GET ['lat']) && isset ($ _ GET ['lon']))) 2. {3. // glavni program 4.}

Tako svi moduli počinju učitavati podatke.

Napomena: Smanjite učestalost učitavanja u kodu ako mislite da se poslužitelj preopterećuje.

Korak 7: Over the Air (OTA) ažuriranje

Over the Air (OTA) ažuriranje
Over the Air (OTA) ažuriranje

Nakon što je modul postavljen i počne učitavati podatke, svaki dan provjerava ima li ažuriranja firmvera u određeno vrijeme navedeno u programu. Ako ih pronađe, preuzima i bljeska binarnu datoteku u njoj. A ako se to ne dogodi, nastavlja se normalni postupak prijenosa podataka.

Za provjeru novog ažuriranja, modul poziva "update.php" slanjem MAC adrese u zaglavlju zahtjeva. Poslužitelj zatim provjerava ima li ta MAC adresa novo ažuriranje, ako da, tada kao odgovor šalje binarnu datoteku najnovijeg firmvera.

Također provjerava jesu li potrebna zaglavlja potrebna za osnovnu provjeru autentičnosti modula.

Korak 8: Kako korisnik/klijent može pristupiti podacima …

Kako korisnik/klijent može pristupiti podacima …
Kako korisnik/klijent može pristupiti podacima …
Kako korisnik/klijent može pristupiti podacima …
Kako korisnik/klijent može pristupiti podacima …
Kako korisnik/klijent može pristupiti podacima …
Kako korisnik/klijent može pristupiti podacima …

Pristup podacima s poslužitelja prilično je jednostavan. Samo pozivom "retrieve.php" dobit ćemo vremenske podatke kao odgovor u JSON formatu. Nakon toga, samo je pitanje raščlanjivanja JSON podataka za pristup pojedinim elementima. Slično je i s XML odgovorom. Korisnik uvijek može odrediti željeni format odgovora u kojem je korisniku ugodno raditi. Ako korisnik ne navede format, zadani format je JSON.

Primjer zahtjeva napravljen je pomoću POSTMAN alata za provjeru rada API -ja.

Primjer raščlanjivanja JSON odgovora u javascriptu prikazan je u donjem isječku koda.

var url = "https://example.com/retrieve.php?lat=19.044848&lon=72.8464373";funkcija httpGet (theUrl) {var xmlHttp = novi XMLHttpRequest (); xmlHttp.open ("GET", theUrl, false); // netočno za sinkroni zahtjev xmlHttp.send (null); return xmlHttp.responseText; } var myVar = httpGet (url); var obj = JSON.parse (myVar); document.getElementById ("aqi"). innerHTML = obj.data [0].aqi; document.getElementById ("temperatura"). innerHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("temp"). innerHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("vlažnost"). innerHTML = Math.round (obj.data [0].hum) + "%"; document.getElementById ("pritisak"). innerHTML = Math.round (obj.data [0].pres) + "mb";

Izvorni kôd primjera HTML stranice koja analizira JSON odgovor dostupan je na kraju ovog koraka.

Napomena: Promijenite proširenje datoteke na ".html".

Korak 9: Ograničenja ovog projekta

  • Projekt koristi GET za slanje podataka; iako se ne radi o osjetljivim podacima, podacima se može lako manipulirati jer nema nikakav mehanizam za provjeru autentičnosti izvora osim provjere zaglavlja, koja se mogu lako izmijeniti, pa se čak i normalni uređaj može lažirati izgledati kao vremenski modul.
  • Budući da se modul isključivo oslanja i ovisi o drugoj pristupnoj točki (WIFI) za slanje podataka koji bi u većini slučajeva pripadali drugim organizacijama. Ako je pristupna točka uopće isključena iz nekog razloga, modul ne bi mogao slati podatke.
  • Iako je projekt izgrađen kako bi se povećala točnost postojećeg sustava, senzor dostupan na tržištu manje je točan od očekivanog što rezultira neuspjehom u njegovoj glavnoj namjeni.
  • Prilikom planiranja projekta planirao sam uključiti način rada u kojem poslužitelj prosječno izračunava vrijednost podataka na temelju lokacije radi ispravljanja pogrešaka. No nakon implementacije ove značajke shvatio sam da su joj potrebni neki API-ji trećih strana za prevođenje koordinata u zemljopisna područja.

Korak 10: Dodatna poboljšanja koja se mogu postići u ovom projektu

  • Točnost modula može se dodatno poboljšati posebnim prilagođavanjem senzora za određenu namjenu umjesto korištenja generičkog modula koji je dostupan na tržištu.
  • Modul se može modificirati da radi još neovisnije pomoću posebnog čipa koji bežično komunicira s mobitelima za slanje podataka čime se poboljšava tolerancija grešaka.
  • Solarni panel i sustav akumulatora mogu se koristiti zajedno s načinom dubokog sna ESP-a čime se poboljšava energetska učinkovitost i čini je neovisnijom od vanjskog napajanja.
  • POST se može koristiti za slanje podataka s nekim mehanizmom provjere autentičnosti, poput upotrebe cikličkih kodova za svaki prijenos podataka.
  • Umjesto NodeMCU-a, koji je prototipna ploča, u masovnoj proizvodnji možemo koristiti prilagođeni mikrokontroler koji ne samo da smanjuje troškove, već i najbolje koristi resurse sustava.
  • Zajedno s Googleovim geolokacijskim API -jem i povezivanjem na bilo koji dostupan otvoreni WIFI, modul može raditi čak i bez njegova konfiguracije; spreman za prijenos podataka iz tvornice bez ikakvih postavki.

Korak 11: Nekoliko riječi za publiku

Nekoliko riječi za publiku
Nekoliko riječi za publiku

Hej dečki, shvatio sam da ovo uopće nije vodič za početnike jer nisam spomenuo svaki detalj koji treba obraditi. A također je i ovaj projekt zaista opsežan da bi se mogao obuhvatiti u Instructable. Ipak, trudio sam se pokriti sve važne aspekte projekta. Također znam da bi video koji prikazuje rad na projektu bio zaista odličan, ali budući da je ovo moje prvo uputstvo i da budem iskren, ovo je moja prva publikacija o nečemu sličnom, bio sam prilično nervozan biti pred fotoaparat.

Dečki, trebate li pomoć u izradi ovog projekta ili nečeg sličnog, samo mi se obratite na [email protected] ili možete ostaviti komentar kao i uvijek. Pokušat ću vam pomoći najbolje što mogu.

Hvala vam!!

Preporučeni: