Sisukord:

Nutikas hajutatud IoT ilmaseire süsteem NodeMCU abil: 11 sammu
Nutikas hajutatud IoT ilmaseire süsteem NodeMCU abil: 11 sammu

Video: Nutikas hajutatud IoT ilmaseire süsteem NodeMCU abil: 11 sammu

Video: Nutikas hajutatud IoT ilmaseire süsteem NodeMCU abil: 11 sammu
Video: Что такое Эфириум? Объяснение для начинающих (почему вы должны заботиться и что будет!) 2024, Juuli
Anonim
Nutikas hajutatud IoT ilmaseire süsteem, mis kasutab NodeMCU -d
Nutikas hajutatud IoT ilmaseire süsteem, mis kasutab NodeMCU -d

Te kõik võite olla teadlikud traditsioonilisest ilmajaamast; aga kas olete kunagi mõelnud, kuidas see tegelikult toimib? Kuna traditsiooniline ilmajaam on kulukas ja mahukas, on nende jaamade tihedus pindalaühiku kohta väga väike, mis aitab kaasa andmete ebatäpsusele. Selgitan teile, kuidas: Oletame, et jaam asub keset linna ja see on ainus jaam, mis asub x-meetri raadiuses. Seda saab kergesti kallutada, kui läheduses on reostust tekitav aine jaama, mis näitab kogu 'x' meetri raadiusega ala saastatuna, kuna see jaam vastutab kogu piirkonna ilmaandmete kindlaksmääramise eest.

Selle probleemi lahendamiseks tuleb suurendada moodulite tihedust, mis on võimalik ainult siis, kui moodulid on odavamad ja võtavad väiksema jalajälje kui olemasolev.

See on põhjus, miks minu pakutud lahendus on selle probleemi jaoks ideaalne lahendus, see maksab vähem kui 10 dollarit ja toetub ka mu peopesale.

Kuidas see töötab…

Sellel projektil on 3 peamist osa.

Seadme pool:

Seade on pildil näidatud IoT moodul, mis saadab ilmastikuandmed serverisse iga x ajavahemiku järel. Andmed sisaldavad tegelikke ilmaandmeid, mooduli geograafilist asukohta; st selle koordinaadid, selle MAC -aadress; seadme ainulaadseks tuvastamiseks, püsivara versioon, millel see praegu töötab. Seadmepoolne osa sisaldab N-mooduleid, mis on jaotatud kogu piirkonnas, andes aktiivselt andmeid serverisse.

Serveripool:

Nagu nimigi ütleb, tegeleb tsentraliseeritud server mitmete toimingutega, nagu moodulite andmete vastuvõtmine ja andmebaasi salvestamine, mooduli värskendamine uusima püsivaraga, kui see töötab vanemas versioonis, ilmateadete saatmine klient soovi korral.

Kliendi/kasutaja pool:

Lõppkasutaja nõuab serverilt ilmateateid. Klient saadab praeguse asukoha ja asukoha põhjal arvutab server kauguse kliendi ja kõigi moodulite vahel ning saadab kliendile lähima mooduli ilmaandmed, mida peetakse täpseks.

Tarvikud

  • NodeMCU (ESP8266-12E)
  • DHT11 (niiskus- ja temperatuuriandur)
  • BMP180 (rõhu- ja temperatuuriandur)
  • MQ-135 (õhukvaliteedi indeksi andur)
  • USB -kaabel (programmi üleslaadimiseks)
  • 5 -voldine toide
  • Kondensaatorid (valikuline: paigutatakse elektriliiniga paralleelselt)
  • Arduino IDE (programmi silumiseks ja üleslaadimiseks)
  • POSTMAN -rakendus (valikuline: API silumiseks)
  • Veebisait (PHP ja MySQL serveri majutamiseks)

Samm: jootke kõik komponendid ja laadige programm NodeMCU -sse

Jootke kõik komponendid ja laadige programm NodeMCU -sse
Jootke kõik komponendid ja laadige programm NodeMCU -sse
Jootke kõik komponendid ja laadige programm NodeMCU -sse
Jootke kõik komponendid ja laadige programm NodeMCU -sse

Jootke kõik komponendid NodeMCU -sse, nagu on näidatud joonistusskeemil. Samuti jootke kondensaator paralleelselt elektriliinidega, kuna võimsus suureneb andmete aktiivse edastamise ja vastuvõtmise ajal.

Kui jootetööd on tehtud, laadige failis "code.c" toodud kood üles.

Märkus. Ärge unustage asendada mandaat oma mandaadiga. Asetage ka fail nimega "html_file.h" arduino visandikausta. Kõik selles projektis kasutatud päisefailid leiate siit

Koodi omadused:

Juurdepääsupunkt: kuna masstootmises on iga moodulit volitusandmetega raske programmeerida, võõrustab moodul esimesel käivitamisel veebilehte, mis võtab vastu selle WiFi volitused, millega moodulid peavad ühenduma, ja salvestab need EEPROM -is hilisemaks kasutamiseks.

Kui mandaat on konfigureeritud, kontrollib NodeMCU EEPROM -i mandaate ja loob ühenduse EEPROM -is olevate WiFi -mandaatidega.

Pärast edukat WiFi -ühenduse loomist alustab NodeMCU andmete üleslaadimist serverisse iga x ajavahemiku järel, andmed sisaldavad ilmastikuandmeid, mooduli MAC -aadressi, püsivara versiooni, seadme geograafilist asukohta.

OTA värskendus: Moodul kontrollib ka uusi püsivara värskendusi iga päev kindlal koodil määratud ajal. See funktsioon on kasulik, kuna ükski tootja ei saa üksiku mooduli programmi jätkata ja seda muuta, kui seal tuleb teha muudatusi.

Vahtkoera taimer: Atlastil peab olema võimalus end ilma inimese sekkumiseta taastada, kui see kinni jääb või kokku jookseb. Seda on võimalik saavutada Watchdogi taimeriga. See toimib järgmiselt. On olemas katkestamise alamrutiin, mis töötab iga sekund. ISR suurendab loendurit iga kord, kui see käivitub, ja kontrollib, kas loendur on saavutanud maksimaalse arvu. Kui loendur saavutab maksimaalse väärtuse, lähtestab moodul ennast, eeldades, et see on kokku kukkunud. Tavalise töö korral lähtestatakse loendur alati enne maksimaalse arvu saavutamist.

2. samm: SQL serveri konfigureerimine

SQL serveri seadistamine
SQL serveri seadistamine

SQL Serveri seadistamine on samuti väga lihtne. Lihtsalt looge SQL -serveris andmebaas ja importige seade, importides faili nimega "database_structure.txt". Faili leiate sellest sammust. Kuna juhend ei luba ".sql" faile üles laadida, olen faili ümber nimetanud ".txt".

Märkus. Nimeta fail ümber.txt -st ümber.sql -ks.

Samm: failiserveri seadistamine

Serveri seadistamine on tõesti lihtne, kui teil on veebisait ja seda hostitakse võrgus. Ma ei lähe läbi kogu veebisaidi seadistamise ja selle majutamise protseduuri, kuna see ei kuulu selle õpetuse raamesse. Kuid failide toimimise proovimiseks saate selle hostida oma arvutis kohaliku hostina.

Kuna Instructable ei luba PHP -faile üles laadida, olen failid ümber nimetanud ".txt" -iks.

Märkus. Palun nimetage failide laiend ümber ".php". Ärge unustage ka muuta faili "config.php" mandaati.

Lihtsalt laadige failid serverisse üles ja oletegi valmis.

Annan teile lühikese teabe PHP -failide kohta.

db_config.php:

Sellesse faili salvestatakse kõik SQL serveriga ühenduse loomiseks vajalikud mandaadid.

db_connect:

Selles failis on olemas andmebaasi ühendamiseks vajalik klass.

insert.php:

NodeMCU kutsub seda PHP -faili andmete üleslaadimiseks serverisse GET -meetodil. See fail vastutab ka samade andmete salvestamise eest SQL -serverisse.

retrieve.php:

Kasutaja/klient helistab sellele PHP -le GET -meetodi abil. Server arvutab kauguse kasutaja ja kõigi moodulite vahel. Seejärel saadetakse lähima mooduli andmed vastusena kliendile JSON/XML -vormingus, nagu klient eelistab.

update.php:

Moodul helistab sellele PHP -failile iga päev kindlal ajal, et kontrollida, kas moodul töötab püsivara uusima versiooniga. Lihtsalt asetage uusim ".bin" fail failiserverisse ja määrake faili muutujaga faili kataloog.

Kui need paljud failid tunduvad esialgu hirmutavad, olen lisanud järgmisesse sammu kasutaja dokumentatsiooni.

4. samm: kasutaja dokumentatsioon

Kasutaja dokumentatsioon
Kasutaja dokumentatsioon
Kasutaja dokumentatsioon
Kasutaja dokumentatsioon

Sissejuhatus:

Weather API pakub lihtsat liidest, et küsida ilmastikuandmeid maapinnal asuvate asukohtade kohta. Te küsite ilmateavet konkreetse laius-/pikkuskraadi paari kohta, mille väljundvorming on määratud. API tagastab temperatuuri, niiskuse, rõhu ja õhu kvaliteedi indeksi, mille viimati registreeris lähim moodul soovitud asukohast.

Enne alustamist:

See dokument on mõeldud veebisaitide ja mobiilseadmete arendajatele, kes soovivad arendatavale rakendusele lisada ilmateavet. See tutvustab kasutamist, kasutades API -d ja võrdlusmaterjali olemasolevate parameetrite kohta.

Ilmaandmete taotlused:

Weather API taotlused koostatakse URL -i stringina. API tagastab ilmastikuandmed maapealse punkti kohta, mis on määratud laius-/pikkuskraadipaariga. Pange tähele, et ilmastikuandmete täpsus on otseselt võrdeline alale paigutatud moodulite tihedusega.

Weather API taotlus on järgmine:

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

Kui väljundvorming (vorming) võib olla üks järgmistest väärtustest:

  • JSON (soovitatav), näitab väljundit JavaScripti objektimärgistuses (JSON); või
  • XML, näitab väljundit XML -is, mis on pakitud sõlme.

Taotluse parameetrid:

Nagu kõigi URL -ide puhul tavaline, eraldatakse parameetrid tähemärgi (&) abil. Allpool on toodud parameetrite loend ja nende võimalikud väärtused.

Nõutavad parameetrid:

  • lat: otsitava asukoha laiuskraadi tähistamine. (nt lat = 19,56875)
  • lon: otsitava asukoha pikkuskraadi tähistamine. (nt lon = 72,97568)

Valikulised parameetrid:

formaat: määrab ilmastikuandmete vastuse väljundvormingu. See võib olla kas JSON või XML. Vaikimisi on JSON. (nt vorming = json või formaat = xml)

Vastused ilmastikule:

Iga kehtiva päringu korral tagastab ajavöönditeenus päringu URL -is näidatud vormingus vastuse. Iga vastus sisaldab järgmisi elemente:

  • edu: väärtus, mis näitab vastuse olekut.

    • 0: negatiivne; näitab, et taotlus oli valesti vormistatud.
    • 1: jaatav; näitab, et taotlus õnnestus.
  • sõnum: string, mis näitab päringu väärarengu põhjust. Saadaval ainult siis, kui olek on negatiivne.
  • andmed: mitmete ilmastikuparameetritega massiiv.

    • temp: temperatuuri andmed.
    • hum: niiskuse olemasolu andmed.
    • pres: absoluutse rõhu andmed.
    • aqi: praegune õhukvaliteedi indeks.

Mõlema vormingu näiteid on näha piltidel.

Samm: mooduli seadistamine

Mooduli seadistamine
Mooduli seadistamine
Mooduli seadistamine
Mooduli seadistamine

Luuakse juurdepääsupunkt ja majutatakse veebilehte IP-aadressil (vaikimisi: 192.168.4.1), et saada seadmehaldurilt/kasutajalt mandaat esimesel käivitamisel või kui moodul ei leia kaustast juba salvestatud mandaati EEPROM.

Kasutaja peab sisestama SSID ja parooli, millega kasutaja soovib moodulit ühendada. Laius- ja pikkuskraadid täidetakse automaatselt, kui lubate brauseril asukohale juurde pääseda.

Kui kõik üksikasjad on sisestatud, klõpsake nuppu "SAADA" ja seejärel kirjutatakse kõik volikirjad mooduli EEPROM -i.

See samm on väga oluline, kuna moodulite masstootmise ajal ei ole võimalik kõiki mooduleid programmeerida nende täpsete asukohaandmete ja WiFi-mandaatidega. Samuti ei ole soovitatav programmi mandaate kõvakoodiga kodeerida, sest kui meil on üldse vaja moodul mõnda teise kohta ümber paigutada või WiFi-mandaati muuta, peame mooduli ümber programmeerima. Selle vaeva vältimiseks rakendatakse esialgne häälestusfunktsioon.

Samm: nüüd on aeg pilve andmeid edastada

Nüüd on aeg pilve andmeid edastada
Nüüd on aeg pilve andmeid edastada
Nüüd on aeg pilve andmeid edastada
Nüüd on aeg pilve andmeid edastada

Kui kõik eelnevad sammud on lõpule viidud, on nüüd aeg lasta moodulil andmed serverisse üles laadida. See alustab automaatselt üleslaadimist, kui olete mandaadi salvestanud.

See kutsub "insert.php" API -kõneks, edastades GET -meetodil kõik parameetrid.

Allpool olev koodilõik näitab, kuidas parameetreid töödeldakse.

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õhiprogramm 4.}

Nii hakkavad kõik moodulid andmeid üles laadima.

Märkus. Kui tunnete, et server on ülekoormatud, vähendage koodi üleslaadimissagedust.

7. toiming: üle õhu (OTA) värskendus

Over the Air (OTA) värskendus
Over the Air (OTA) värskendus

Kui moodul on kõik seadistatud ja andmeid üles laadima hakanud, kontrollib see iga päev kindlas programmis mainitud ajal püsivara värskendusi. Kui see leiab, laadib see alla ja vilgutab selles oleva binaarfaili. Ja kui ei, siis jätkatakse andmete üleslaadimise tavapärast toimimist.

Uue värskenduse kontrollimiseks helistab moodul "update.php", saates päringu päises MAC -aadressi. Seejärel kontrollib server, kas sellel konkreetsel MAC -aadressil on mõni uus värskendus, kui jah, siis saadab ta vastuseks viimase püsivara binaarfaili.

Samuti kontrollib see kõiki vajalikke päiseid, mis on vajalikud mooduli põhiliseks autentimiseks.

Samm: kuidas kasutaja/klient andmetele juurde pääseb …

Kuidas kasutaja/klient andmetele juurde pääseb …
Kuidas kasutaja/klient andmetele juurde pääseb …
Kuidas kasutaja/klient andmetele juurde pääseb …
Kuidas kasutaja/klient andmetele juurde pääseb …
Kuidas kasutaja/klient andmetele juurde pääseb …
Kuidas kasutaja/klient andmetele juurde pääseb …

Serverist pärinevatele andmetele juurdepääs on üsna lihtne. Lihtsalt helistades saidile "retrieve.php", saame ilmaandmed vastuseks JSON -vormingus. Pärast seda on vaja JSON -i andmeid sõeluda, et pääseda juurde üksikutele elementidele. Sarnane on XML -vastusega. Kasutaja saab alati määrata eelistatud vastusvormingu, millega kasutajal on mugav töötada. Kui kasutaja vormingut ei määra, on vaikevorming JSON.

Proovitaotluse esitamiseks kasutatakse tööriista POSTMAN, et kontrollida API toimimist.

Näide JSON -i vastuse parsimiseks JavaScriptis on näidatud alloleval koodilõigul.

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); // vale sünkroonpäringu jaoks xmlHttp.send (null); return xmlHttp.responseText; } var myVar = httpGet (url); var obj = JSON.parse (myVar); document.getElementById ("aqi"). internalHTML = obj.andmed [0].aqi; document.getElementById ("temperatuur"). internalHTML = Math.round (obj.andmed [0].temp) + "° C"; document.getElementById ("temp"). internalHTML = Math.round (obj.andmed [0].temp) + "° C"; document.getElementById ("niiskus"). internalHTML = Math.round (obj.andmed [0].hum) + "%"; document.getElementById ("surve"). internalHTML = Math.round (obj.andmed [0].pres) + "mb";

JSON -i vastust analüüsiva HTML -näite lehe lähtekood on saadaval selle sammu lõpus.

Märkus. Muutke faili laienduseks ".html".

9. samm: selle projekti piirangud

  • Projekt kasutab andmete saatmiseks GET -i; isegi kui see ei tegele tundlike andmetega, saab andmetega hõlpsasti manipuleerida, kuna sellel puudub igasugune mehhanism allika ehtsuse kontrollimiseks peale päiste kontrollimise, mida saab hõlpsasti muuta ja isegi tavalist seadet saab võltsida tunduda ilmamoodulina.
  • Kuna moodul tugineb ja sõltub ainult teistest juurdepääsupunktidest (WIFI) andmete saatmisel, mis enamikul juhtudel pärinevad teistest organisatsioonidest. Kui pääsupunkt on mingil põhjusel teeninduses, ei saa moodul andmeid saata.
  • Kuigi projekt on loodud olemasoleva süsteemi täpsuse suurendamiseks, on turul saadaolev andur oodatust vähem täpne, mistõttu selle peamine eesmärk ebaõnnestub.
  • Projekti kavandades kavatsesin lisada režiimi, milles server keskmistab andmete väärtuse asukoha põhjal vigade parandamiseks. Kuid selle funktsiooni rakendamisel mõistsin, et koordinaatide geograafilistesse piirkondadesse tõlkimiseks on vaja mõningaid kolmanda osapoole API-sid.

10. samm: selle projekti täiendavad parandused

  • Mooduli täpsust saab veelgi parandada, kohandades andurid spetsiaalselt selleks otstarbeks, selle asemel, et kasutada turul saadaolevat üldmoodulit.
  • Moodulit saab muuta veelgi iseseisvamaks, kasutades andmete saatmiseks spetsiaalset kiipi, mis suhtleb juhtmevabalt Cell-tornidega, parandades seeläbi tõrketaluvust.
  • Päikesepaneeli ja akusüsteemi saab kasutada koos ESP sügava une režiimiga, parandades seega energiatõhusust ja muutes selle välisest toiteallikast sõltumatumaks.
  • POST -i saab kasutada andmete saatmiseks mõne autentimismehhanismi abil, näiteks kasutades tsüklilisi koode iga andmeedastuse jaoks.
  • Prototüüpimisplaadi NodeMCU asemel saame masstootmises kasutada kohandatud mikrokontrollerit, mis mitte ainult ei vähenda kulusid, vaid kasutab ka süsteemi ressursse parimal viisil ära.
  • Koos Google'i geograafilise asukoha API -ga ja mis tahes olemasoleva avatud WIFI -ga ühenduse loomisega saab moodul töötada ilma seda isegi konfigureerimata; valmis tehasest andmeid edastama ilma seadistamiseta.

11. samm: paar sõna publikule

Paar sõna publikule
Paar sõna publikule

Hei poisid, ma saan aru, et see pole üldse algajatele sõbralik õpetus, kuna ma pole maininud kõiki üksikasju, mida tuleb käsitleda. Ja ka see projekt on tõesti tohutu, et seda saaks juhendada. Sellegipoolest proovisin anda endast parima, et hõlmata projekti kõiki olulisi aspekte. Ma tean ka, et video, mis tutvustab projekti toimimist, oleks olnud tõesti suurepärane, kuid kuna see on minu esimene juhendatav ja ausalt öeldes, see on minu esimene avaldus midagi sarnast, olin ma üsna närvis, kui olin ees kaamera.

Kui teil on vaja abi selle projekti või muu sarnase teostamisel, võtke minuga lihtsalt ühendust aadressil [email protected] või jätke kommentaar nagu alati. Püüan teid aidata, nii palju kui võimalik.

Aitäh!!

Soovitan: