Tartalomjegyzék:

Intelligens elosztott IoT időjárás -figyelő rendszer a NodeMCU használatával: 11 lépés
Intelligens elosztott IoT időjárás -figyelő rendszer a NodeMCU használatával: 11 lépés

Videó: Intelligens elosztott IoT időjárás -figyelő rendszer a NodeMCU használatával: 11 lépés

Videó: Intelligens elosztott IoT időjárás -figyelő rendszer a NodeMCU használatával: 11 lépés
Videó: Головокружение, скачет давление, слабость. 4 способа просто и быстро помочь 2024, Július
Anonim
Intelligens elosztott IoT időjárás -megfigyelő rendszer a NodeMCU használatával
Intelligens elosztott IoT időjárás -megfigyelő rendszer a NodeMCU használatával

Mindannyian ismerik a hagyományos időjárás -állomást; de elgondolkodtál már azon, hogyan is működik valójában? Mivel a hagyományos meteorológiai állomás költséges és terjedelmes, ezeknek az állomásoknak a területegységre jutó sűrűsége nagyon alacsony, ami hozzájárul az adatok pontatlanságához. Elmagyarázom, hogyan: Tegyük fel, hogy egy állomás a város közepén található, és ez az egyetlen állomás, amely x méteres sugarú körben található, és könnyen elfogult lehet, ha szennyezést okozó anyag van a közelben az állomás teljes "x" méter sugarú területét szennyezettnek mutatva, mivel az egyetlen állomás felelős az egész terület időjárási adatainak meghatározásáért.

Ennek a problémának a kiküszöbölése érdekében meg kell növelni a modulok sűrűségét, ami csak akkor lehetséges, ha a modulok olcsóbbak és kisebb helyet foglalnak el, mint a meglévő.

Ez az oka annak, hogy a javasolt megoldásom tökéletes megoldás erre a problémára, kevesebb, mint 10 dollárba kerül, és könnyen a tenyeremen is nyugszik.

Hogyan működik…

Ennek a projektnek 3 fő része van.

Eszköz oldal:

Az Eszköz a képen látható IoT modul, amely minden x időközönként elküldi az időjárási adatokat a szervernek. Az adatok tartalmazzák a tényleges időjárási adatokat, a modul földrajzi elhelyezkedését; azaz koordinátái, MAC -címe; az eszköz egyedi azonosításához, az éppen futó firmware verzióhoz. Az eszközoldalon N-modulok találhatók, amelyek el vannak osztva a területen, és aktívan járulnak hozzá a szerverhez.

Szerver oldal:

Ahogy a neve is sugallja, a központosított szerver több műveletet is kezel, például az adatok fogadását a modulokból és tárolását az adatbázisban, a modul frissítését a legújabb firmware -rel, ha régebbi verzión fut, és elküldi az időjárási adatokat a ügyfél kérésre.

Ügyfél/felhasználó oldal:

Ez a végfelhasználó, aki kéri az időjárási adatokat a szerverről. Az ügyfél elküldi az aktuális helyet, és a hely alapján a szerver kiszámítja a kliens és az összes modul közötti távolságot, és elküldi a legközelebbi modul időjárási adatait az ügyfélnek, amelyet pontosnak tekint.

Kellékek

  • NodeMCU (ESP8266-12E)
  • DHT11 (páratartalom és hőmérséklet érzékelő)
  • BMP180 (nyomás- és hőmérsékletérzékelő)
  • MQ-135 (levegőminőség-index-érzékelő)
  • USB kábel (a program feltöltéséhez)
  • 5 voltos tápegység
  • Kondenzátorok (opcionális: az elektromos vezetékkel párhuzamosan kell elhelyezni)
  • Arduino IDE (To hibakeresés és töltsd fel a program)
  • POSTMAN alkalmazás (választható: a hibakeresés a API)
  • Weboldal (a PHP és a MySQL szerver tárolására)

1. lépés: Forrasztja fel az összes összetevőt, és töltse fel a programot a NodeMCU -ra

Forrasztja fel az összes összetevőt, és töltse fel a programot a NodeMCU -ba
Forrasztja fel az összes összetevőt, és töltse fel a programot a NodeMCU -ba
Forrasztja fel az összes összetevőt, és töltse fel a programot a NodeMCU -ba
Forrasztja fel az összes összetevőt, és töltse fel a programot a NodeMCU -ba

Forrasztja az összes alkatrészt a NodeMCU -hoz, ahogyan azt egy áramköri rajz mutatja egy perf kártyán. Ezenkívül forrasztjon egy kondenzátort az elektromos vezetékekkel párhuzamosan, mivel a teljesítmény megugrik az aktív adatátvitel és -fogadás során.

A forrasztási munka befejezése után töltse fel a "code.c" fájlban megadott kódot.

Megjegyzés: Ne felejtse el kicserélni a hitelesítő adatokat saját hitelesítő adataival. Helyezze a "html_file.h" nevű fájlt az arduino vázlatmappájába is. A projektben használt fejlécfájlok itt találhatók

A kód jellemzői:

Hozzáférési pont: Mivel a tömeges gyártásban nehéz minden modult beprogramozni a hitelesítő adatokkal, a modul az első indításkor egy weboldalt tárol, amely elfogadja a WiFi hitelesítő adatait, amelyekhez a moduloknak csatlakozniuk kell, és tárolja az EEPROM -ban későbbi használatra.

A hitelesítő adatok konfigurálása után a NodeMCU ellenőrzi az EEPROM hitelesítő adatait, és csatlakozik az EEPROM -ban található WiFi hitelesítő adatokhoz.

Miután sikeresen csatlakozott a WiFi -hez, a NodeMCU minden x -intervallumban megkezdi az adatok feltöltését a szerverre, az adatok az időjárási adatokat, a modul MAC -címét, a firmware verzióját, az eszköz földrajzi helyét tartalmazzák.

OTA frissítés: A modul minden nap ellenőrzi az új firmware frissítést a kódban meghatározott időpontban. Ez a funkció hasznos, mivel egyetlen gyártó sem tudja folytatni és módosítani az egyes modulok programját, ha változtatásokat kell végrehajtani.

Watchdog Timer: Az Atlastnak módot kell találnia arra, hogy emberi beavatkozás nélkül helyreálljon, ha elakad vagy összeomlik. Ezt a Watchdog időzítő használatával érheti el. Ez így működik: Van egy megszakítási alrutin, amely minden másodpercben fut. Az ISR minden alkalommal növeli a számlálót, amikor végrehajtja, és ellenőrzi, hogy elérte -e a számláló a maximális számot. Amint a számláló eléri a maximális értéket, a modul visszaáll, feltéve, hogy összeomlott. Normál működés esetén a számláló mindig nullázódik, mielőtt eléri a maximális számot.

2. lépés: Az SQL Server konfigurálása

Az SQL Server konfigurálása
Az SQL Server konfigurálása

Az SQL Server beállítása is nagyon egyszerű. Csak hozzon létre egy adatbázist az SQL kiszolgálón, és importálja a beállítást az "database_structure.txt" nevű fájl importálásával. Ebben a lépésben megtalálhatja a fájlt. Mivel az utasítás nem teszi lehetővé a.sql fájlok feltöltését, átneveztem a fájlt ".txt" -re.

Megjegyzés: Nevezze át a fájlt ".txt" -ről ".sql" -re.

3. lépés: A fájlkiszolgáló konfigurálása

A szerver konfigurálása nagyon egyszerű, ha saját webhelye van, és az interneten található. Nem fogom végigvenni a webhely létrehozásának és tárolásának teljes folyamatát, mivel ez nem tartozik az oktatóanyag keretei közé. De a saját számítógépén is házigazdaként helyi szerverként próbálhatja ki a fájlok működését.

Mivel az Instructable nem teszi lehetővé a PHP fájlok feltöltését, átneveztem a fájlokat ".txt" -re.

Megjegyzés: Kérjük, nevezze át a fájlok kiterjesztését ".php" -ra. Ne felejtse el megváltoztatni a "config.php" fájl hitelesítő adatait.

Csak töltse fel a fájlokat a szerverre, és te jó menni.

Röviden tájékoztatok a PHP fájlokról.

db_config.php:

Ebben a fájlban az SQL szerverhez való csatlakozáshoz szükséges összes hitelesítő adat tárolódik.

db_connect:

Ebben a fájlban az adatbázis -kapcsolathoz szükséges osztály található.

insert.php:

A NodeMCU ezt a PHP -fájlt hívja az adatok GET metódussal történő feltöltéséhez a szerverre. Ez a fájl is felelős, hogy tárolja ugyanazokat az adatokat az SQL szerver.

retrieve.php:

A Felhasználó / Ügyfél kéri ezt a PHP a GET metódus segítségével. A szerver kiszámítja a felhasználó és az összes modul közötti távolságot. Ezután a legközelebbi modul adatait válaszként elküldi az ügyfélnek JSON/XML formátumban, az ügyfél által preferált módon.

update.php:

Ezt a PHP -fájlt a modul minden nap meghívja egy adott időpontban annak ellenőrzésére, hogy a modul a firmware legújabb verzióját futtatja -e. Csak helyezze a legújabb ".bin" fájlt a fájlszerverbe, és adja meg a fájl könyvtárát a fájl változójában.

Ha ez a sok fájl elsőre ijesztőnek tűnik, a következő lépésben a felhasználói dokumentációt is belefoglaltam.

4. lépés: Felhasználói dokumentáció

Felhasználói dokumentáció
Felhasználói dokumentáció
Felhasználói dokumentáció
Felhasználói dokumentáció

Bevezetés:

Az Időjárás API egyszerű felületet biztosít az időjárási adatok lekéréséhez a föld felszínén. Az időjárási információkat egy meghatározott szélességi/hosszúsági párhoz kéri a megadott kimeneti formátummal. Az API visszaadja azt a hőmérséklet-, páratartalom-, nyomás- és levegőminőségi indexet, amelyet a legközelebbi modul utoljára rögzített a kért helyről.

Mielőtt elkezded:

Ez a dokumentum azoknak a webhely- és mobilfejlesztőknek szól, akik időjárási információkat szeretnének beépíteni egy fejlesztés alatt álló alkalmazásba. Bemutatja a használatot az API és a referenciaanyag segítségével a rendelkezésre álló paramétereken.

Időjárási adatok kérései:

Az időjárási API -kérelmek URL -karakterláncként készülnek. Az API egy földi pont időjárási adatait adja vissza, amelyet egy szélességi/hosszúsági páros határoz meg. Vegye figyelembe, hogy az időjárási adatok pontossága egyenesen arányos a területen elhelyezett modulok sűrűségével.

A Weather API kérés a következő formát öltheti:

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

Amennyiben kiadási méret (méret) lehetnek a következő értékeket:

  • JSON (ajánlott), a JavaScript Object Notation (JSON) kimenetét jelzi; vagy
  • XML, a kimenetet jelzi XML -ben, a csomóponton belül.

Kérési paraméterek:

Mint minden URL -ben, a paramétereket az ampersand (&) karakterrel kell elválasztani. Az alábbiakban felsoroljuk a paraméterek listáját és lehetséges értékeiket.

Szükséges paraméterek:

  • lat: A keresett hely szélességi fokának ábrázolása. (pl. lat = 19,56875)
  • lon: A keresendő hely hosszúságának ábrázolása. (pl. lon = 72.97568)

Választható paraméterek:

formátum: Meghatározza a válasz kimeneti formátumot az időjárási adatokat. Ez lehet JSON vagy XML. Az alapértelmezett JSON. (pl. formátum = json vagy formátum = xml)

Időjárási válaszok:

Az időzónaszolgáltatás minden érvényes kérésre választ ad a kérés URL -jében megadott formátumban. Minden válasz a következő elemeket tartalmazza:

  • siker: a válasz állapotát jelző érték.

    • 0: negatív; azt jelzi, hogy a kérést rosszul formázták.
    • 1: Megerősítő; azt jelzi, hogy a kérés sikeres volt.
  • üzenet: egy karakterlánc, amely jelzi a kérelem hibás működésének okát. Csak akkor áll rendelkezésre, ha az állapot negatív.
  • adatok: tömb több időjárási paraméterrel.

    • temp: a hőmérsékleti adatok.
    • hum: a nedvesség jelenlétére vonatkozó adatok.
    • pres: az abszolút nyomás adatok.
    • aqi: a jelenlegi levegőminőségi index.

Mindkét formátum példája válasz látható a képeken.

5. lépés: A modul beállítása

Modul beállítása
Modul beállítása
Modul beállítása
Modul beállítása

Hozz létre egy hozzáférési pontot, és egy weboldalt tárol egy IP-címen (alapértelmezett: 192.168.4.1), hogy megkapja a hitelesítő adatokat az eszközkezelőtől/felhasználótól a legelső indításkor, vagy ha a modul nem találja a már tárolt hitelesítő adatokat a EEPROM.

A felhasználónak meg kell adnia azt az SSID -t és jelszót, amelyhez a felhasználó csatlakozni szeretne. A szélességi és hosszúsági fokok automatikusan kitöltődnek, ha engedélyezi a böngésző számára a hely elérését.

Miután megadta az összes adatot, kattintson a "KÜLDÉS" gombra, majd az összes hitelesítő adatot írja be a modul EEPROM -jába.

Ez a lépés nagyon fontos, mivel a modulok tömeges gyártása során nem lehetséges az összes modul pontos helyadatokkal és WiFi hitelesítő adatokkal történő programozása. Ezenkívül nem tanácsos a program hitelesítő adatait kódolni, mivel ha egyáltalán át kell helyeznünk a modult egy másik helyre, vagy meg akarjuk változtatni a WiFi hitelesítő adatokat, újra kell programoznunk a modult. Ennek elkerülése érdekében a szóváltás, a kezdeti beállítások funkció elérhető.

6. lépés: Most itt az ideje, hogy adatokat adjon a felhőhöz

Itt az ideje, hogy adatokat hozzon létre a felhőben
Itt az ideje, hogy adatokat hozzon létre a felhőben
Itt az ideje, hogy adatokat hozzon létre a felhőben
Itt az ideje, hogy adatokat hozzon létre a felhőben

Miután az összes előző lépést elvégezte, itt az ideje, hogy hagyja, hogy a modul feltöltse az adatokat a szerverre. A hitelesítő adatok mentése után automatikusan elindul a feltöltés.

Az "insert.php" -et API hívásnak nevezi, és minden paramétert átad GET metódusban.

Az alábbi kódrészlet bemutatja a paraméterek feldolgozásának módját.

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

Mint minden modul elkezdi feltölteni az adatokat.

Megjegyzés: Csökkentse a feltöltési gyakoriságot a kódban, ha úgy érzi, hogy a szerver túlterhelt.

7. lépés: Air -over (OTA) frissítés

Over the Air (OTA) frissítés
Over the Air (OTA) frissítés

Miután a modul minden beállításra került, és elkezdi feltölteni az adatokat, minden nap ellenőrzi a firmware -frissítéseket a programban meghatározott időpontban. Ha talál ilyet, akkor letölti és felvillanja a benne lévő bináris fájlt. Ha pedig nem, akkor az adatok feltöltésének szokásos művelete folytatódik.

Új frissítés kereséséhez a modul meghívja az "update.php" fájlt, elküldve a MAC -címet a kérés fejlécében. A szerver ezután ellenőrzi, hogy az adott MAC -címnek van -e új frissítése, ha igen, akkor válaszul elküldi a legújabb firmware bináris fájlját.

Ezenkívül ellenőrzi a modul alapvető hitelesítéséhez szükséges összes fejlécet.

8. lépés: Hogyan férhet hozzá a felhasználó/ügyfél az adatokhoz…

Hogyan férhet hozzá a felhasználó/ügyfél az adatokhoz…
Hogyan férhet hozzá a felhasználó/ügyfél az adatokhoz…
Hogyan férhet hozzá a felhasználó/ügyfél az adatokhoz…
Hogyan férhet hozzá a felhasználó/ügyfél az adatokhoz…
Hogyan férhet hozzá a felhasználó/ügyfél az adatokhoz…
Hogyan férhet hozzá a felhasználó/ügyfél az adatokhoz…

Ez nagyon egyszerű elérni az adatokat a szerverre. Csak a "retrieve.php" hívásával megkapjuk az időjárási adatokat válaszként JSON formátumban. Ezt követően már csak a JSON -adatok elemzéséről van szó az egyes elemek eléréséhez. Hasonló az XML válasz. A felhasználó mindig megadhatja azt a válaszformátumot, amelyben a felhasználó kényelmesen dolgozik. Ha a felhasználó nem adja meg a formátumot, akkor az alapértelmezett formátum a JSON.

A mintakérés a POSTMAN eszköz segítségével történik az API működésének ellenőrzésére.

Az alábbi kódrészletben látható egy példa a JSON -válasz JavaScript -elemzésére.

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); // hamis a szinkron kéréshez 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 ("hőmérséklet"). internalHTML = Math.round (obj.adatok [0].temp) + "° C"; document.getElementById ("temp"). internalHTML = Math.round (obj.adatok [0].temp) + "° C"; document.getElementById ("páratartalom"). internalHTML = Math.round (obj.adatok [0]. humum) + "%"; document.getElementById ("nyomás"). internalHTML = Math.round (obj.adatok [0].pres) + "mb";

A példa HTML -oldal forráskódja, amely elemzi a JSON -választ, ezen lépés végén érhető el.

Megjegyzés: Módosítsa a fájl kiterjesztését ".html" -re.

9. lépés: A projekt korlátai

  • A projekt a GET segítségével küldi el az adatokat; annak ellenére, hogy nem érzékeny adatokkal foglalkozik, az adatok könnyen kezelhetők, mivel a fejlécek ellenőrzésén kívül nincs semmilyen mechanizmusa a forrás hitelességének ellenőrzésére, amely könnyen módosítható, és akár egy normál eszköz is hamisítható időjárási modulnak tűnik.
  • Mivel a modul kizárólag más hozzáférési pontokra (WIFI) támaszkodik és függ azoktól az adatok küldésétől, amelyek az esetek többségében más szervezetekről származnak. Ha a hozzáférési pont valamilyen oknál fogva nem működik, a modul nem tud adatokat küldeni.
  • Annak ellenére, hogy a projekt a meglévő rendszer pontosságának növelésére épült, a piacon elérhető érzékelő a vártnál kevésbé pontos, ami a fő céljának meghiúsulásához vezet.
  • A projekt tervezése során terveztem egy olyan üzemmód beillesztését, amelyben a szerver átlagolja az adatok értékét a hely alapján a hibajavításhoz. Ennek a funkciónak a megvalósításakor azonban rájöttem, hogy szüksége van néhány harmadik féltől származó API-ra ahhoz, hogy a koordinátákat földrajzi régiókba fordítsa.

10. lépés: A projekt további fejlesztései

  • A modul pontossága tovább javítható, ha a piacon kapható általános modul használata helyett az érzékelőket kifejezetten az adott célra szabja.
  • A modul úgy módosítható, hogy még önállóbban működjön egy speciális chip használatával, amely vezeték nélkül kommunikál a Cell-tornyokkal az adatok elküldésére, ezáltal javítva a hibatűrést.
  • A napelem és az akkumulátorrendszer együtt használható az ESP mély alvó üzemmódjával, ezáltal javítva az energiahatékonyságot és függetlenítve a külső tápegységtől.
  • A POST segítségével adatokat lehet küldeni valamilyen hitelesítési mechanizmussal, például ciklikus kódok használatával minden adatátvitelhez.
  • A NodeMCU helyett, amely egy prototípus-tábla, egyedi mikrovezérlőt használhatunk a sorozatgyártásban, amely nemcsak csökkenti a költségeket, hanem a lehető legjobban használja ki a rendszer erőforrásait.
  • A Google földrajzi helymeghatározó API -jával és bármely rendelkezésre álló nyílt WIFI -hez kapcsolódva a modul konfiguráció nélkül is működhet; készen áll az adatok gyári küldésére, bármilyen beállítás nélkül.

11. lépés: Néhány szó a közönség számára

Néhány szó a közönségnek
Néhány szó a közönségnek

Hé srácok, rájöttem, hogy ez egyáltalán nem kezdőbarát oktatóanyag, mivel nem említettem minden részletet, amelyet le kell fedni. És ez a projekt valóban hatalmas ahhoz, hogy egy Instructable -ban lefedhető legyen. Mégis megpróbáltam a legjobb tudásom szerint kiterjed minden fontos szempontból a projekt. Azt is tudom, hogy egy videó, amely bemutatja a projekt működését, nagyon jó lett volna, de mivel ez az első tanulságos és őszintén szólva, ez az első publikációm ehhez hasonlóról, nagyon izgultam, hogy egy kamera.

Ha segítségre van szüksége a projekt elkészítéséhez vagy ehhez hasonlóhoz, akkor csak lépjen kapcsolatba velem a [email protected] címen, vagy írjon megjegyzést, mint mindig. Igyekszem a lehetőségeimhez mérten segíteni nektek.

Köszönöm!!

Ajánlott: