Sisällysluettelo:

Älykäs hajautettu IoT -säävalvontajärjestelmä NodeMCU: n avulla: 11 vaihetta
Älykäs hajautettu IoT -säävalvontajärjestelmä NodeMCU: n avulla: 11 vaihetta

Video: Älykäs hajautettu IoT -säävalvontajärjestelmä NodeMCU: n avulla: 11 vaihetta

Video: Älykäs hajautettu IoT -säävalvontajärjestelmä NodeMCU: n avulla: 11 vaihetta
Video: Human vs Robot | Artificial Intelligence 2024, Heinäkuu
Anonim
Älykäs hajautettu IoT -säävalvontajärjestelmä NodeMCU: n avulla
Älykäs hajautettu IoT -säävalvontajärjestelmä NodeMCU: n avulla

Kaikki saattavat olla tietoisia perinteisestä sääasemasta; mutta oletko koskaan miettinyt, miten se todella toimii? Koska perinteinen sääasema on kallis ja tilaa vievä, näiden asemien tiheys pinta -alayksikköä kohti on hyvin pieni, mikä osaltaan lisää tietojen epätarkkuutta. Selitän sinulle, miten: Oletetaan, että asema sijaitsee keskellä kaupunkia ja se on ainoa asema, joka sijaitsee x metrin säteellä, ja se voi olla helposti puolueellinen, jos lähistöllä on saastumista aiheuttavaa ainetta Aseman koko x -säteen alue on saastunut, koska kyseinen asema on vastuussa koko alueen säätietojen määrittämisestä.

Tämän ongelman ratkaisemiseksi moduulien tiheyttä on lisättävä, mikä on mahdollista vain, jos moduulit ovat halvempia ja vievät pienemmän jalanjäljen kuin nykyinen.

Tästä syystä ehdotettu ratkaisuni on täydellinen ratkaisu tähän ongelmaan, se maksaa alle 10 dollaria ja lepää myös helposti kämmenelläni.

Kuinka se toimii…

Tässä projektissa on 3 pääosaa.

Laitteen puoli:

Laite on kuvassa näkyvä IoT -moduuli, joka lähettää säätiedot palvelimelle x -aikavälein. Tiedot sisältävät todelliset säätiedot, moduulin maantieteellisen sijainnin; eli sen koordinaatit, sen MAC -osoite; laitteen yksilöimiseksi, laiteohjelmistoversio, jolla se parhaillaan toimii. Laitteen puolella on N-moduuleja, jotka on jaettu koko alueelle ja jotka aktiivisesti tuottavat tietoja palvelimelle.

Palvelimen puolella:

Kuten nimestä voi päätellä, keskitetty palvelin hoitaa useita toimintoja, kuten tietojen vastaanottamisen moduuleista ja tallentamisen tietokantaan, moduulin päivittämisen uusimmalla laiteohjelmistolla, jos se toimii vanhemmassa versiossa, ja lähettää säätiedot asiakas pyynnöstä.

Asiakas/käyttäjäpuoli:

Loppukäyttäjä pyytää säätietoja palvelimelta. Asiakas lähettää nykyisen sijainnin ja sijainnin perusteella palvelin laskee etäisyyden asiakkaan ja kaikkien moduulien välillä ja lähettää lähimmän moduulin säätiedot asiakkaalle, jota pidetään tarkana.

Tarvikkeet

  • NodeMCU (ESP8266-12E)
  • DHT11 (kosteus- ja lämpötila -anturi)
  • BMP180 (paine- ja lämpötila -anturi)
  • MQ-135 (ilmanlaatuindeksianturi)
  • USB -kaapeli (ohjelman lataamiseen)
  • 5 voltin virtalähde
  • Kondensaattorit (valinnainen: sijoitettava rinnakkain sähkölinjan kanssa)
  • Arduino IDE (ohjelman virheenkorjaus ja lataaminen)
  • POSTMAN -sovellus (valinnainen: sovellusliittymän virheenkorjaus)
  • Verkkosivusto (PHP- ja MySQL -palvelimen isännöintiä varten)

Vaihe 1: Juottaa kaikki komponentit ja ladata ohjelman NodeMCU: hon

Juottaa kaikki komponentit ja ladata ohjelman NodeMCU: hon
Juottaa kaikki komponentit ja ladata ohjelman NodeMCU: hon
Juottaa kaikki komponentit ja ladata ohjelman NodeMCU: hon
Juottaa kaikki komponentit ja ladata ohjelman NodeMCU: hon

Juotos kaikki komponentit NodeMCU -laitteeseen piirilevyn piirikaavion mukaisesti. Juotetaan myös kondensaattori rinnakkain sähkölinjojen kanssa, koska teho nousee aktiivisen tiedonsiirron ja vastaanoton aikana.

Kun juotos on tehty, lataa koodissa tiedosto "code.c".

Huomautus: Muista korvata kirjautumistiedot omilla kirjautumistiedoillasi. Aseta myös tiedosto nimeltä "html_file.h" arduino -luonnoskansioon. Kaikki tässä projektissa käytetyt otsikkotiedostot löytyvät täältä

Koodin ominaisuudet:

Tukiasema: Koska jokaisen moduulin ohjelmointi on vaikeaa ohjelmoida massatuotannossa, moduuli isännöi ensimmäisellä käynnistyksellä verkkosivun hyväksymään sen WiFi -tunnistetiedot, johon moduulit on yhdistettävä, ja tallentaa EEPROMiin myöhempää käyttöä varten.

Kun kirjautumistiedot on määritetty, NodeMCU tarkistaa EEPROM -tunnistetiedot ja muodostaa yhteyden EEPROMissa oleviin WiFi -tunnistetietoihin.

Kun Wi -Fi -yhteys on muodostettu onnistuneesti, NodeMCU alkaa ladata tietoja palvelimelle joka x -aikaväli, tiedot sisältävät säätiedot, moduulin MAC -osoitteen, laiteohjelmiston version, laitteen maantieteellisen sijainnin.

OTA -päivitys: Moduuli tarkistaa myös uusia laiteohjelmistopäivityksiä päivittäin tietyssä koodissa määritellyssä ajassa. Tämä ominaisuus on hyödyllinen, koska mikään valmistaja ei voi jatkaa yksittäisen moduulin ohjelmaa, jos siihen on tehtävä muutoksia.

Vahtikoira -ajastin: Atlastilla on oltava tapa toipua ilman ihmisen väliintuloa, jos se jumittuu tai kaatuu. Tämä voidaan saavuttaa käyttämällä Watchdog -ajastinta. Tämä toimii seuraavasti: On olemassa keskeytysalirutiini, joka suoritetaan joka sekunti. ISR lisää laskuria joka kerta, kun se suorittaa, ja tarkistaa, onko laskuri saavuttanut enimmäismäärän. Kun laskuri saavuttaa maksimiarvon, moduuli nollautuu olettaen, että se on kaatunut. Normaalikäytössä laskuri nollautuu aina ennen kuin se saavuttaa maksimilukeman.

Vaihe 2: SQL -palvelimen määrittäminen

SQL -palvelimen määrittäminen
SQL -palvelimen määrittäminen

SQL Serverin asennus on myös todella yksinkertaista. Luo vain tietokanta SQL -palvelimelle ja tuo asetus tuomalla tiedosto nimeltä "database_structure.txt". Löydät tiedoston tässä vaiheessa. Koska ohje ei salli.sql -tiedostojen lataamista, olen nimennyt tiedoston uudelleen nimeksi.txt.

Huomautus: Nimeä tiedosto uudelleen.txt -tiedostosta muotoon.sql.

Vaihe 3: Tiedostopalvelimen määrittäminen

Palvelimen määrittäminen on todella helppoa, jos omistat verkkosivuston ja sitä isännöidään verkossa. En käy läpi koko verkkosivuston perustamis- ja isännöintiprosessia, koska se ei kuulu tämän opetusohjelman soveltamisalaan. Mutta voit isännöidä sitä omalla tietokoneellasi localhostina kokeillaksesi tiedostojen toimintaa.

Koska Instructable ei salli PHP -tiedostojen lataamista, olen nimennyt tiedostot uudelleen.txt -tiedostoksi.

Huomautus: Nimeä tiedostopääte uudelleen ".php". Älä myöskään unohda muuttaa "config.php" -tiedoston tunnistetietoja.

Lataa tiedostot palvelimelle ja olet valmis.

Annan sinulle lyhyen tiedon PHP -tiedostoista.

db_config.php:

Tähän tiedostoon tallennetaan kaikki SQL -palvelimeen yhdistämiseen tarvittavat kirjautumistiedot.

db_connect:

Tässä tiedostossa on tietokantayhteyden edellyttämä luokka.

insert.php:

NodeMCU kutsuu tätä PHP -tiedostoa tietojen lataamiseksi palvelimelle GET -menetelmällä. Tämä tiedosto vastaa myös samojen tietojen tallentamisesta SQL -palvelimelle.

retrieve.php:

Käyttäjä/asiakas kutsuu tätä PHP: tä GET -menetelmällä. Palvelin laskee käyttäjän ja kaikkien moduulien välisen etäisyyden. Sitten lähimmän moduulin tiedot lähetetään vastauksena asiakkaalle JSON/XML -muodossa, kuten asiakas haluaa.

update.php:

Moduuli kutsuu tätä PHP -tiedostoa päivittäin tiettyyn aikaan tarkistaakseen, onko moduulissa käytössä laiteohjelmiston uusin versio. Aseta vain uusin.bin -tiedosto tiedostopalvelimelle ja määritä tiedoston hakemisto tiedoston muuttujassa.

Jos nämä monet tiedostot näyttävät aluksi pelottavilta, olen sisällyttänyt käyttäjän dokumentaation seuraavaan vaiheeseen.

Vaihe 4: Käyttäjän dokumentaatio

Käyttäjän dokumentaatio
Käyttäjän dokumentaatio
Käyttäjän dokumentaatio
Käyttäjän dokumentaatio

Johdanto:

Sää -sovellusliittymä tarjoaa yksinkertaisen käyttöliittymän, jolla voit pyytää säätietoja maan pinnalla olevista sijainneista. Pyydät säätietoja tietylle leveys- ja pituusasteparille määritetyllä tulostusmuodolla. Sovellusliittymä palauttaa lämpötilan, kosteuden, paineen ja ilmanlaatuindeksin, jonka lähin moduuli on viimeksi tallentanut pyydetystä paikasta.

Ennen kuin aloitat:

Tämä asiakirja on tarkoitettu verkkosivustojen ja mobiilikehittäjille, jotka haluavat sisällyttää säätiedot kehitettävään sovellukseen. Se esittelee käyttöliittymän ja käytettävissä olevien parametrien vertailumateriaalin.

Säätietopyynnöt:

Weather -sovellusliittymäpyynnöt muodostetaan URL -merkkijonoksi. Sovellusliittymä palauttaa maanpisteen säätiedot, jotka määrittelee leveys-/pituusastepari. Huomaa, että säätietojen tarkkuus on suoraan verrannollinen alueelle sijoitettujen moduulien tiheyteen.

Weather API -pyyntö on seuraavassa muodossa:

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

Jos tulostusmuoto (muoto) voi olla jompikumpi seuraavista arvoista:

  • JSON (suositus), ilmaisee JavaScript -objektimerkinnän (JSON) tuloksen; tai
  • XML, ilmaisee ulostulon XML: ssä solmun sisällä.

Pyynnön parametrit:

Kuten kaikissa URL -osoitteissa on vakio, parametrit erotetaan käyttämällä & -merkkiä (&). Alla on luettelo parametreista ja niiden mahdollisista arvoista.

Vaaditut parametrit:

  • lat: edustaa haettavan sijainnin leveysastetta. (esim. lat = 19,56875)
  • lon: edustaa etsittävän sijainnin pituuspiiriä. (esim. lon = 72.97568)

Valinnaiset parametrit:

muoto: Määrittää säätietojen vastausmuodon. Se voi olla joko JSON tai XML. Oletus on JSON. (esim. muoto = json tai muoto = xml)

Sään vastaukset:

Aikavyöhykepalvelu palauttaa jokaiselle kelvolliselle pyynnölle vastauksen pyynnön URL -osoitteessa ilmoitetussa muodossa. Jokainen vastaus sisältää seuraavat elementit:

  • menestys: arvo, joka ilmaisee vastauksen tilan.

    • 0: negatiivinen; osoittaa, että pyyntö on muotoiltu väärin.
    • 1: myöntävä; osoittaa, että pyyntö onnistui.
  • viesti: merkkijono, joka ilmaisee pyynnön virheellisyyden syyn. Käytettävissä vain, kun tila on negatiivinen.
  • data: taulukko, jossa on useita sääparametreja.

    • temp: lämpötilatiedot.
    • hum: kosteuden läsnäolotiedot.
    • pres: absoluuttisen paineen tiedot.
    • aqi: nykyinen ilmanlaatuindeksi.

Kummankin muodon esimerkkivastaus näkyy kuvissa.

Vaihe 5: Moduulin asennus

Moduulin asetukset
Moduulin asetukset
Moduulin asetukset
Moduulin asetukset

Luodaan tukiasema ja isännöidään verkkosivua IP-osoitteessa (oletus: 192.168.4.1), jotta se voi vastaanottaa tunnistetiedot laitehallinnalta/käyttäjältä ensimmäisellä käynnistyksellä tai jos moduuli ei löydä jo tallennettuja kirjautumistietoja EEPROM.

Käyttäjän on annettava SSID ja salasana, johon käyttäjä haluaa moduulin muodostavan yhteyden. Leveys- ja pituusaste täytetään automaattisesti, jos sallit selaimen käyttää sijaintia.

Kun kaikki tiedot on syötetty, napsauta "LÄHETÄ" -painiketta ja sitten kaikki tunnistetiedot kirjoitetaan moduulin EEPROM -järjestelmään.

Tämä vaihe on erittäin tärkeä, koska moduulien massatuotannon aikana ei ole mahdollista ohjelmoida kaikkia moduuleja niiden tarkilla sijaintitiedoilla ja WiFi-tunnuksilla. Myöskään ei ole suositeltavaa koodata ohjelman tunnistetietoja ohjelmassa, koska jos meidän on siirrettävä moduuli toiseen paikkaan tai jos haluamme muuttaa WiFi-tunnistetietoja, meidän on ohjelmoitava moduuli uudelleen. Tämän vaivan välttämiseksi alkuasetustoiminto on otettu käyttöön.

Vaihe 6: Nyt on aika lähettää tietoja pilveen

Nyt on aika tuoda dataa pilveen
Nyt on aika tuoda dataa pilveen
Nyt on aika tuoda dataa pilveen
Nyt on aika tuoda dataa pilveen

Kun kaikki edelliset vaiheet on suoritettu, nyt on aika antaa moduulin ladata tiedot palvelimelle. Lataus alkaa automaattisesti, kun olet tallentanut kirjautumistiedot.

Se kutsuu "insert.php" -sovellusliittymäkutsuksi ja välittää kaikki parametrit lähetettäväksi GET -menetelmällä.

Alla oleva koodinpätkä näyttää, miten parametrit käsitellään.

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

Kaikki moduulit alkavat ladata tietoja.

Huomautus: Laske lähetystaajuutta koodissa, jos palvelin ylikuormittuu.

Vaihe 7: Over the Air (OTA) -päivitys

Over the Air (OTA) -päivitys
Over the Air (OTA) -päivitys

Kun moduuli on valmis ja se alkaa ladata tietoja, se tarkistaa laiteohjelmistopäivitykset päivittäin ohjelmassa mainittuna ajankohtana. Jos se löytää, se lataa ja vilkuttaa siinä olevan binaaritiedoston. Jos näin ei tapahdu, tietojen lataamista jatketaan normaalisti.

Tarkistaakseen uuden päivityksen moduuli kutsuu "update.php" lähettämällä MAC -osoitteen pyyntöotsikkoonsa. Palvelin tarkistaa sitten, onko kyseisellä MAC -osoitteella uusia päivityksiä, jos kyllä, se lähettää vastauksena uusimman laiteohjelmiston binaaritiedoston.

Se tarkistaa myös kaikki tarvittavat otsikot, joita tarvitaan moduulin perustodennukseen.

Vaihe 8: Kuinka käyttäjä/asiakas voi käyttää tietoja…

Kuinka käyttäjä/asiakas voi käyttää tietoja…
Kuinka käyttäjä/asiakas voi käyttää tietoja…
Kuinka käyttäjä/asiakas voi käyttää tietoja…
Kuinka käyttäjä/asiakas voi käyttää tietoja…
Kuinka käyttäjä/asiakas voi käyttää tietoja…
Kuinka käyttäjä/asiakas voi käyttää tietoja…

Tietojen käyttäminen palvelimelta on melko yksinkertaista. Vain soittamalla "retrieve.php", saamme säätiedot vastauksena JSON -muodossa. Sen jälkeen on vain jäsennettävä JSON -tiedot yksittäisten elementtien käyttämiseksi. Samoin on XML -vastauksen kanssa. Käyttäjä voi aina määrittää ensisijaisen vastausmuodon, jossa käyttäjä on mukava työskennellä. Jos käyttäjä ei määritä muotoa, oletusmuoto on JSON.

Esimerkkipyyntö tehdään käyttämällä POSTMAN -työkalua sovellusliittymän toiminnan tarkistamiseen.

Esimerkki JSON -vastauksen jäsentämisestä javascriptissä näkyy alla olevassa koodinpätkässä.

var url = "https://example.com/retrieve.php?lat=19.044848&lon=72.8464373";function httpGet (theUrl) {var xmlHttp = new XMLHttpRequest (); xmlHttp.open ("GET", theUrl, false); // epätosi synkroniselle pyynnölle xmlHttp.send (null); return xmlHttp.responseText; } var myVar = httpGet (url); var obj = JSON.parse (myVar); document.getElementById ("aqi"). internalHTML = obj.data [0].aqi; document.getElementById ("lämpötila"). internalHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("temp"). internalHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("kosteus"). internalHTML = Math.round (obj.data [0].hum) + "%"; document.getElementById ("paine"). internalHTML = Math.round (obj.data [0].pres) + "mb";

JSON -vastauksen jäsentävän HTML -esimerkkisivun lähdekoodi on saatavilla tämän vaiheen lopussa.

Huomautus: Muuta tiedoston laajennukseksi ".html".

Vaihe 9: Tämän projektin rajoitukset

  • Projekti käyttää tietojen lähettämiseen GET: ää; vaikka se ei käsittele arkaluonteisia tietoja, tietoja voidaan helposti käsitellä, koska niillä ei ole mitään mekanismia lähteen aitouden tarkistamiseksi lukuun ottamatta otsikoiden tarkistamista, jota voidaan helposti muokata ja jopa tavallinen laite voidaan huijata näyttää säämoduulilta.
  • Koska moduuli on riippuvainen vain muista yhteyspisteistä (WIFI) ja on riippuvainen niiden tietojen lähettämisestä, jotka useimmissa tapauksissa olisivat muista organisaatioista. Jos tukiasema on jostakin syystä poissa käytöstä, moduuli ei pysty lähettämään tietoja.
  • Vaikka hanke on rakennettu lisäämään olemassa olevan järjestelmän tarkkuutta, markkinoilla oleva anturi on odotettua epätarkempi, mikä johtaa sen päätarkoituksen epäonnistumiseen.
  • Suunnitellessani projektia suunnittelin sisällyttäväni tilaan, jossa palvelin keskiarvoo datan arvon sijainnin perusteella virheiden korjaamiseksi. Mutta kun otin tämän ominaisuuden käyttöön, huomasin, että se tarvitsee joitain kolmannen osapuolen sovellusliittymiä koordinaattien kääntämiseksi maantieteellisille alueille.

Vaihe 10: Lisäparannuksia tähän projektiin

  • Moduulin tarkkuutta voidaan edelleen parantaa räätälöimällä anturit erityisesti tiettyyn tarkoitukseen sen sijaan, että käytettäisiin markkinoilla olevaa yleistä moduulia.
  • Moduulia voidaan muuttaa toimimaan entistä itsenäisemmin käyttämällä erityistä sirua, joka langattomasti kommunikoi Cell-tornien kanssa tietojen lähettämiseksi, mikä parantaa vikasietoisuutta.
  • Aurinkopaneelia ja akkujärjestelmää voidaan käyttää yhdessä ESP: n syvän lepotilan kanssa, mikä parantaa energiatehokkuutta ja tekee siitä riippumattomamman ulkoisesta virtalähteestä.
  • POST -tekniikkaa voidaan käyttää tietojen lähettämiseen jollakin todennusmekanismilla, kuten syklisillä koodeilla jokaiseen tiedonsiirtoon.
  • NodeMCU: n sijaan, joka on prototyyppikortti, voimme käyttää massatuotannossa mukautettua mikro-ohjainta, joka ei ainoastaan alenna kustannuksia vaan myös hyödyntää parhaiten järjestelmän resursseja.
  • Yhdessä Googlen maantieteellisen sijainnin sovellusliittymän kanssa ja yhteyden muodostamiseen mihin tahansa avoimeen WIFI -verkkoon moduuli voi toimia jopa määrittämättä sitä; valmis lähettämään tiedot tehtaalta ilman asennusta.

Vaihe 11: Muutama sana yleisölle

Muutama sana yleisölle
Muutama sana yleisölle

Hei kaverit, ymmärrän, että tämä ei ole aloittelijaystävällinen opetusohjelma ollenkaan, koska en ole maininnut kaikkia yksityiskohtia, jotka on käsiteltävä. Ja myös tämä projekti on todella laaja, jotta se voidaan sisällyttää Instructable -ohjelmaan. Yritin kuitenkin parhaani mukaan kattaa kaikki projektin tärkeät näkökohdat. Tiedän myös, että video, joka esittelee projektin toimintaa, olisi ollut todella hieno, mutta koska tämä on ensimmäinen ohjeeni ja rehellisesti sanottuna tämä on ensimmäinen julkaisuni vastaavasta, olin melko hermostunut olemaan kamera.

Jos tarvitset apua tämän projektin tai vastaavan toteuttamisessa, ota minuun yhteyttä osoitteessa [email protected] tai voit jättää kommentin kuten aina. Yritän auttaa teitä parhaani mukaan.

Kiitos!!

Suositeltava: