Obsah:
- Zásoby
- Krok 1: Spájkujte všetky súčasti a nahrajte program na NodeMCU
- Krok 2: Konfigurácia servera SQL Server
- Krok 3: Konfigurácia súborového servera
- Krok 4: Používateľská dokumentácia
- Krok 5: Nastavenie modulu
- Krok 6: Teraz je čas prispieť údajmi do cloudu
- Krok 7: Aktualizácia OTA (Over the Air)
- Krok 8: Ako môže používateľ/klient získať prístup k údajom…
- Krok 9: Obmedzenia tohto projektu
- Krok 10: Ďalšie zlepšenia, ktoré je možné na tomto projekte dosiahnuť
- Krok 11: Niekoľko slov pre divákov
Video: Inteligentný distribuovaný systém monitorovania počasia IoT pomocou NodeMCU: 11 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:55
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úč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
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
Ú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
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
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)
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…
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
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:
Systém monitorovania počasia pomocou senzora Raspberry Pi3 a DHT11: 4 kroky
Monitorovací systém počasia pomocou senzora Raspberry Pi3 a DHT11: V tomto návode vám ukážem, ako pripojiť DHT11 k Raspberry Pi a odosielať údaje o vlhkosti a teplote na LCD. Snímač teploty a vlhkosti DHT11 je pekný malý modul ktorý poskytuje digitálnu teplotu a vlhkosť
Inteligentný systém monitorovania počasia a rýchlosti vetra založený na IOT: 8 krokov
Inteligentný systém monitorovania počasia a rýchlosti vetra založený na IOT: Vyvinul - Nikhil Chudasma, Dhanashri Mudliar a Ashita Raj Úvod Význam monitorovania počasia existuje mnohými spôsobmi. Parametre počasia je potrebné monitorovať, aby sa udržal rozvoj v poľnohospodárstve, skleníkoch
Systém monitorovania a riadenia pôdnej vlhkosti na báze IoT pomocou NodeMCU: 6 krokov
Systém monitorovania a riadenia vlhkosti pôdy založený na IoT pomocou NodeMCU: V tomto návode sa chystáme implementovať systém monitorovania a riadenia vlhkosti pôdy založený na IoT pomocou WiFi modulu ESP8266, tj NodeMCU. Komponenty požadované pre tento projekt: WiFi modul ESP8266- Amazon (334/- Reléový modul INR- Amazon (130/- INR
Systém monitorovania vzduchu pomocou NodeMCU a IOT Thingspeak: 4 kroky
Systém monitorovania vzduchu využívajúci NodeMCU a IOT Thingspeak: ThingSpeak je open-source aplikácia pre IoT a API na ukladanie a získavanie údajov z hardvérových zariadení a senzorov. Na svoju komunikáciu používa protokol HTTP cez internet alebo LAN. Analytika MATLAB je súčasťou analýzy a vizualizácie
Domáci systém monitorovania počasia IoT s podporou aplikácií pre Android (Mercury Droid): 11 krokov
Domáci systém monitorovania počasia IoT s podporou aplikácií pre Android (Mercury Droid): Úvod Mercury Droid je jeden druh vstavaného systému IoT (internet vecí) založený na mobilnej aplikácii Mercury Droid Android. Čo je schopné merať & sledovať domácu aktivitu počasia. je to veľmi lacný systém monitorovania domáceho počasia