Sadržaj:

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

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

Video: Pametni distribuirani IoT sistem za praćenje vremena pomoću NodeMCU: 11 koraka
Video: Projekt iz regije i 1.000.000$ giveaway! 💸| CryptoUnity | Analiza #kriptovalute 2024, Novembar
Anonim
Pametni distribuirani IoT sistem za praćenje vremena pomoću NodeMCU -a
Pametni distribuirani IoT sistem za praćenje vremena pomoću NodeMCU -a

Možda ste svi svjesni tradicionalne meteorološke stanice; ali jeste li se ikada zapitali kako to zapravo funkcionira? Budući da je tradicionalna meteorološka stanica skupa i glomazna, gustoća ovih stanica po jedinici površine je vrlo mala što doprinosi 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 manji prostor od postojećeg.

Ovo 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 leži na mom 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 'x' interval. Podaci uključuju stvarne vremenske podatke, geografsku lokaciju modula; tj. njegove koordinate, MAC adresa; za jedinstvenu identifikaciju uređaja, verzije firmvera na kojoj se trenutno koristi. Na strani uređaja nalaze se N-moduli raspoređeni po cijelom području koji aktivno doprinose podacima poslužitelju.

Na strani servera:

Kao što ime govori, centralizirani poslužitelj obavlja 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 servera. Klijent šalje trenutnu lokaciju i na osnovu lokacije poslužitelj izračunava udaljenost između klijenta i svih modula i šalje podatke o vremenu najbližeg modula klijentu koji se smatra tačnim.

Supplies

  • 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 (opcionalno: postavljaju se paralelno s dalekovodom)
  • Arduino IDE (za otklanjanje grešaka i postavljanje programa)
  • POSTMAN aplikacija (opcionalno: za otklanjanje grešaka u API -ju)
  • Veb lokacija (za hostovanje PHP i MySQL servera)

Korak 1: Spajkajte sve komponente i prenesite program na NodeMCU

Spajkajte sve komponente i otpremite program na NodeMCU
Spajkajte sve komponente i otpremite program na NodeMCU
Spajkajte sve komponente i otpremite program na NodeMCU
Spajkajte sve komponente i otpremite program na NodeMCU

Lemite sve komponente na NodeMCU kao što je prikazano na dijagramu kola na perf ploči. Također, lemite kondenzator paralelno s dalekovodima jer dolazi do naglog porasta snage 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" unutar arduino mape skica. Sve datoteke zaglavlja korištene u ovom projektu možete pronaći ovdje

Karakteristike koda:

Pristupna tačka: Budući da je teško programirati svaki modul s vjerodajnicama u masovnoj proizvodnji, modul hostuje 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 se konfiguriraju vjerodajnice, NodeMCU provjerava ima li EEPROM vjerodajnice 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, geografsku lokaciju uređaja.

OTA ažuriranje: Modul takođe 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 se zaglavi ili sruši. To se može postići korištenjem Watchdog tajmera. 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. Kada 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 je takođe vrlo jednostavno. Samo stvorite bazu podataka u SQL serveru 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 servera je zaista 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 svom računaru kao localhost kako biste isprobali rad datoteka.

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

Napomena: Molimo preimenujte ekstenziju datoteka u ".php". Takođe ne zaboravite da promenite akreditive datoteke "config.php".

Samo otpremite datoteke na server i spremni ste.

Daću vam kratke informacije o PHP datotekama.

db_config.php:

U ovoj datoteci su pohranjeni svi vjerodajnici potrebni za povezivanje sa SQL poslužiteljem.

db_connect:

U ovoj datoteci je prisutna klasa potrebna za povezivanje baze podataka.

insert.php:

NodeMCU poziva ovu PHP datoteku za učitavanje podataka na poslužitelj koristeći GET metodu. Ova datoteka je također odgovorna za spremanje istih podataka na SQL server.

retrieve.php:

Korisnik/klijent poziva ovaj PHP koristeći GET metodu. 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 ovoliko 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 informacije za određeni par geografske širine/dužine sa navedenim izlaznim formatom. API vraća temperaturu, vlažnost, pritisak i indeks kvalitete zraka koji je posljednji modul snimio sa tražene lokacije.

Prije nego što počnes:

Ovaj dokument je 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.

Zahtjevi za vremenske podatke:

Weather API zahtjevi konstruirani su kao URL niz. API vraća vremenske podatke za tačku na zemlji, specificiranu parom zemljopisna širina/dužina. Imajte na umu da je točnost vremenskih podataka direktno 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 (&). Lista parametara i njihovih mogućih vrijednosti označena je u nastavku.

Potrebni parametri:

  • lat: Predstavlja geografsku širinu lokacije za pretraživanje. (npr. lat = 19,56875)
  • lon: Predstavlja geografsku 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)

Vremenske reakcije:

Za svaki valjani zahtjev, usluga vremenske zone će vratiti 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 pogrešno 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 sa više vremenskih parametara.

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

Primjeri odgovora oba formata mogu se vidjeti na slikama.

Korak 5: Postavljanje modula

Podešavanje modula
Podešavanje modula
Podešavanje modula
Podešavanje 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.

Kada unesete sve detalje, kliknite na dugme "SEND", a zatim se svi akreditivi zapisuju u EEPROM modula.

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

Korak 6: Sada je vrijeme za doprinos podacima u oblaku

Sada je vrijeme za doprinos podacima u oblaku
Sada je vrijeme za doprinos podacima u oblaku
Sada je vrijeme za doprinos podacima u oblaku
Sada je vrijeme za doprinos podacima u oblaku

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

Poziva "insert.php" kao API poziv sa 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čitavanje učitavanja u kodu ako mislite da se server 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 sve 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 trepće binarnu datoteku u njoj. A ako se to ne dogodi, nastavlja se normalni postupak učitavanja 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 šalje binarnu datoteku najnovijeg firmvera kao odgovor.

Takođe proverava da li su potrebna zaglavlja potrebna za osnovnu autentifikaciju 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 sa servera je prilično jednostavan. Samo pozivanjem "retrieve.php" dobit ćemo vremenske podatke kao odgovor u JSON formatu. Nakon toga, samo je pitanje raščlanjivanja JSON podataka za pristup pojedinačnim elementima. Slično je i sa 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 isječku koda ispod.

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); // netačno za sinhroni zahtev 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 kod primjera HTML stranice koja analizira JSON odgovor dostupan je na kraju ovog koraka.

Napomena: Promijenite nastavak 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 čak i normalni uređaj može biti lažiran 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 iz nekog razloga isključena, modul ne bi mogao slati podatke.
  • Iako je projekt izgrađen kako bi se povećala preciznost postojećeg sistema, senzor dostupan na tržištu je manje precizan od očekivanog što rezultira neuspjehom njegove glavne svrhe.
  • Planirajući projekt, planirao sam uključiti način u kojem poslužitelj prosjekuje vrijednost podataka na temelju lokacije radi ispravljanja grešaka. No, nakon implementacije ove funkcije, shvatio sam da su joj potrebni neki API-ji trećih strana za prevođenje koordinata u geografske regije.

Korak 10: Dodatna poboljšanja koja se mogu učiniti na ovom projektu

  • Tač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 korištenjem posebnog čipa koji bežično komunicira s ćelijskim tornjevima za slanje podataka čime se poboljšava tolerancija grešaka.
  • Solarni panel i sistem baterija mogu se koristiti zajedno sa načinom dubokog sna ESP-a, poboljšavajući tako energetsku efikasnost i čineći je nezavisnijom od vanjskog napajanja.
  • POST se može koristiti za slanje podataka s nekim mehanizmom provjere autentičnosti, poput upotrebe cikličnih 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 sistemske resurse.
  • Zajedno s Googleovim geolokacijskim API -jem i povezivanjem na bilo koji dostupan otvoreni WIFI, modul može raditi čak i bez njegovog konfiguriranja; spreman za prijenos podataka izvan tvornice bez ikakvih postavki.

Korak 11: Nekoliko riječi za publiku

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

Hej momci, shvaćam da ovo uopće nije vodič za početnike jer nisam spomenuo svaki detalj koji treba pokriti. A također je i ovaj projekt zaista opsežan za pokrivanje u Instructable. Ipak, trudio sam se pokriti sve važne aspekte projekta. Takođe znam da bi video koji prikazuje rad projekta bio zaista odličan, ali budući da je ovo moja prva instrukcija i da budem iskren, ovo je moja prva publikacija o nečemu sličnom, bio sam prilično nervozan što sam bio pred kameru.

Ako vam treba pomoć u izradi ovog projekta ili nečeg sličnog, samo mi se obratite na [email protected] ili ostavite komentar kao i uvijek. Pokušat ću vam pomoći koliko god mogu.

Hvala ti!!

Preporučuje se: