Obsah:

Inteligentný distribuovaný systém monitorovania počasia IoT pomocou NodeMCU: 11 krokov
Inteligentný distribuovaný systém monitorovania počasia IoT pomocou NodeMCU: 11 krokov

Video: Inteligentný distribuovaný systém monitorovania počasia IoT pomocou NodeMCU: 11 krokov

Video: Inteligentný distribuovaný systém monitorovania počasia IoT pomocou NodeMCU: 11 krokov
Video: Часть 1. Аудиокнига «История Юлия Цезаря» Джейкоба Эббота (главы 1–6) 2024, November
Anonim
Inteligentný distribuovaný systém monitorovania počasia IoT pomocou NodeMCU
Inteligentný distribuovaný systém monitorovania počasia IoT pomocou NodeMCU

Všetci by ste mohli poznať tradičnú meteorologickú stanicu; ale zamysleli ste sa niekedy nad tým, ako to vlastne funguje? Pretože je tradičná meteorologická stanica nákladná a objemná, hustota týchto staníc na jednotku plochy je oveľa menšia, čo prispieva k nepresnosti údajov. Vysvetlím vám to: Predpokladajme, že stanica sa nachádza v strede mesta a je to jediná stanica, ktorá sa nachádza v okruhu 'x' metrov, dá sa ľahko skresliť, ak sa v okolí nachádza nejaký činiteľ spôsobujúci znečistenie stanice, ktorá zobrazuje celú oblasť polomeru „x“ako znečistenú, pretože táto jediná stanica je zodpovedná za určenie údajov o počasí pre celú oblasť.

Na prekonanie tohto problému je potrebné zvýšiť hustotu modulov, čo je možné len vtedy, ak sú moduly lacnejšie a majú menšiu stopu ako existujúce.

To je dôvod, prečo je moje navrhované riešenie dokonalým riešením tohto problému. Stojí menej ako 10 dolárov a tiež sa ľahko opiera o moju dlaň.

Ako to funguje…

Tento projekt má 3 hlavné časti.

Strana zariadenia:

Zariadenie je modul IoT zobrazený na obrázku, ktorý odosiela údaje o počasí na server v každom časovom intervale „x“. Údaje zahŕňajú aktuálne údaje o počasí, geografickú polohu modulu; tj. jeho súradnice, jeho MAC adresa; na jedinečnú identifikáciu zariadenia, verziu firmvéru, na ktorom je momentálne spustený. Strana zariadenia obsahuje N-moduly distribuované po celej oblasti, ktoré aktívne prinášajú údaje na server.

Na strane servera:

Ako naznačuje názov, je to centralizovaný server, ktorý spracováva niekoľko operácií, ako je prijímanie údajov z modulov a ich ukladanie do databázy, aktualizácia modulu pomocou najnovšieho firmvéru, ak je spustený v staršej verzii, odosielanie údajov o počasí na server klient na požiadanie.

Strana klienta/používateľa:

Je to koncový používateľ, ktorý požaduje od servera údaje o počasí. Klient odošle aktuálnu polohu a na základe polohy server vypočíta vzdialenosť medzi klientom a všetkými modulmi a odošle klientovi údaje o počasí najbližšieho modulu, ktoré sa považujú za presné.

Zásoby

  • NodeMCU (ESP8266-12E)
  • DHT11 (snímač vlhkosti a teploty)
  • BMP180 (snímač tlaku a teploty)
  • MQ-135 (snímač indexu kvality vzduchu)
  • Kábel USB (na nahranie programu)
  • 5 voltový napájací zdroj
  • Kondenzátory (voliteľné: umiestnia sa rovnobežne s elektrickou energiou)
  • Arduino IDE (na ladenie a nahranie programu)
  • Aplikácia POSTMAN (voliteľné: na ladenie rozhrania API)
  • Webová stránka (na hostovanie serverov PHP a MySQL)

Krok 1: Spájkujte všetky súčasti a nahrajte program na NodeMCU

Spájkujte všetky súčasti a nahrajte program na NodeMCU
Spájkujte všetky súčasti a nahrajte program na NodeMCU
Spájkujte všetky súčasti a nahrajte program na NodeMCU
Spájkujte všetky súčasti a nahrajte program na NodeMCU

Spájkujte všetky súčiastky na NodeMCU podľa schémy zapojenia na výkonovej doske. Kondenzátor tiež spájkujte paralelne s elektrickými vedeniami, pretože pri aktívnom prenose a príjme údajov dochádza k prepätiu.

Po dokončení spájkovania nahrajte kód poskytnutý v súbore „code.c“.

Poznámka: Nezabudnite nahradiť poverenia svojimi povereniami. Tiež umiestnite súbor s názvom "html_file.h" do priečinka skici arduino. Všetky hlavičkové súbory použité v tomto projekte nájdete tu

Vlastnosti kódu:

Prístupový bod: Pretože je ťažké naprogramovať každý modul pomocou poverení v sériovej výrobe, modul pri svojom prvom spustení hostuje webovú stránku, ktorá akceptuje poverenia siete WiFi, ku ktorej sa majú moduly pripojiť, a ukladá ich do pamäte EEPROM na neskoršie použitie.

Akonáhle sú poverenia nakonfigurované, NodeMCU skontroluje poverenia EEPROM a pripojí sa k povereniam WiFi prítomným v EEPROM.

Po úspešnom pripojení k WiFi začne NodeMCU nahrávať údaje na server každých „x“časový interval, údaje zahŕňajú údaje o počasí, MAC adresu modulu, verziu firmvéru, geografickú polohu zariadenia.

Aktualizácia OTA: Modul tiež kontroluje novú aktualizáciu firmvéru každý deň v konkrétnom čase uvedenom v kóde. Táto funkcia je užitočná, pretože nie je možné, aby ktorýkoľvek výrobca pokračoval v zmene programu jednotlivého modulu v prípade, že je potrebné vykonať nejaké zmeny.

Watchdog Timer: Atlast musí existovať spôsob, ako sa zotaviť bez akéhokoľvek ľudského zásahu, ak uviazne alebo havaruje. To sa dá dosiahnuť použitím časovača Watchdog. Funguje to takto: Existuje rutina prerušenia, ktorá beží každú sekundu. ISR zvyšuje počítadlo vždy, keď sa spustí, a kontroluje, či počítadlo dosiahlo maximálny počet. Akonáhle počítadlo dosiahne maximálnu hodnotu, modul sa sám resetuje za predpokladu, že zlyhal. Pri normálnej prevádzke sa počítadlo vždy vynuluje, než dosiahne maximálny počet.

Krok 2: Konfigurácia servera SQL Server

Konfigurácia servera SQL Server
Konfigurácia servera SQL Server

Nastavenie SQL Servera je tiež veľmi jednoduché. Stačí vytvoriť databázu na serveri SQL a importovať nastavenia importovaním súboru s názvom „database_structure.txt“. V tomto kroku nájdete súbor. Keďže inštrukcie nepovoľujú nahrávanie súborov „.sql“, premenoval som súbor na „.txt“.

Poznámka: Premenujte súbor z „.txt“na „.sql“.

Krok 3: Konfigurácia súborového servera

Konfigurácia servera je skutočne jednoduchá, ak vlastníte webovú stránku, ktorá je hosťovaná online. Nebudem prechádzať celým postupom nastavenia webovej stránky a jej hostenia, pretože je nad rámec tohto tutoriálu. Môžete ich však hostovať na vlastnom počítači ako localhost a vyskúšať si prácu so súbormi.

Keďže Instructable neumožňuje nahrávať súbory PHP, premenoval som ich na ".txt".

Poznámka: Príponu súborov premenujte na „.php“. Nezabudnite tiež zmeniť poverenia súboru „config.php“.

Stačí nahrať súbory na server a môžete začať.

Dám vám stručné informácie o súboroch PHP.

db_config.php:

V tomto súbore sú uložené všetky poverenia potrebné na pripojenie k serveru SQL.

db_connect:

V tomto súbore je prítomná trieda potrebná na pripojenie k databáze.

insert.php:

NodeMCU nazýva tento súbor PHP na odoslanie údajov na server metódou GET. Tento súbor je tiež zodpovedný za ukladanie rovnakých údajov na server SQL.

retrieve.php:

Užívateľ/klient nazýva toto PHP pomocou metódy GET. Server vypočíta vzdialenosť medzi používateľom a všetkými modulmi. Potom sa údaje najbližšieho modulu odošlú ako odpoveď klientovi vo formáte JSON/XML podľa preferencie klienta.

update.php:

Tento súbor PHP volá modul každý deň v konkrétny čas, aby skontroloval, či v module je spustená najnovšia verzia firmvéru. Stačí umiestniť najnovší súbor „.bin“na súborový server a zadať adresár súboru v premennej súboru.

Ak sa tieto súbory spočiatku zdajú skľučujúce, v nasledujúcom kroku som zahrnul používateľskú dokumentáciu.

Krok 4: Používateľská dokumentácia

Používateľská dokumentácia
Používateľská dokumentácia
Používateľská dokumentácia
Používateľská dokumentácia

Úvod:

Weather API poskytuje jednoduché rozhranie na vyžiadanie údajov o počasí pre polohy na povrchu Zeme. Vyžiadate si informácie o počasí pre konkrétny pár zemepisnej šírky a dĺžky so zadaným výstupným formátom. Rozhranie API vracia z požadovaného miesta teplotu, vlhkosť, tlak a index kvality vzduchu, ktorý bol naposledy zaznamenaný najbližším modulom.

Predtým ako začneš:

Tento dokument je určený pre vývojárov webových stránok a mobilných zariadení, ktorí chcú zahrnúť informácie o počasí do vyvíjanej aplikácie. Predstavuje používanie dostupných rozhraní API a referenčného materiálu.

Žiadosti o údaje o počasí:

Weather API žiadosti sú konštruované ako reťazec URL. Rozhranie API vracia údaje o počasí pre bod na Zemi určený párom zemepisná šírka/dĺžka. Presnosť údajov o počasí je priamo úmerná hustote modulov umiestnených v oblasti.

Žiadosť Weather API má nasledujúcu formu:

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

Kde výstupný formát (formát) môže byť jedna z nasledujúcich hodnôt:

  • JSON (odporúča sa), označuje výstup v JavaScript Object Notation (JSON); alebo
  • XML označuje výstup v XML zabalený v uzle.

Parametre požiadavky:

Ako je štandardné pre všetky adresy URL, parametre sú oddelené znakom ampersand (&). Zoznam parametrov a ich možné hodnoty sú označené nižšie.

Požadované parametre:

  • lat: Predstavuje zemepisnú šírku miesta na vyhľadávanie. (napr. lat = 19,56875)
  • lon: Predstavuje zemepisnú dĺžku miesta na vyhľadávanie. (napr. lon = 72,97568)

Voliteľné parametre:

formát: Špecifikuje výstupný formát odpovedí na údaje o počasí. Môže to byť buď JSON alebo XML. Predvolená hodnota je JSON. (napr. format = json alebo format = xml)

Reakcie na počasie:

Pre každú platnú požiadavku služba časového pásma vráti odpoveď vo formáte uvedenom v adrese URL žiadosti. Každá odpoveď bude obsahovať nasledujúce prvky:

  • úspech: hodnota udávajúca stav odpovede.

    • 0: negatívny; znamená, že žiadosť mala nesprávny tvar.
    • 1: kladne; znamená, že žiadosť bola úspešná.
  • správa: reťazec udávajúci dôvod nesprávnosti žiadosti. K dispozícii iba vtedy, ak je stav negatívny.
  • údaje: pole s viacerými parametrami počasia.

    • teplota: údaje o teplote.
    • hukot: údaje o prítomnosti vlhkosti.
    • pres: údaje o absolútnom tlaku.
    • aqi: súčasný index kvality ovzdušia.

Príklady odpovedí oboch formátov je možné vidieť na obrázkoch.

Krok 5: Nastavenie modulu

Nastavenie modulu
Nastavenie modulu
Nastavenie modulu
Nastavenie modulu

Vytvorí sa prístupový bod a webová stránka je hostená na adrese IP (predvolené: 192.168.4.1) na prijatie poverení od správcu zariadenia/používateľa pri prvom spustení alebo ak modul nenájde už uložené poverenia v EEPROM.

Užívateľ musí zadať SSID a heslo, ku ktorému sa chce modul pripojiť. Zemepisná šírka a dĺžka sa vyplní automaticky, ak povolíte prehliadaču prístup k polohe.

Hneď ako sú zadané všetky údaje, kliknite na tlačidlo „ODOSLAŤ“a potom sú všetky poverenia zapísané do EEPROM modulu.

Tento krok je veľmi dôležitý, pretože pri hromadnej výrobe modulov nie je možné naprogramovať všetky moduly s presnými údajmi o polohe a povereniami WiFi. Tiež nie je vhodné napevno kódovať poverenia v programe, pretože ak vôbec potrebujeme modul premiestniť na iné miesto alebo chceme zmeniť poverenia WiFi, budeme musieť modul preprogramovať. Aby sa predišlo týmto problémom, je implementovaná funkcia počiatočného nastavenia.

Krok 6: Teraz je čas prispieť údajmi do cloudu

Teraz je čas prispieť údajmi do cloudu
Teraz je čas prispieť údajmi do cloudu
Teraz je čas prispieť údajmi do cloudu
Teraz je čas prispieť údajmi do cloudu

Po dokončení všetkých predchádzajúcich krokov je načase nechať modul nahrať údaje na server. Automaticky sa začne nahrávať, akonáhle uložíte poverenia.

Volá "insert.php" ako volanie API s odovzdaním všetkých parametrov na odoslanie metódou GET.

Nasledujúci útržok kódu ukazuje, ako sú parametre spracované.

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

Všetky moduly tak začnú nahrávať údaje.

Poznámka: Ak máte pocit, že server je preťažený, znížte frekvenciu nahrávania v kóde.

Krok 7: Aktualizácia OTA (Over the Air)

Aktualizácia OTA (Over the Air)
Aktualizácia OTA (Over the Air)

Potom, čo je modul nastavený a začne nahrávať údaje, kontroluje aktualizácie firmvéru každý deň v konkrétny čas uvedený v programe. Ak nejaký nájde, stiahne a flashuje binárny súbor v ňom. A ak nie, pokračuje sa v bežnej operácii odosielania údajov.

Na kontrolu novej aktualizácie modul zavolá „update.php“odoslaním adresy MAC v hlavičke požiadavky. Server potom skontroluje, či má konkrétna adresa MAC novú aktualizáciu, ak áno, odošle ako odpoveď binárny súbor najnovšieho firmvéru.

Tiež kontroluje všetky potrebné hlavičky požadované pre základnú autentifikáciu modulu.

Krok 8: Ako môže používateľ/klient získať prístup k údajom…

Ako môže používateľ/klient získať prístup k údajom…
Ako môže používateľ/klient získať prístup k údajom…
Ako môže používateľ/klient získať prístup k údajom…
Ako môže používateľ/klient získať prístup k údajom…
Ako môže používateľ/klient získať prístup k údajom…
Ako môže používateľ/klient získať prístup k údajom…

Prístup k údajom zo servera je veľmi jednoduchý. Ak zavoláte „retrieve.php“, získame údaje o počasí vo formáte JSON. Potom už stačí analyzovať údaje JSON a získať prístup k jednotlivým prvkom. Podobné je to s odpoveďou XML. Užívateľ môže vždy určiť preferovaný formát reakcie, s ktorým sa mu pohodlne pracuje. Ak používateľ neurčí formát, predvolený formát je JSON.

Vzorová žiadosť sa podáva pomocou nástroja POSTMAN na kontrolu fungovania rozhrania API.

Príklad syntaktickej analýzy odpovede JSON v jazyku JavaScript je uvedený v úryvku kódu nižšie.

var url = "https://example.com/retrieve.php?lat=19.044848&lon=72.8464373";funkcia httpGet (theUrl) {var xmlHttp = new XMLHttpRequest (); xmlHttp.open ("ZÍSKAŤ", theUrl, false); // false pre synchrónnu požiadavku xmlHttp.send (null); vrátiť xmlHttp.responseText; } var myVar = httpGet (url); var obj = JSON.parse (myVar); document.getElementById ("aqi"). innerHTML = obj.data [0].aqi; document.getElementById ("teplota"). innerHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("temp"). innerHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("vlhkosť"). innerHTML = Math.round (obj.data [0].hum) + "%"; document.getElementById ("tlak"). innerHTML = Math.round (obj.data [0].pres) + "mb";

Zdrojový kód ukážkovej stránky HTML, ktorá analyzuje odpoveď JSON, je k dispozícii na konci tohto kroku.

Poznámka: Zmeňte príponu súboru na „.html“.

Krok 9: Obmedzenia tohto projektu

  • Na odoslanie údajov projekt používa GET; aj keď sa nejedná o citlivé údaje, s údajmi je možné ľahko manipulovať, pretože nemá žiadny mechanizmus na kontrolu pravosti zdroja okrem kontroly hlavičiek, ktoré je možné ľahko upravovať a dokonca aj obyčajné zariadenie môže byť falšované aby to vyzeralo ako modul počasia.
  • Pretože modul výlučne a na inom prístupovom bode (WIFI) závisí a odosiela údaje, ktoré by vo väčšine prípadov boli z iných organizácií. Ak je prístupový bod z nejakého dôvodu vôbec mimo prevádzky, modul nebude môcť odosielať údaje.
  • Aj keď je projekt vytvorený s cieľom zvýšiť presnosť existujúceho systému, senzor dostupný na trhu je menej presný, ako sa očakávalo, čo vo výsledku vedie k zlyhaniu jeho hlavného účelu.
  • Pri plánovaní projektu som plánoval zahrnúť režim, v ktorom server priemeruje hodnotu údajov na základe polohy na opravu chýb. Ale po implementácii tejto funkcie som si uvedomil, že na preklad súradníc do geografických oblastí potrebuje niektoré rozhrania API tretích strán.

Krok 10: Ďalšie zlepšenia, ktoré je možné na tomto projekte dosiahnuť

  • Presnosť modulu je možné ďalej zlepšiť špeciálnym prispôsobením senzorov na konkrétny účel namiesto použitia generického modulu, ktorý je k dispozícii na trhu.
  • Modul je možné upraviť tak, aby pracoval ešte nezávislejšie, a to pomocou špeciálneho čipu, ktorý bezdrôtovo komunikuje s bunkovými vežami na odosielanie údajov, čím sa zlepšuje odolnosť voči chybám.
  • Solárny panel a batériový systém je možné používať v spojení s režimom hlbokého spánku ESP, čím sa zvyšuje energetická účinnosť a je nezávislejšia na externom napájaní.
  • POST je možné použiť na odosielanie údajov určitým autentifikačným mechanizmom, napríklad pomocou cyklických kódov na každý prenos údajov.
  • Namiesto NodeMCU, čo je prototypová doska, môžeme v sériovej výrobe použiť vlastný mikrokontrolér, ktorý nielenže zníži náklady, ale aj čo najlepšie využije systémové zdroje.
  • V spojení s rozhraním Google geolocation API a pripojením k akémukoľvek dostupnému otvorenému WIFI môže modul fungovať aj bez jeho konfigurácie; pripravený na prenos údajov z výrobného závodu bez akéhokoľvek nastavenia.

Krok 11: Niekoľko slov pre divákov

Niekoľko slov pre divákov
Niekoľko slov pre divákov

Hej, chlapci, uvedomujem si, že toto nie je návod pre začiatočníkov, pretože som nespomenul každý detail, ktorý je potrebné pokryť. A tiež tento projekt je skutočne rozsiahly, aby bol zahrnutý v inštrukcii. Napriek tomu som sa snažil zo všetkých síl pokryť všetky dôležité aspekty projektu. Tiež viem, že video predvádzajúce fungovanie projektu by bolo skutočne skvelé, ale keďže toto je môj prvý návod a aby som bol úprimný, je to moja prvá publikácia niečoho podobného, bol som nervózny z toho, že som stál pred fotoaparát.

Ak potrebujete pomoc pri vytváraní tohto projektu alebo čohokoľvek podobného, kontaktujte ma na adrese [email protected] alebo môžete zanechať komentár ako vždy. Pokúsim sa vám pomôcť, ako najlepšie viem.

Ďakujem!!

Odporúča: