Kazalo:

Pametni distribuirani sistem za spremljanje vremena IoT z uporabo NodeMCU: 11 korakov
Pametni distribuirani sistem za spremljanje vremena IoT z uporabo NodeMCU: 11 korakov

Video: Pametni distribuirani sistem za spremljanje vremena IoT z uporabo NodeMCU: 11 korakov

Video: Pametni distribuirani sistem za spremljanje vremena IoT z uporabo NodeMCU: 11 korakov
Video: Система мониторинга солнечных панелей Home Assistant 2024, December
Anonim
Pametni porazdeljeni IoT sistem za spremljanje vremena z uporabo NodeMCU
Pametni porazdeljeni IoT sistem za spremljanje vremena z uporabo NodeMCU

Morda se vsi zavedate tradicionalne vremenske postaje; a ste se kdaj vprašali, kako v resnici deluje? Ker je tradicionalna vremenska postaja draga in obsežna, je gostota teh postaj na enoto površine zelo manjša, kar prispeva k netočnosti podatkov. Pojasnil vam bom, kako: Predpostavimo, da se postaja nahaja sredi mesta in je edina postaja, ki se nahaja v polmeru "x" metra, zato je lahko zlahka pristranska, če je v bližini prisoten povzročitelj onesnaženja postaje, ki prikazuje celotno območje polmera 'x' kot onesnaženo, saj je ta posamezna postaja odgovorna za določanje vremenskih podatkov za celotno območje.

Za premagovanje te težave je treba povečati gostoto modulov, kar je mogoče le, če so moduli cenejši in imajo manjši odtis od obstoječega.

To je razlog, zakaj je moja predlagana rešitev popolna rešitev za to težavo, stane manj kot 10 USD in se zlahka opira na mojo dlan.

Kako deluje…

V tem projektu so trije glavni deli.

Stran naprave:

Naprava je modul IoT, prikazan na sliki, ki vsake časovne intervale 'x' pošilja vremenske podatke strežniku. Podatki vključujejo dejanske vremenske podatke, geografsko lego modula; tj. njegove koordinate, naslov MAC; za enolično identifikacijo naprave, različice vdelane programske opreme, na kateri se trenutno izvaja. Na strani naprave so N-moduli, razporejeni po celotnem območju, ki aktivno prispevajo k strežniku.

Na strani strežnika:

Kot že ime pove, gre za centraliziran strežnik, ki upravlja več operacij, kot so sprejem podatkov iz modulov in shranjevanje v zbirko podatkov, posodobitev modula z najnovejšo vdelano programsko opremo, če deluje na starejši različici, pošiljanje vremenskih podatkov stranka na zahtevo.

Stranka/uporabnik:

Končni uporabnik od strežnika zahteva vremenske podatke. Odjemalec pošlje trenutno lokacijo in na podlagi lokacije strežnik izračuna razdaljo med odjemalcem in vsemi moduli ter odjemalcu pošlje vremenske podatke najbližjega modula, ki veljajo za točne.

Zaloge

  • NodeMCU (ESP8266-12E)
  • DHT11 (senzor vlažnosti in temperature)
  • BMP180 (senzor tlaka in temperature)
  • MQ-135 (senzor indeksa kakovosti zraka)
  • USB kabel (za nalaganje programa)
  • 5 voltni napajalnik
  • Kondenzatorji (neobvezno: postavljeni vzporedno z daljnovodom)
  • Arduino IDE (za odpravljanje napak in nalaganje programa)
  • Aplikacija POSTMAN (neobvezno: za odpravljanje napak API -ja)
  • Spletno mesto (za gostovanje strežnikov PHP in MySQL)

1. korak: Spajkajte vse komponente in naložite program v NodeMCU

Spajkajte vse komponente in naložite program v NodeMCU
Spajkajte vse komponente in naložite program v NodeMCU
Spajkajte vse komponente in naložite program v NodeMCU
Spajkajte vse komponente in naložite program v NodeMCU

Spajite vse komponente na NodeMCU, kot je prikazano na shemi vezja na plošči perf. Prav tako spajkajte kondenzator vzporedno z daljnovodi, saj med aktivnim prenosom in sprejemom podatkov moč naraste.

Ko je spajkanje končano, naložite kodo v datoteki "code.c".

Opomba: Ne pozabite zamenjati poverilnic s svojimi. Datoteko z imenom "html_file.h" postavite tudi v mapo skice arduino. Vse datoteke z glavo, uporabljene v tem projektu, najdete tukaj

Značilnosti kode:

Dostopna točka: Ker je težko programirati vsak modul s poverilnicami v množični proizvodnji, modul ob prvem zagonu gosti spletno stran, ki sprejme poverilnice WiFi, na katere se morajo moduli povezati, in jih shrani v EEPROM za kasnejšo uporabo.

Ko so poverilnice konfigurirane, NodeMCU preveri poverilnice EEPROM in se poveže s poverilnicami WiFi v EEPROM -u.

Po uspešni povezavi z omrežjem NodeMCU začne nalaganje podatkov na strežnik vsakega časovnega intervala 'x'; podatki vključujejo vremenske podatke, naslov MAC modula, različico vdelane programske opreme, geografsko lokacijo naprave.

Posodobitev OTA: Modul prav tako vsak dan ob določenem času, določenem v kodi, preveri, ali so na voljo nove posodobitve vdelane programske opreme. Ta funkcija je uporabna, ker noben proizvajalec ne more nadaljevati in spremeniti programa posameznega modula v primeru kakršnih koli sprememb.

Watchdog Timer: Atlast mora obstajati način, da si opomore brez človeškega posredovanja, če se zatakne ali zruši. To lahko dosežete s časovnikom Watchdog. To deluje tako: Obstaja podprogram Prekinitev, ki se izvaja vsako sekundo. ISR vsakič, ko se izvede, poveča števec in preveri, ali je števec dosegel največje število. Ko števec doseže največjo vrednost, se modul ponastavi, če se je zrušil. Pri normalnem delovanju se števec vedno ponastavi, preden doseže največje število.

2. korak: Konfiguriranje strežnika SQL

Konfiguriranje strežnika SQL
Konfiguriranje strežnika SQL

Tudi nastavitev strežnika SQL Server je zelo preprosta. Samo ustvarite bazo podatkov v strežniku SQL in uvozite nastavitev z uvozom datoteke z imenom "database_structure.txt". Datoteko najdete v tem koraku. Ker navodila ne dovoljujejo nalaganja datotek ».sql«, sem datoteko preimenovala v ».txt«.

Opomba: Preimenujte datoteko iz ".txt" v ".sql".

3. korak: Konfiguriranje datotečnega strežnika

Konfiguriranje strežnika je zelo enostavno, če imate spletno mesto in gostuje na spletu. Ne bom šel skozi celoten postopek nastavitve spletnega mesta in njegovega gostovanja, saj to presega obseg te vadnice. Lahko pa ga gostite v svojem računalniku kot localhost, da preizkusite delovanje datotek.

Ker Instructable ne dovoljuje nalaganja datotek PHP, sem jih preimenoval v ".txt".

Opomba: Razširitev datotek preimenujte v ".php". Prav tako ne pozabite spremeniti poverilnic datoteke "config.php".

Samo naložite datoteke na strežnik in ste pripravljeni.

Povedal vam bom kratke informacije o datotekah PHP.

db_config.php:

V tej datoteki so shranjene vse poverilnice, potrebne za povezavo s strežnikom SQL.

db_connect:

V tej datoteki je razred, potreben za povezavo z bazo podatkov.

insert.php:

NodeMCU pokliče to datoteko PHP za nalaganje podatkov v strežnik po metodi GET. Ta datoteka je odgovorna tudi za shranjevanje istih podatkov v strežnik SQL.

retrieve.php:

Uporabnik/odjemalec pokliče ta PHP z uporabo metode GET. Strežnik izračuna razdaljo med uporabnikom in vsemi moduli. Nato se podatki najbližjega modula pošljejo kot odgovor odjemalcu v formatu JSON/XML po želji odjemalca.

update.php:

Modul kliče to datoteko PHP vsak dan ob določenem času, da preveri, ali modul uporablja najnovejšo različico vdelane programske opreme. Najnovejšo datoteko ".bin" postavite v datotečni strežnik in v spremenljivki datoteke določite imenik datoteke.

Če se vam na prvi pogled zdi to veliko datotek, sem v naslednji korak vključil uporabniško dokumentacijo.

4. korak: Uporabniška dokumentacija

Uporabniška dokumentacija
Uporabniška dokumentacija
Uporabniška dokumentacija
Uporabniška dokumentacija

Uvod:

Weather API ponuja preprost vmesnik za zahtevo vremenskih podatkov za lokacije na površini zemlje. Zahtevate vremenske informacije za določen par zemljepisne širine/dolžine z določeno obliko izhoda. API vrne indeks temperature, vlažnosti, tlaka in kakovosti zraka, ki ga je najbližji modul nazadnje zabeležil z zahtevane lokacije.

Preden začneš:

Ta dokument je namenjen razvijalcem spletnih mest in mobilnih naprav, ki želijo v aplikacijo, ki se razvija, vključiti vremenske podatke. Uvaja uporabo z uporabo API -ja in referenčnega gradiva o razpoložljivih parametrih.

Zahteve za vremenske podatke:

Zahteve API Weather so izdelane kot niz URL. API vrača vremenske podatke za točko na zemlji, ki jo določa par zemljepisna širina/dolžina. Upoštevajte, da je natančnost vremenskih podatkov neposredno sorazmerna z gostoto modulov, postavljenih na območje.

Zahteva Weather API ima naslednjo obliko:

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

Kjer je lahko izhodna oblika (oblika) ena od naslednjih vrednosti:

  • JSON (priporočeno), označuje izhod v zapisu objekta JavaScript (JSON); ali
  • XML označuje izhod v XML, zavit v vozlišču.

Parametri zahteve:

Kot je običajno pri vseh URL -jih, so parametri ločeni z znakom (&). Seznam parametrov in njihovih možnih vrednosti je označen spodaj.

Zahtevani parametri:

  • lat: Predstavlja zemljepisno širino lokacije za iskanje. (npr. lat = 19,56875)
  • lon: Predstavlja dolžino lokacije za iskanje. (npr. lon = 72.97568)

Izbirni parametri:

format: Določa izhodno obliko odziva vremenskih podatkov. Lahko je JSON ali XML. Privzeto je JSON. (npr. format = json ali format = xml)

Vremenski odzivi:

Za vsako veljavno zahtevo bo storitev časovnega pasu vrnila odgovor v obliki, ki je navedena v URL -ju zahteve. Vsak odgovor bo vseboval naslednje elemente:

  • uspeh: vrednost, ki označuje stanje odgovora.

    • 0: Negativno; označuje, da je bila zahteva napačno oblikovana.
    • 1: pritrdilno; označuje, da je bila zahteva uspešna.
  • sporočilo: niz, ki označuje razlog za napako zahteve. Na voljo samo, če je stanje negativno.
  • data: niz z več vremenskimi parametri.

    • temp: temperaturni podatki.
    • hum: podatki o prisotnosti vlage.
    • pres: podatki o absolutnem tlaku.
    • aqi: sedanji indeks kakovosti zraka.

Primeri odzivov obeh formatov so razvidni iz slik.

5. korak: Nastavitev modula

Nastavitev modula
Nastavitev modula
Nastavitev modula
Nastavitev modula

Ustvari se dostopna točka in spletna stran gostuje na naslovu IP (privzeto: 192.168.4.1) za sprejem poverilnic od upravitelja/uporabnika naprave ob prvem zagonu ali če modul ne najde že shranjenih poverilnic v EEPROM.

Uporabnik mora vnesti SSID in geslo, s katerim želi, da se modul poveže. Zemljepisna širina in dolžina se samodejno zapolnita, če brskalniku dovolite dostop do lokacije.

Ko vnesete vse podrobnosti, kliknite gumb "POŠLJI", nato pa se vse poverilnice zapišejo v EEPROM modula.

Ta korak je zelo pomemben, saj med množično proizvodnjo modulov ni mogoče programirati vseh modulov z natančnimi podatki o lokaciji in poverilnicami WiFi. Prav tako ni priporočljivo trdo kodirati poverilnic v programu, saj če moramo sploh prestaviti modul na drugo mesto ali želimo spremeniti poverilnice WiFi, bomo morali modul ponovno programirati. Da bi se izognili tem težavam, je izvedena funkcija začetne nastavitve.

Korak 6: Zdaj je čas, da prispevate podatke v oblak

Zdaj je čas za prispevanje podatkov v oblak
Zdaj je čas za prispevanje podatkov v oblak
Zdaj je čas za prispevanje podatkov v oblak
Zdaj je čas za prispevanje podatkov v oblak

Ko so vsi prejšnji koraki zaključeni, je čas, da modulu omogočite nalaganje podatkov na strežnik. Nalaganje se samodejno začne, ko shranite poverilnice.

Pokliče "insert.php" kot klic API -ja s posredovanjem vseh parametrov za pošiljanje v metodi GET.

Spodnji delček kode prikazuje, kako se parametri obdelujejo.

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 vsi moduli začnejo nalagati podatke.

Opomba: Zmanjšajte pogostost nalaganja v kodi, če menite, da je strežnik preobremenjen.

7. korak: Posodobitev po zraku (OTA)

Over the Air (OTA) posodobitev
Over the Air (OTA) posodobitev

Ko je modul nastavljen in začne nalagati podatke, vsak dan ob določenem času, omenjenem v programu, preveri posodobitve vdelane programske opreme. Če jih najde, prenese in utripa binarno datoteko v njej. Če se to ne zgodi, se nadaljuje normalno nalaganje podatkov.

Za preverjanje nove posodobitve modul pokliče "update.php" tako, da v naslov zahteve pošlje naslov MAC. Strežnik nato preveri, ali ima ta določen naslov MAC kakšno novo posodobitev, če da, potem v odgovor pošlje binarno datoteko najnovejše vdelane programske opreme.

Prav tako preveri vse potrebne glave, potrebne za osnovno preverjanje pristnosti modula.

8. korak: Kako lahko uporabnik/odjemalec dostopa do podatkov …

Kako lahko uporabnik/odjemalec dostopa do podatkov …
Kako lahko uporabnik/odjemalec dostopa do podatkov …
Kako lahko uporabnik/odjemalec dostopa do podatkov …
Kako lahko uporabnik/odjemalec dostopa do podatkov …
Kako lahko uporabnik/odjemalec dostopa do podatkov …
Kako lahko uporabnik/odjemalec dostopa do podatkov …

Dostop do podatkov s strežnika je precej preprost. Samo s klicem "retrieve.php" bomo v odgovor dobili vremenske podatke v obliki JSON. Po tem je le še vprašanje razčlenitve podatkov JSON za dostop do posameznih elementov. Podobno je z odzivom XML. Uporabnik lahko vedno navede želeno obliko odziva, v kateri je uporabniku udobno delati. Če uporabnik ne določi oblike, je privzeta oblika JSON.

Z orodjem POSTMAN je podana vzorčna zahteva za preverjanje delovanja API -ja.

Primer razčlenjevanja odgovora JSON v javascript je prikazan v spodnjem delčku kode.

var url = "https://example.com/retrieve.php?lat=19.044848&lon=72.8464373";funkcija httpGet (theUrl) {var xmlHttp = nov XMLHttpRequest (); xmlHttp.open ("GET", theUrl, false); // napačno za sinhrono zahtevo 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 ("pritisk"). innerHTML = Math.round (obj.data [0].pres) + "mb";

Izvorna koda vzorčne strani HTML, ki razčlenjuje odgovor JSON, je na voljo na koncu tega koraka.

Opomba: Spremenite razširitev datoteke na ".html".

9. korak: Omejitve tega projekta

  • Projekt uporablja GET za pošiljanje podatkov; čeprav ne obravnava občutljivih podatkov, je mogoče z njimi enostavno upravljati, saj nima nobenega mehanizma za preverjanje pristnosti vira, razen preverjanja glav, ki jih je mogoče zlahka spremeniti in celo običajno napravo je mogoče ponarediti videti kot vremenski modul.
  • Ker se modul izključno opira in je odvisen od druge dostopne točke (WIFI) za pošiljanje podatkov, ki bi bili v večini primerov iz drugih organizacij. Če je dostopna točka iz nekega razloga izključena, modul ne bo mogel pošiljati podatkov.
  • Čeprav je projekt zgrajen za povečanje natančnosti obstoječega sistema, je senzor, ki je na voljo na trgu, manj natančen od pričakovanega, kar posledično vodi do neuspeha njegovega glavnega namena.
  • Med načrtovanjem projekta sem nameraval vključiti način, v katerem strežnik povpreči vrednost podatkov glede na lokacijo za odpravo napak. Ko pa sem uvedel to funkcijo, sem spoznal, da za prevedbo koordinat v geografske regije potrebuje nekaj vmesnikov drugih proizvajalcev.

10. korak: Dodatne izboljšave tega projekta

  • Natančnost modula je mogoče dodatno izboljšati s posebno prilagoditvijo senzorjev za posebne namene, namesto da bi uporabili splošni modul, ki je na voljo na trgu.
  • Modul lahko spremenite tako, da deluje še bolj samostojno z uporabo posebnega čipa, ki brezžično komunicira s celičnimi stolpi za pošiljanje podatkov in tako izboljša toleranco napak.
  • Sončni kolektor in akumulatorski sistem se lahko uporabljata skupaj z načinom globokega spanja ESP, s čimer se izboljša energetska učinkovitost in postane bolj neodvisna od zunanjega napajanja.
  • POST se lahko uporablja za pošiljanje podatkov z nekim mehanizmom preverjanja pristnosti, kot je uporaba cikličnih kod za vsak prenos podatkov.
  • Namesto NodeMCU, ki je prototipna plošča, lahko v množični proizvodnji uporabimo mikrokrmilnik po meri, ki ne le zmanjša stroške, ampak tudi najbolje izkoristi sistemske vire.
  • V povezavi z Googlovim API -jem za geolokacijo in povezovanjem z vsemi razpoložljivimi odprtimi WIFI lahko modul deluje, ne da bi ga celo konfiguriral; pripravljen za prenos podatkov iz tovarne brez kakršnih koli nastavitev.

11. korak: Nekaj besed za občinstvo

Nekaj besed za občinstvo
Nekaj besed za občinstvo

Hej fantje, zavedam se, da to sploh ni vadnica za začetnike, saj nisem omenil vseh podrobnosti, ki jih je treba obravnavati. In tudi ta projekt je res obsežen, da bi ga lahko obravnavali v Instructable. Kljub temu sem se po svojih najboljših močeh trudil pokriti vse pomembne vidike projekta. Vem tudi, da bi bil videoposnetek, ki prikazuje delo projekta, res odličen, a ker je to moja prva pouka in če sem iskren, je to moja prva objava česa podobnega, bil sem precej nervozen, da bi bil pred kamero.

Če potrebujete pomoč pri izdelavi tega projekta ali česa podobnega, se obrnite na mene na [email protected] ali pa pustite komentar kot vedno. Poskušal vam bom pomagati po svojih najboljših močeh.

Hvala vam!!

Priporočena: