INHOUDSOPGAWE:

Slim verspreide IoT -weermoniteringstelsel met behulp van NodeMCU: 11 stappe
Slim verspreide IoT -weermoniteringstelsel met behulp van NodeMCU: 11 stappe

Video: Slim verspreide IoT -weermoniteringstelsel met behulp van NodeMCU: 11 stappe

Video: Slim verspreide IoT -weermoniteringstelsel met behulp van NodeMCU: 11 stappe
Video: De kwaliteit van vaccins garanderen met behulp van IoT | B Medical Systems 2024, Julie
Anonim
Slim verspreide IoT -weermoniteringstelsel met behulp van NodeMCU
Slim verspreide IoT -weermoniteringstelsel met behulp van NodeMCU

U weet miskien almal van die tradisionele weerstasie; maar het u al ooit gewonder hoe dit werk? Aangesien die tradisionele weerstasie duur en omvangryk is, is die digtheid van hierdie stasies per oppervlakte -eenheid baie minder, wat bydra tot die onjuistheid van die data. Ek sal u verduidelik hoe: Gestel 'n stasie is in die middel van 'n stad, en dit is die enigste stasie in 'n 'x' meter radius, dit kan maklik bevooroordeeld wees as daar 'n besoedelingsveroorsakende middel in die omgewing is van die stasie wat die hele 'x' meter radiusarea as besoedel toon, aangesien die enkele stasie verantwoordelik is om die weerdata van die hele gebied te bepaal.

Om hierdie probleem op te los, moet die digtheid van die modules verhoog word, wat slegs moontlik is as die modules goedkoper is en 'n kleiner voetspoor het as die bestaande.

Dit is die rede waarom my voorgestelde oplossing die perfekte oplossing vir hierdie probleem is. Dit kos minder as $ 10 en rus ook maklik op my handpalm.

Hoe dit werk…

Daar is 3 belangrike dele van hierdie projek.

Toestelkant:

Die toestel is 'n IoT -module wat op die foto getoon word, wat elke 'x' interval die weerdata na die bediener stuur. Die data bevat die werklike weerdata, die geografiese ligging van die module; ie koördinate, sy MAC -adres; om die toestel, die firmware -weergawe waarop dit tans werk, uniek te identifiseer. Die toestelkant bestaan uit N-modules wat oor die hele gebied versprei is, wat aktief data tot die bediener bydra.

Bedienerskant:

Soos die naam aandui, is dit die gesentraliseerde bediener wat verskeie bewerkings hanteer, soos die ontvangs van die data van die modules en die stoor daarvan in die databasis, die opdatering van die module met die nuutste firmware as dit op 'n ouer weergawe werk, die weerdata na die kliënt op aanvraag.

Kliënt/gebruiker kant:

Dit is die eindgebruiker wat die weerdata van die bediener versoek. Die kliënt stuur die huidige ligging en gebaseer op die ligging, bereken die bediener die afstand tussen die kliënt en al die modules en stuur die weerdata van die naaste module na die kliënt wat as akkuraat beskou word.

Voorrade

  • NodeMCU (ESP8266-12E)
  • DHT11 (Humiditeits- en temperatuursensor)
  • BMP180 (druk- en temperatuursensor)
  • MQ-135 (luggehalte-indekssensor)
  • USB -kabel (om die program op te laai)
  • 5 volt kragtoevoer
  • Kondensators (opsioneel: om parallel met die kraglyn geplaas te word)
  • Arduino IDE (om die program te ontfout en op te laai)
  • POSTMAN -toepassing (opsioneel: om die API te ontfout)
  • 'N Webwerf (om die PHP- en MySQL -bediener te huisves)

Stap 1: Soldeer al die komponente en laai die program op na die NodeMCU

Soldeer al die komponente en laai die program op na die NodeMCU
Soldeer al die komponente en laai die program op na die NodeMCU
Soldeer al die komponente en laai die program op na die NodeMCU
Soldeer al die komponente en laai die program op na die NodeMCU

Soldeer al die komponente aan die NodeMCU soos getoon in die kringdiagram op 'n perf board. Soldeer ook 'n kondensator parallel met die kraglyne, aangesien die krag toeneem tydens die aktiewe oordrag en ontvang van data.

Sodra die soldeerwerk voltooi is, laai die kode in die lêer "code.c" op.

Let wel: Moenie vergeet om die geloofsbriewe met u eie geloofsbriewe te vervang nie. Plaas ook die lêer met die naam "html_file.h" in die arduino -sketsmap. Alle koptekstlêers wat in hierdie projek gebruik word, kan hier gevind word

Kenmerke van die kode:

Toegangspunt: Aangesien dit moeilik is om elke module met die geloofsbriewe in massaproduksie te programmeer, bied die module 'n webblad op sy eerste opstart om die geloofsbriewe van die WiFi waarmee die modules gekoppel moet word, te aanvaar en in die EEPROM te stoor vir latere gebruik.

Sodra die geloofsbriewe gekonfigureer is, kontroleer die NodeMCU die EEPROM vir geloofsbriewe en maak verbinding met die WiFi -geloofsbriewe wat in die EEPROM voorkom.

Nadat die NodeMCU suksesvol met die WiFi verbind is, begin die data elke x 'interval' na die bediener oplaai, die data bevat weerdata, MAC -adres van die module, weergawe van die firmware, geografiese ligging van die toestel.

OTA -opdatering: Die module kyk ook elke dag na nuwe firmware -opdatering op 'n spesifieke tyd wat in die kode gespesifiseer word. Hierdie funksie is handig, aangesien dit nie vir enige vervaardiger moontlik is om die program van 'n individuele module aan te pas as daar veranderings aangebring moet word nie.

Watchdog Timer: Atlast, daar moet 'n manier wees om homself te herstel sonder menslike ingryping as dit vasval of neerstort. Dit kan bereik word deur die Watchdog -timer te gebruik. Die manier waarop dit werk is: Daar is 'n onderbrekings-subroetine wat elke sekonde loop. Die ISR verhoog die teler elke keer as dit uitgevoer word en kyk of die teller die maksimum telling bereik het. Sodra die teller die maksimum waarde bereik, herstel die module homself as dit verongeluk het. By normale werking word die toonbank altyd herstel voordat dit die maksimum telling bereik.

Stap 2: Konfigureer die SQL Server

Die opstel van die SQL Server
Die opstel van die SQL Server

Die opstel van die SQL Server is ook baie eenvoudig. Skep net 'n databasis in die SQL -bediener en voer die instelling in deur die lêer met die naam "database_structure.txt" in te voer. U kan die lêer in hierdie stap vind. Omdat die instruksies nie toelaat om ".sql" lêers op te laai nie, het ek die lêer hernoem na ".txt".

Let wel: Hernoem die lêer van ".txt" na ".sql".

Stap 3: Konfigureer die lêerbediener

Dit is baie maklik om die bediener op te stel as u 'n webwerf besit en dit word aanlyn aangebied. Ek sal nie die hele proses van die oprigting van 'n webwerf en die aanbied daarvan deurgaan nie, aangesien dit buite die omvang van hierdie tutoriaal val. Maar u kan dit op u eie rekenaar as localhost aanbied om die werking van die lêers te probeer.

Aangesien die Instructable nie PHP -lêers kan oplaai nie, het ek die lêers hernoem na ".txt".

Let wel: hernoem die uitbreiding van die lêers na ".php". Vergeet ook nie om die geloofsbriewe van die "config.php" -lêer te verander nie.

Laai die lêers net na die bediener op, dan is u klaar.

Ek gee u kort inligting oor die PHP -lêers.

db_config.php:

In hierdie lêer word al die geloofsbriewe wat benodig word om aan die SQL -bediener te koppel, gestoor.

db_connect:

In hierdie lêer is die klas wat nodig is vir databasisverbinding, teenwoordig.

insert.php:

Die NodeMCU noem hierdie PHP -lêer vir die oplaai van die data na die bediener volgens die GET -metode. Hierdie lêer is ook verantwoordelik om dieselfde data op die SQL -bediener te stoor.

retrieve.php:

Die gebruiker/kliënt noem hierdie PHP volgens die GET -metode. Die bediener bereken die afstand tussen die gebruiker en al die modules. Die data van die naaste module word dan gestuur as 'n antwoord op die kliënt in JSON/XML -formaat, soos verkies deur die kliënt.

update.php:

Hierdie PHP -lêer word elke dag op 'n spesifieke tyd deur die module gebel om te kontroleer of die module die nuutste weergawe van die firmware het. Plaas die nuutste ".bin" lêer in die lêerbediener en spesifiseer die gids van die lêer in die veranderlike van die lêer.

As hierdie baie lêers aanvanklik skrikwekkend lyk, het ek die gebruikersdokumentasie in die volgende stap opgeneem.

Stap 4: Gebruikersdokumentasie

Gebruikersdokumentasie
Gebruikersdokumentasie
Gebruikersdokumentasie
Gebruikersdokumentasie

Inleiding:

Die Weather API bied 'n eenvoudige koppelvlak om die weerdata vir plekke op die oppervlak van die aarde aan te vra. U versoek die weerinligting vir 'n spesifieke breedtegraad/lengte -paar met die uitvoerformaat gespesifiseer. Die API gee die temperatuur, humiditeit, druk en luggehalte -indeks terug wat laas deur die naaste module vanaf die aangevraagde plek aangeteken is.

Voor jy begin:

Hierdie dokument is bedoel vir webwerf- en mobiele ontwikkelaars wat weerinligting wil insluit oor 'n program wat ontwikkel word. Dit stel die gebruik bekend met behulp van die API en verwysingsmateriaal op die beskikbare parameters.

Weer data versoeke:

Weather API -versoeke word opgestel as 'n URL -string. Die API gee weerdata vir 'n punt op die aarde, gespesifiseer deur 'n breedtegraad/lengte -paar. Let daarop dat die akkuraatheid van die weerdata direk eweredig is aan die digtheid van die modules wat in 'n gebied geplaas word.

'N Weer -API -versoek neem die volgende vorm aan:

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

Waar uitvoerformaat (formaat) een van die volgende waardes kan wees:

  • JSON (aanbeveel), dui die uitvoer aan in JavaScript Object Notation (JSON); of
  • XML, dui die uitvoer in XML aan, toegedraai binne die knoop.

Versoek parameters:

Soos standaard in alle URL's, word parameters geskei met die ampersand (&) karakter. Die lys met parameters en hul moontlike waardes word hieronder aangedui.

Vereiste parameters:

  • lat: verteenwoordig die breedtegraad van 'n plek om op te soek. (bv. lat = 19.56875)
  • lon: Dit verteenwoordig 'n lengtegraad van 'n plek om op te soek. (bv. lon = 72.97568)

Opsionele parameters:

formaat: Spesifiseer die antwoorduitsetformaat van die weerdata. Dit kan óf JSON óf XML wees. Die standaard is JSON. (bv. formaat = json of formaat = xml)

Weerreaksies:

Vir elke geldige versoek sal die tydsonesdiens 'n antwoord gee in die formaat wat in die versoek -URL aangedui word. Elke antwoord bevat die volgende elemente:

  • sukses: 'n waarde wat die status van die reaksie aandui.

    • 0: Negatief; dui aan dat die versoek misvorm is.
    • 1: Regstellend; dui aan dat die versoek suksesvol was.
  • boodskap: 'n string wat die rede vir die misvorming van die versoek aandui. Slegs beskikbaar as die status negatief is.
  • data: 'n skikking met verskeie weerparameters.

    • temp: die temperatuurdata.
    • neurie: die humiditeitsaanwesigheidsdata.
    • pres: die absolute druk data.
    • aqi: die huidige luggehalte -indeks.

Die voorbeelde -reaksie van beide formate kan op die beelde gesien word.

Stap 5: Opstel van die module

Opstel van die module
Opstel van die module
Opstel van die module
Opstel van die module

'N Toegangspunt word geskep en 'n webblad word op 'n IP-adres (standaard: 192.168.4.1) gehuisves om die geloofsbriewe van die apparaatbestuurder/gebruiker te ontvang tydens die eerste opstart, of as die module nie die reeds gestoorde geloofsbriewe in die EEPROM.

Die gebruiker moet die SSID en wagwoord invoer waarmee die gebruiker wil hê dat die module moet koppel. Die breedtegraad en lengtegraad word outomaties gevul as u die blaaier toegang tot die ligging gee.

Sodra al die besonderhede ingevoer is, klik op die "SEND" -knoppie, en dan word alle geloofsbriewe in die EEPROM van die module geskryf.

Hierdie stap is baie belangrik, aangesien dit tydens die massaproduksie van die modules nie haalbaar is om al die modules met die presiese liggingsdata en WiFi-geloofsbriewe te programmeer nie. Dit is ook nie raadsaam om die geloofsbriewe in die program hard te kodeer nie, want as ons die module hoegenaamd na 'n ander plek moet verskuif of die WiFi-geloofsbriewe wil verander, moet ons die module herprogrammeer. Om hierdie moeite te vermy, word die aanvanklike opstelfunksie geïmplementeer.

Stap 6: Dit is nou tyd om data by te dra tot die wolk

Dit is nou tyd om data by te dra tot die wolk
Dit is nou tyd om data by te dra tot die wolk
Dit is nou tyd om data by te dra tot die wolk
Dit is nou tyd om data by te dra tot die wolk

Nadat al die vorige stappe voltooi is, is dit tyd dat die module die data na die bediener kan oplaai. Dit begin outomaties oplaai sodra u die geloofsbriewe gestoor het.

Dit noem die 'insert.php' as 'n API -oproep met al die parameters wat deur die GET -metode gestuur moet word.

Die onderstaande kodefragment wys hoe die parameters verwerk word.

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

Net so begin al die modules die data oplaai.

Opmerking: verlaag die oplaaifrekwensie in die kode as u voel dat die bediener oorlaai word.

Stap 7: Opdatering via die lug (OTA)

Opdatering oor die lug (OTA)
Opdatering oor die lug (OTA)

Nadat die module opgestel is en die data begin oplaai, kyk dit elke dag na firmware -opdaterings op 'n spesifieke tyd wat in die program genoem word. As dit gevind word, laai dit af en flits die binêre lêer daarin. En as dit nie die geval is nie, word die normale oplaai van die data voortgesit.

Om te kyk of daar 'n nuwe opdatering is, noem die module die 'update.php' deur die MAC -adres in sy kopkop te stuur. Die bediener kyk dan of die spesifieke MAC -adres 'n nuwe opdatering het, indien wel, stuur dit die binêre lêer van die nuutste firmware as antwoord.

Dit kyk ook na al die nodige opskrifte wat nodig is vir basiese verifikasie van die module.

Stap 8: Hoe gebruiker/kliënt toegang tot die data kan kry …

Hoe gebruiker/kliënt toegang tot die data kan kry …
Hoe gebruiker/kliënt toegang tot die data kan kry …
Hoe gebruiker/kliënt toegang tot die data kan kry …
Hoe gebruiker/kliënt toegang tot die data kan kry …
Hoe gebruiker/kliënt toegang tot die data kan kry …
Hoe gebruiker/kliënt toegang tot die data kan kry …

Dit is redelik eenvoudig om toegang tot die data vanaf die bediener te verkry. Deur net die 'retrieve.php' te noem, kry ons die weerdata in JSON -formaat. Daarna is dit net die ontleding van die JSON -data om toegang tot die individuele elemente te verkry. Soortgelyk is met XML -reaksie. Die gebruiker kan altyd die voorkeurformaat van reaksie spesifiseer waarin die gebruiker gemaklik is om mee te werk. As die gebruiker nie die formaat spesifiseer nie, is die standaardformaat JSON.

'N Voorbeeldversoek word gedoen met behulp van POSTMAN -instrument om die werking van die API te kontroleer.

'N Voorbeeld van die ontleding van JSON -reaksie in javascript word in die onderstaande kodefragment getoon.

var url = "https://example.com/retrieve.php?lat=19.044848&lon=72.8464373";funksie httpGet (theUrl) {var xmlHttp = nuwe XMLHttpRequest (); xmlHttp.open ("GET", theUrl, false); // vals vir sinchrone versoek xmlHttp.send (null); gee xmlHttp.responseText terug; } var myVar = httpGet (url); var obj = JSON.parse (myVar); document.getElementById ("aqi"). innerHTML = obj.data [0].aqi; document.getElementById ("temperatuur"). innerHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("temp"). innerHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("humiditeit"). innerHTML = Math.round (obj.data [0].hum) + "%"; document.getElementById ("druk"). innerHTML = Math.round (obj.data [0].pres) + "mb";

Aan die einde van hierdie stap is die bronkode van die voorbeeld HTML -bladsy wat die JSON -reaksie ontleed, beskikbaar.

Let wel: Verander die uitbreiding van die lêer na ".html".

Stap 9: Beperkings van hierdie projek

  • Die projek gebruik GET om die data te stuur; alhoewel dit nie te doen het met sensitiewe data nie, kan die data maklik gemanipuleer word, aangesien dit nie 'n meganisme het om die egtheid van die bron te kontroleer nie, behalwe om die opskrifte te kontroleer, wat maklik verander kan word en selfs 'n normale toestel bedrieg kan word om soos 'n weermodule te lyk.
  • Aangesien die module slegs afhanklik is van en afhanklik is van ander toegangspunte (WIFI) om die data te stuur wat in die meeste gevalle van ander organisasies sou wees. As die toegangspunt om een of ander rede in diens is, sou die module nie data kon stuur nie.
  • Alhoewel die projek gebou is om die akkuraatheid van die bestaande stelsel te verhoog, is die sensor wat in die mark beskikbaar is, minder akkuraat as wat verwag is, wat die hoofdoel daarvan tot gevolg het.
  • Tydens die beplanning van die projek was ek van plan om 'n modus in te sluit waarin die bediener die gegewenswaarde gemiddeld op grond van die ligging vir foutkorreksie gebruik. Maar toe ek hierdie funksie implementeer, besef ek dat dit 'n paar API's van derde partye benodig om die koördinate na geografiese streke te vertaal.

Stap 10: Verdere verbeterings wat aan hierdie projek aangebring kan word

  • Die akkuraatheid van die module kan verder verbeter word deur die sensors spesiaal vir die spesifieke doel aan te pas in plaas van die generiese module wat in die mark beskikbaar is, te gebruik.
  • Die module kan aangepas word om selfs meer onafhanklik te werk deur 'n spesiale chip te gebruik wat draadloos met Cell-torings kommunikeer om die data te stuur en sodoende die fouttoleransie te verbeter.
  • Sonpaneel en batterystelsel kan saam met die diepe slaapmodus van ESP gebruik word, wat die kragdoeltreffendheid verbeter en dit meer onafhanklik maak van 'n eksterne kragtoevoer.
  • POST kan gebruik word om data te stuur met 'n verifikasiemeganisme, soos die gebruik van sikliese kodes vir elke oordrag van data.
  • In plaas van NodeMCU, wat 'n prototipe-bord is, kan ons 'n aangepaste mikrobeheerder gebruik in massaproduksie wat nie net die koste verlaag nie, maar ook die stelselbronne die beste benut.
  • In samewerking met die Google -geografiese ligging -API en verbinding met enige beskikbare oop WIFI, kan die module werk sonder om dit eers op te stel; gereed om data van die fabriek af te stuur sonder dat dit hoegenaamd nodig is nie.

Stap 11: 'n Paar woorde vir die gehoor

'N Paar woorde vir die gehoor
'N Paar woorde vir die gehoor

Hallo ouens, ek besef dat dit glad nie 'n beginnersvriendelike handleiding is nie, aangesien ek nie elke detail wat genoem moet word, genoem het nie. En ook hierdie projek is werklik groot om in 'n Instructable gedek te word. Tog het ek my bes probeer om elke belangrike aspek van die projek te dek. Ek weet ook dat 'n video wat die werking van die projek vertoon, regtig wonderlik sou gewees het, maar aangesien dit my eerste opdrag is en om eerlik te wees, is dit my eerste publikasie van iets soortgelyk aan hierdie, was ek baie senuweeagtig om voor 'n kamera.

As u hulp nodig het met die maak van hierdie projek of iets soortgelyks, kontak my asseblief by [email protected], of u kan soos altyd 'n opmerking lewer. Ek sal probeer om julle na die beste van my vermoë te help.

Dankie!!

Aanbeveel: