Obsah:

Inteligentní distribuovaný systém sledování počasí IoT pomocí NodeMCU: 11 kroků
Inteligentní distribuovaný systém sledování počasí IoT pomocí NodeMCU: 11 kroků

Video: Inteligentní distribuovaný systém sledování počasí IoT pomocí NodeMCU: 11 kroků

Video: Inteligentní distribuovaný systém sledování počasí IoT pomocí NodeMCU: 11 kroků
Video: Závratě, vysoký krevní tlak, slabost. 4 způsoby, jak rychle a snadno pomoci 2024, Listopad
Anonim
Inteligentní distribuovaný systém sledování počasí IoT pomocí NodeMCU
Inteligentní distribuovaný systém sledování počasí IoT pomocí NodeMCU

Všichni možná víte o tradiční meteorologické stanici; ale přemýšleli jste někdy nad tím, jak to vlastně funguje? Protože je tradiční meteorologická stanice nákladná a objemná, hustota těchto stanic na jednotku plochy je velmi malá, což přispívá k nepřesnosti údajů. Vysvětlím vám jak: Předpokládejme, že se stanice nachází uprostřed města a je to jediná stanice, která se nachází v poloměru 'x' metrů, lze ji snadno zkreslit, pokud je v okolí přítomen jakýkoli činitel způsobující znečištění stanice ukazující celou oblast poloměru „x“metru jako znečištěnou, protože tato jediná stanice je zodpovědná za určování údajů o počasí v celé oblasti.

K překonání tohoto problému je třeba zvýšit hustotu modulů, což je možné pouze v případě, že jsou moduly levnější a mají menší rozměry než stávající.

To je důvod, proč moje navrhované řešení je dokonalým řešením tohoto problému, stojí méně než 10 $ a také se snadno opírá o mou dlaň.

Jak to funguje…

Tento projekt má 3 hlavní části.

Strana zařízení:

Zařízení je modul IoT zobrazený na obrázku, který odesílá data o počasí na server každé časové období 'x'. Data zahrnují aktuální data o počasí, geografickou polohu modulu; tj. jeho souřadnice, jeho MAC adresa; pro jednoznačnou identifikaci zařízení, verzi firmwaru, na kterém aktuálně běží. Strana zařízení obsahuje N-moduly distribuované po celé oblasti, které aktivně přispívají daty na server.

Na straně serveru:

Jak název napovídá, je to centralizovaný server, který zpracovává několik operací, jako je přijímání dat z modulů a jejich ukládání do databáze, aktualizace modulu nejnovějším firmwarem, pokud běží na starší verzi, odesílání údajů o počasí do klient na vyžádání.

Strana klienta/uživatele:

Je to koncový uživatel, který požaduje údaje o počasí ze serveru. Klient odešle aktuální polohu a na základě umístění server vypočítá vzdálenost mezi klientem a všemi moduly a odešle klientovi data o počasí nejbližšího modulu, což je považováno za přesné.

Zásoby

  • NodeMCU (ESP8266-12E)
  • DHT11 (snímač vlhkosti a teploty)
  • BMP180 (snímač tlaku a teploty)
  • MQ-135 (snímač indexu kvality vzduchu)
  • USB kabel (pro nahrání programu)
  • Napájení 5 voltů
  • Kondenzátory (volitelně: umístěné paralelně k elektrické síti)
  • Arduino IDE (k ladění a nahrání programu)
  • POSTMAN aplikace (volitelně: k ladění API)
  • Web (hostující server PHP a MySQL)

Krok 1: Pájejte všechny součásti a nahrajte program na NodeMCU

Pájejte všechny součásti a nahrajte program na NodeMCU
Pájejte všechny součásti a nahrajte program na NodeMCU
Pájejte všechny součásti a nahrajte program na NodeMCU
Pájejte všechny součásti a nahrajte program na NodeMCU

Připojte všechny součásti k NodeMCU, jak je znázorněno na schématu zapojení na výkonové desce. Rovněž připájejte kondenzátor paralelně k napájecím linkám, protože při aktivním přenosu a příjmu dat dochází k nárůstu napětí.

Jakmile je pájení hotové, nahrajte kód uvedený v souboru „code.c“.

Poznámka: Nezapomeňte nahradit přihlašovací údaje svými vlastními přihlašovacími údaji. Umístěte také soubor s názvem „html_file.h“do složky skici arduino. Všechny soubory záhlaví použité v tomto projektu najdete zde

Vlastnosti kódu:

Přístupový bod: Jelikož je v masové produkci obtížné naprogramovat každý modul pomocí přihlašovacích údajů, modul při svém prvním spuštění hostuje webovou stránku, která přijímá pověření WiFi, ke které se moduly musí připojit, a ukládá je do EEPROM pro pozdější použití.

Jakmile jsou přihlašovací údaje nakonfigurovány, NodeMCU zkontroluje EEPROM pro přihlašovací údaje a připojí se k pověření WiFi přítomným v EEPROM.

Po úspěšném připojení k WiFi začne NodeMCU odesílat data na server každých 'x' časový interval, data zahrnují údaje o počasí, MAC adresu modulu, verzi firmwaru, geografickou polohu zařízení.

Aktualizace OTA: Modul také kontroluje novou aktualizaci firmwaru každý den v určitou dobu uvedenou v kódu. Tato funkce je užitečná, protože není možné, aby jakýkoli výrobce pokračoval a změnil program konkrétního modulu v případě, že je třeba provést nějaké změny.

Watchdog Timer: Atlast, musí existovat způsob, jak se zotavit bez jakéhokoli lidského zásahu, pokud se zasekne nebo havaruje. Toho lze dosáhnout pomocí časovače Watchdog. Funguje to takto: Existuje dílčí rutina Přerušení, která běží každou sekundu. ISR zvyšuje čítač při každém spuštění a kontroluje, zda čítač dosáhl maximálního počtu. Jakmile čítač dosáhne maximální hodnoty, modul se sám resetuje za předpokladu, že došlo k havárii. Při normálním provozu se počítadlo vždy resetuje, než dosáhne maximálního počtu.

Krok 2: Konfigurace serveru SQL Server

Konfigurace serveru SQL
Konfigurace serveru SQL

Nastavení serveru SQL Server je také velmi jednoduché. Stačí vytvořit databázi na serveru SQL a importovat nastavení importováním souboru s názvem „database_structure.txt“. V tomto kroku najdete soubor. Protože instruktážní soubor neumožňuje odesílat soubory „.sql“, přejmenoval jsem soubor na „.txt“.

Poznámka: Přejmenujte soubor z „.txt“na „.sql“.

Krok 3: Konfigurace souborového serveru

Konfigurace serveru je opravdu snadná, pokud vlastníte webovou stránku, která je hostována online. Nebudu procházet celým postupem nastavení webové stránky a hostování, protože je mimo rozsah tohoto tutoriálu. Můžete jej však hostovat na svém vlastním počítači jako localhost a vyzkoušet si práci se soubory.

Protože Instructable neumožňuje nahrát soubory PHP, přejmenoval jsem soubory na ".txt".

Poznámka: Přejmenujte prosím příponu souborů na „.php“. Nezapomeňte také změnit přihlašovací údaje souboru „config.php“.

Stačí nahrát soubory na server a můžete začít.

Dám vám stručné informace o souborech PHP.

db_config.php:

V tomto souboru jsou uložena všechna pověření potřebná k připojení k serveru SQL.

db_connect:

V tomto souboru je přítomna třída potřebná pro připojení k databázi.

insert.php:

NodeMCU nazývá tento soubor PHP pro odesílání dat na server metodou GET. Tento soubor je také zodpovědný za ukládání stejných dat na server SQL.

retrieve.php:

Uživatel/Klient volá toto PHP pomocí metody GET. Server vypočítá vzdálenost mezi uživatelem a všemi moduly. Poté se data nejbližšího modulu odešlou jako odpověď klientovi ve formátu JSON/XML podle preferencí klienta.

update.php:

Tento soubor PHP volá modul každý den v určitou dobu, aby zkontroloval, zda modul používá nejnovější verzi firmwaru. Stačí umístit nejnovější soubor „.bin“na souborový server a zadat adresář souboru do proměnné souboru.

Pokud se vám zdá, že se tyto soubory na první pohled zdají skličující, přidal jsem v dalším kroku uživatelskou dokumentaci.

Krok 4: Uživatelská dokumentace

Uživatelská dokumentace
Uživatelská dokumentace
Uživatelská dokumentace
Uživatelská dokumentace

Úvod:

Weather API poskytuje jednoduché rozhraní pro vyžádání údajů o počasí pro místa na povrchu Země. Požadujete informace o počasí pro konkrétní pár zeměpisné šířky a délky se zadaným výstupním formátem. API vrací teplotu, vlhkost, tlak a index kvality ovzduší, který byl naposledy zaznamenán nejbližším modulem z požadovaného místa.

Než začnete:

Tento dokument je určen pro vývojáře webových stránek a mobilních zařízení, kteří chtějí zahrnout informace o počasí do vyvíjené aplikace. Představuje použití pomocí API a referenčního materiálu o dostupných parametrech.

Požadavky na údaje o počasí:

Weather API žádosti jsou konstruovány jako řetězec URL. Rozhraní API vrací data o počasí pro bod na Zemi určený párem zeměpisná šířka/délka. Přesnost údajů o počasí je přímo úměrná hustotě modulů umístěných v oblasti.

Žádost Weather API má následující formu:

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

Kde výstupní formát (formát) může být některá z následujících hodnot:

  • JSON (doporučeno), označuje výstup v JavaScript Object Notation (JSON); nebo
  • XML, označuje výstup v XML, zabalený v uzlu.

Parametry požadavku:

Jak je standardem u všech adres URL, parametry jsou odděleny znakem ampersand (&). Seznam parametrů a jejich možných hodnot je uveden níže.

Požadované parametry:

  • lat: Představuje zeměpisnou šířku místa, kde se má vyhledávat. (např. lat = 19,56875)
  • lon: Představující délku místa k vyhledání. (např. lon = 72.97568)

Volitelné parametry:

formát: Určuje výstupní formát odezvy dat o počasí. Může to být buď JSON nebo XML. Výchozí hodnota je JSON. (např. format = json nebo format = xml)

Reakce na počasí:

Pro každý platný požadavek vrátí služba časového pásma odpověď ve formátu uvedeném v URL požadavku. Každá odpověď bude obsahovat následující prvky:

  • úspěch: hodnota udávající stav odpovědi.

    • 0: Negativní; označuje, že požadavek byl nesprávně formulován.
    • 1: kladné; označuje, že požadavek byl úspěšný.
  • zpráva: řetězec označující důvod nesprávnosti požadavku. K dispozici pouze v případě, že je stav negativní.
  • data: pole s více parametry počasí.

    • teplota: údaje o teplotě.
    • hukot: údaje o přítomnosti vlhkosti.
    • pres: údaje o absolutním tlaku.
    • aqi: současný index kvality ovzduší.

Odpověď příkladů obou formátů je vidět na obrázcích.

Krok 5: Nastavení modulu

Nastavení modulu
Nastavení modulu
Nastavení modulu
Nastavení modulu

Vytvoří se přístupový bod a webová stránka je hostována na IP adrese (výchozí: 192.168.4.1) pro příjem pověření od správce zařízení/uživatele při prvním spuštění nebo pokud modul nenalezne již uložené přihlašovací údaje v EEPROM.

Uživatel musí zadat SSID a heslo, ke kterému chce, aby se modul připojil. Zeměpisná šířka a délka se vyplní automaticky, pokud prohlížeči povolíte přístup k umístění.

Jakmile jsou zadány všechny podrobnosti, klikněte na tlačítko „ODESLAT“a poté jsou všechna pověření zapsána do EEPROM modulu.

Tento krok je velmi zásadní, protože při hromadné výrobě modulů není možné naprogramovat všechny moduly s přesnými údaji o poloze a pověřeními WiFi. Rovněž není vhodné napevno kódovat přihlašovací údaje v programu, protože pokud vůbec potřebujeme modul přemístit na jiné místo nebo chceme změnit pověření WiFi, budeme muset modul přeprogramovat. Aby se předešlo těmto potížím, je implementována funkce počátečního nastavení.

Krok 6: Nyní je čas přispět daty do cloudu

Nyní je čas přispět daty do cloudu
Nyní je čas přispět daty do cloudu
Nyní je čas přispět daty do cloudu
Nyní je čas přispět daty do cloudu

Po dokončení všech předchozích kroků je nyní čas nechat modul nahrát data na server. Po uložení přihlašovacích údajů se automaticky spustí nahrávání.

Volá "insert.php" jako volání API s předáním všech parametrů k odeslání metodou GET.

Níže uvedený fragment kódu ukazuje, jak jsou parametry zpracovány.

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.}

Stejně tak všechny moduly začnou nahrávat data.

Poznámka: Pokud máte pocit, že je server přetížen, snižte v kódu frekvenci nahrávání.

Krok 7: Aktualizace OTA (Over the Air)

Aktualizace Over the Air (OTA)
Aktualizace Over the Air (OTA)

Poté, co je modul nastaven a začne nahrávat data, kontroluje aktualizace firmwaru každý den v konkrétní čas uvedený v programu. Pokud nějaký najde, stáhne a bliká v něm binární soubor. A pokud ne, pokračuje normální operace nahrávání dat.

Chcete -li zkontrolovat novou aktualizaci, modul zavolá „update.php“odesláním adresy MAC do záhlaví požadavku. Server poté zkontroluje, zda má konkrétní MAC adresa novou aktualizaci, pokud ano, odešle jako odpověď binární soubor nejnovějšího firmwaru.

Zkontroluje také všechna nezbytná záhlaví požadovaná pro základní autentizaci modulu.

Krok 8: Jak může uživatel/klient přistupovat k datům…

Jak může uživatel/klient přistupovat k datům…
Jak může uživatel/klient přistupovat k datům…
Jak může uživatel/klient přistupovat k datům…
Jak může uživatel/klient přistupovat k datům…
Jak může uživatel/klient přistupovat k datům…
Jak může uživatel/klient přistupovat k datům…

Přístup k datům ze serveru je velmi jednoduchý. Pouhým zavoláním „retrieve.php“získáme data o počasí ve formátu JSON. Poté už stačí jen analyzovat data JSON pro přístup k jednotlivým prvkům. Podobné je to s odpovědí XML. Uživatel může vždy určit upřednostňovaný formát odpovědi, ve kterém se s ním pohodlně pracuje. Pokud uživatel formát nezadá, je výchozí formát JSON.

Ukázkový požadavek se provádí pomocí nástroje POSTMAN ke kontrole fungování rozhraní API.

Příklad analýzy odpovědi JSON v javascriptu je uveden ve fragmentu kódu níže.

var url = "https://example.com/retrieve.php?lat=19.044848&lon=72.8464373";funkce httpGet (theUrl) {var xmlHttp = new XMLHttpRequest (); xmlHttp.open ("GET", theUrl, false); // false pro synchronní požadavek xmlHttp.send (null); vrátit 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 ("vlhkost"). innerHTML = Math.round (obj.data [0].hum) + "%"; document.getElementById ("tlak"). innerHTML = Math.round (obj.data [0].pres) + "mb";

Na konci tohoto kroku je k dispozici zdrojový kód ukázkové stránky HTML, která analyzuje odpověď JSON.

Poznámka: Změňte příponu souboru na „.html“.

Krok 9: Omezení tohoto projektu

  • Projekt používá k odeslání dat GET; i když se nejedná o citlivá data, s daty lze snadno manipulovat, protože nemá žádný mechanismus pro kontrolu pravosti zdroje kromě kontroly hlaviček, které lze snadno upravit a dokonce i normální zařízení může být podvrženo vypadat jako modul počasí.
  • Protože modul pouze spoléhá a závisí na jiném přístupovém bodu (WIFI) k odesílání dat, která by ve většině případů byla z jiných organizací. Pokud je přístupový bod z nějakého důvodu mimo provoz, modul nebude moci odesílat data.
  • Přestože je projekt postaven za účelem zvýšení přesnosti stávajícího systému, senzor dostupný na trhu je méně přesný, než se očekávalo, což ve výsledku vede k selhání jeho hlavního účelu.
  • Při plánování projektu jsem plánoval zahrnout režim, ve kterém server průměruje hodnotu dat na základě polohy pro opravu chyb. Ale po implementaci této funkce jsem si uvědomil, že k překladu souřadnic do geografických oblastí potřebuje nějaká API třetích stran.

Krok 10: Další vylepšení, která lze na tomto projektu provést

  • Přesnost modulu lze dále zlepšit speciálním přizpůsobením senzorů pro konkrétní účel namísto použití generického modulu, který je k dispozici na trhu.
  • Modul lze upravit tak, aby fungoval ještě více samostatně, a to pomocí speciálního čipu, který bezdrátově komunikuje s buňkovými věžemi a odesílá data, čímž se zlepšuje odolnost proti chybám.
  • Solární panel a bateriový systém lze použít ve spojení s režimem hlubokého spánku ESP, čímž se zvýší energetická účinnost a bude nezávislejší na externím napájecím zdroji.
  • POST lze použít k odesílání dat pomocí nějakého autentizačního mechanismu, jako je použití cyklických kódů pro každý přenos dat.
  • Místo NodeMCU, což je prototypová deska, můžeme v sériové výrobě použít vlastní mikrokontrolér, který nejenže sníží náklady, ale také co nejlépe využije systémové prostředky.
  • Ve spojení s rozhraním Google geolocation API a připojením k jakémukoli dostupnému otevřenému WIFI může modul fungovat i bez jeho konfigurace; připraven přenášet data z továrny bez jakéhokoli nastavení.

Krok 11: Několik slov pro publikum

Několik slov pro diváky
Několik slov pro diváky

Hej, lidi, uvědomuji si, že to není vůbec návod pro začátečníky, protože jsem nezmínil každý detail, který je třeba pokrýt. A také tento projekt je opravdu obrovský, aby byl zahrnut v Instructable. Přesto jsem se snažil ze všech sil pokrýt všechny důležité aspekty projektu. Vím také, že video ukazující fungování projektu by bylo opravdu skvělé, ale protože toto je můj první návod a abych byl upřímný, toto je moje první publikace něčeho podobného, byl jsem docela nervózní být před Fotoaparát.

Pokud potřebujete pomoc při vytváření tohoto projektu nebo něčeho podobného, kontaktujte mě na [email protected] nebo můžete jako vždy zanechat komentář. Budu se vám snažit pomoci, jak nejlépe umím.

Děkuji!!

Doporučuje: