Satura rādītājs:

Vieda izplatīta IoT laika apstākļu novērošanas sistēma, izmantojot NodeMCU: 11 soļi
Vieda izplatīta IoT laika apstākļu novērošanas sistēma, izmantojot NodeMCU: 11 soļi

Video: Vieda izplatīta IoT laika apstākļu novērošanas sistēma, izmantojot NodeMCU: 11 soļi

Video: Vieda izplatīta IoT laika apstākļu novērošanas sistēma, izmantojot NodeMCU: 11 soļi
Video: Какие в России есть речные круизные теплоходы? 2024, Jūlijs
Anonim
Vieda izplatīta IoT laika apstākļu uzraudzības sistēma, izmantojot NodeMCU
Vieda izplatīta IoT laika apstākļu uzraudzības sistēma, izmantojot NodeMCU

Jūs visi varētu zināt tradicionālo laika staciju; bet vai esat kādreiz domājuši, kā tas patiesībā darbojas? Tā kā tradicionālā meteoroloģiskā stacija ir dārga un apjomīga, šo staciju blīvums uz platības vienību ir ļoti zems, kas veicina datu neprecizitāti. Es jums paskaidrošu, kā: Pieņemsim, ka stacija atrodas pilsētas vidū un tā ir vienīgā stacija, kas atrodas x metru rādiusā, un to var viegli novirzīt, ja tuvumā atrodas kāds piesārņojumu izraisošs līdzeklis. stacija, kurā visa “x” metru rādiusa teritorija ir piesārņota, jo šī viena stacija ir atbildīga par laika apstākļu datu noteikšanu visā teritorijā.

Lai pārvarētu šo problēmu, ir jāpalielina moduļu blīvums, kas ir iespējams tikai tad, ja moduļi ir lētāki un aizņem mazāku nospiedumu nekā esošais.

Šī iemesla dēļ mans piedāvātais risinājums ir ideāls risinājums šai problēmai, tas maksā mazāk par 10 ASV dolāriem un arī viegli balstās uz manas plaukstas.

Kā tas strādā…

Šim projektam ir 3 galvenās daļas.

Ierīces puse:

Ierīce ir attēlā redzamais IoT modulis, kas nosūta laika apstākļu datus serverim ik pēc “x” laika intervāla. Dati ietver faktiskos laika apstākļu datus, moduļa ģeogrāfisko atrašanās vietu; i., tās koordinātas, tā MAC adrese; lai unikāli identificētu ierīci, programmaparatūras versiju, kurā tā pašlaik darbojas. Ierīces pusē ir N-moduļi, kas izplatīti visā apgabalā, aktīvi sniedzot datus serverim.

Servera puse:

Kā norāda nosaukums, tieši centralizētais serveris veic vairākas darbības, piemēram, datu saņemšanu no moduļiem un saglabāšanu datu bāzē, moduļa atjaunināšanu ar jaunāko programmaparatūru, ja tā darbojas vecākā versijā, nosūtot laika ziņas uz klients pēc pieprasījuma.

Klienta/lietotāja puse:

Tieši galalietotājs pieprasa laika ziņas no servera. Klients nosūta pašreizējo atrašanās vietu, un, pamatojoties uz atrašanās vietu, serveris aprēķina attālumu starp klientu un visiem moduļiem un nosūta klientam tuvākā moduļa laika apstākļu datus, kas tiek uzskatīti par precīziem.

Piegādes

  • NodeMCU (ESP8266-12E)
  • DHT11 (mitruma un temperatūras sensors)
  • BMP180 (spiediena un temperatūras sensors)
  • MQ-135 (gaisa kvalitātes indeksa sensors)
  • USB kabelis (lai augšupielādētu programmu)
  • 5 voltu barošanas avots
  • Kondensatori (pēc izvēles: novietojami paralēli elektrolīnijai)
  • Arduino IDE (lai atkļūdotu un augšupielādētu programmu)
  • POSTMAN lietojumprogramma (pēc izvēles: lai atkļūdotu API)
  • Vietne (PHP un MySQL servera mitināšanai)

1. solis: pielodējiet visus komponentus un augšupielādējiet programmu NodeMCU

Lodējiet visus komponentus un augšupielādējiet programmu NodeMCU
Lodējiet visus komponentus un augšupielādējiet programmu NodeMCU
Lodējiet visus komponentus un augšupielādējiet programmu NodeMCU
Lodējiet visus komponentus un augšupielādējiet programmu NodeMCU

Lodējiet visas sastāvdaļas NodeMCU, kā parādīts shēmā uz perfekta paneļa. Lodējiet arī kondensatoru paralēli elektrolīnijām, jo aktīvi pārsūtot un saņemot jaudu, palielinās.

Kad lodēšanas darbs ir paveikts, augšupielādējiet failā "code.c" norādīto kodu.

Piezīme: neaizmirstiet aizstāt akreditācijas datus ar saviem akreditācijas datiem. Ievietojiet arī failu ar nosaukumu "html_file.h" arduino skiču mapē. Visus šajā projektā izmantotos galvenes failus var atrast šeit

Koda iezīmes:

Piekļuves punkts: Tā kā masveida ražošanā ir grūti ieprogrammēt katru moduli ar akreditācijas datiem, tā pirmajā sāknēšanas reizē tiek izvietota tīmekļa lapa, lai akceptētu to WiFi akreditācijas datus, ar kuriem moduļiem ir jāpievienojas, un tie jāuzglabā EEPROM, lai tos varētu izmantot vēlāk.

Kad akreditācijas dati ir konfigurēti, NodeMCU pārbauda EEPROM akreditācijas datus un izveido savienojumu ar EEPROM esošajiem WiFi akreditācijas datiem.

Pēc veiksmīga savienojuma ar WiFi izveidošanas NodeMCU sāk augšupielādēt datus serverī ik pēc “x” laika, dati ietver laika apstākļu datus, moduļa MAC adresi, programmaparatūras versiju, ierīces ģeogrāfisko atrašanās vietu.

OTA atjauninājums: Modulis arī katru dienu pārbauda jaunu programmaparatūras atjauninājumu noteiktā laikā, kas norādīts kodā. Šī funkcija ir noderīga, jo neviens ražotājs nevar turpināt un mainīt atsevišķa moduļa programmu, ja ir jāveic kādas izmaiņas.

Sargsuņa taimeris: Atlast ir jābūt iespējai atgūties bez cilvēka iejaukšanās, ja tas iestrēgst vai avarē. To var panākt, izmantojot Watchdog taimeri. Tas darbojas šādi: Pastāv pārtraukuma apakšrutīna, kas darbojas katru sekundi. ISR katru reizi izpilda skaitītāju un pārbauda, vai skaitītājs ir sasniedzis maksimālo skaitu. Kad skaitītājs sasniedz maksimālo vērtību, modulis atiestata sevi, pieņemot, ka tas ir avarējis. Normālā darbībā skaitītājs vienmēr tiek atiestatīts, pirms tas sasniedz maksimālo skaitu.

2. darbība. SQL servera konfigurēšana

SQL servera konfigurēšana
SQL servera konfigurēšana

SQL Server iestatīšana ir arī ļoti vienkārša. Vienkārši izveidojiet datu bāzi SQL serverī un importējiet iestatījumu, importējot failu ar nosaukumu "database_structure.txt". Failu var atrast šajā solī. Tā kā instrukcija neļauj augšupielādēt.sql failus, es pārdēvēju failu par.txt.

Piezīme. Pārdēvējiet failu no “.txt” uz “.sql”.

3. darbība: failu servera konfigurēšana

Servera konfigurēšana ir patiešām vienkārša, ja jums pieder vietne un tā tiek mitināta tiešsaistē. Es neapmeklēšu visu vietņu izveides un mitināšanas procedūru, jo šī apmācība neietilpst. Bet jūs varat mitināt to savā personālajā datorā kā vietējo resursdatoru, lai izmēģinātu failu darbību.

Tā kā Instructable neļauj augšupielādēt PHP failus, esmu pārdēvējis failus uz ".txt".

Piezīme. Lūdzu, pārdēvējiet failu paplašinājumu uz ".php". Tāpat neaizmirstiet mainīt faila "config.php" akreditācijas datus.

Vienkārši augšupielādējiet failus serverī, un viss ir kārtībā.

Es sniegšu jums īsu informāciju par PHP failiem.

db_config.php:

Šajā failā tiek glabāti visi akreditācijas dati, kas nepieciešami, lai izveidotu savienojumu ar SQL serveri.

db_connect:

Šajā failā ir klase, kas nepieciešama datu bāzes savienošanai.

insert.php:

NodeMCU izsauc šo PHP failu datu augšupielādei serverī, izmantojot GET metodi. Šis fails ir atbildīgs arī par to pašu datu saglabāšanu SQL serverī.

retrieve.php:

Lietotājs/klients izsauc šo PHP, izmantojot GET metodi. Serveris aprēķina attālumu starp lietotāju un visiem moduļiem. Pēc tam tuvākā moduļa dati tiek nosūtīti kā atbilde klientam JSON/XML formātā, kā to izvēlas klients.

update.php:

Šo PHP failu modulis izsauc katru dienu noteiktā laikā, lai pārbaudītu, vai modulī darbojas jaunākā programmaparatūras versija. Vienkārši ievietojiet jaunāko ".bin" failu failu serverī un norādiet faila direktoriju faila mainīgajā.

Ja šie daudzie faili sākumā šķiet biedējoši, nākamajā darbībā esmu iekļāvis lietotāja dokumentāciju.

4. darbība. Lietotāja dokumentācija

Lietotāja dokumentācija
Lietotāja dokumentācija
Lietotāja dokumentācija
Lietotāja dokumentācija

Ievads:

Laika API nodrošina vienkāršu saskarni, lai pieprasītu laika apstākļu datus par vietām uz zemes virsmas. Jūs pieprasāt laika apstākļu informāciju konkrētam platuma/garuma pārim ar norādīto izvades formātu. API atgriež temperatūru, mitrumu, spiedienu un gaisa kvalitātes indeksu, ko pēdējais reģistrēja tuvākais modulis no pieprasītās vietas.

Pirms tu sāc:

Šis dokuments ir paredzēts vietņu un mobilo ierīču izstrādātājiem, kuri vēlas iekļaut laika apstākļu informāciju lietojumprogrammā, kas tiek izstrādāta. Tas iepazīstina ar izmantošanu, izmantojot API un atsauces materiālu par pieejamajiem parametriem.

Laika datu pieprasījumi:

Laika apstākļu API pieprasījumi tiek veidoti kā URL virkne. API atgriež laika ziņas par punktu uz zemes, ko norāda platuma/garuma pāris. Ņemiet vērā, ka laika apstākļu datu precizitāte ir tieši proporcionāla apgabalā ievietoto moduļu blīvumam.

Weather API pieprasījums ir šādā formā:

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

Ja izvades formāts (formāts) var būt kāda no šīm vērtībām:

  • JSON (ieteicams), norāda izvadi JavaScript objekta notācijā (JSON); vai
  • XML, norāda izvadi XML, iesaiņotu mezglā.

Pieprasījuma parametri:

Parametri, kā parasti visos URL, ir atdalīti, izmantojot & zīmi (&). Parametru saraksts un to iespējamās vērtības ir norādītas zemāk.

Nepieciešamie parametri:

  • lat: attēlo atrašanās vietas platuma grādu, lai to meklētu. (piemēram, lats = 19,56875)
  • lon: attēlo meklēšanas vietas atrašanās vietas garumu. (piemēram, lon = 72.97568)

Papildu parametri:

formāts: norāda laika apstākļu datu atbildes izvades formātu. Tas var būt JSON vai XML. Noklusējums ir JSON. (piemēram, formāts = json vai formāts = xml)

Atbildes uz laika apstākļiem:

Par katru derīgu pieprasījumu laika joslas pakalpojums atgriezīs atbildi pieprasījuma URL norādītajā formātā. Katrā atbildē būs šādi elementi:

  • panākumi: vērtība, kas norāda atbildes statusu.

    • 0: negatīvs; norāda, ka pieprasījums ir nepareizi veidots.
    • 1: apstiprinoši; norāda, ka pieprasījums bija veiksmīgs.
  • ziņojums: virkne, kas norāda pieprasījuma neatbilstības iemeslu. Pieejams tikai tad, ja statuss ir negatīvs.
  • dati: masīvs ar vairākiem laika apstākļu parametriem.

    • temp: temperatūras dati.
    • hum: mitruma klātbūtnes dati.
    • pres: absolūtā spiediena dati.
    • aqi: pašreizējais gaisa kvalitātes indekss.

Abu formātu atbildes piemēri ir redzami attēlos.

5. solis: moduļa iestatīšana

Moduļa iestatīšana
Moduļa iestatīšana
Moduļa iestatīšana
Moduļa iestatīšana

Tiek izveidots piekļuves punkts un tīmekļa vietne tiek mitināta IP adresē (noklusējums: 192.168.4.1), lai akreditācijas datus saņemtu no ierīces pārvaldnieka/lietotāja pirmajā palaišanas reizē vai ja modulis neatrod jau saglabātos akreditācijas datus EEPROM.

Lietotājam jāievada SSID un parole, ar kuru lietotājs vēlas izveidot savienojumu ar moduli. Ja atļaujat pārlūkprogrammai piekļūt atrašanās vietai, platums un garums tiek automātiski aizpildīti.

Kad visa informācija ir ievadīta, noklikšķiniet uz pogas "SŪTĪT", un tad visi akreditācijas dati tiek ierakstīti moduļa EEPROM.

Šis solis ir ļoti būtisks, jo, lai gan masveidā tiek ražoti moduļi, nav iespējams programmēt visus moduļus ar precīziem atrašanās vietas datiem un WiFi akreditācijas datiem. Tāpat nav ieteicams programmā akreditācijas datus kodēt ar kodu, jo, ja mums vispār ir nepieciešams pārvietot moduli uz citu vietu vai ja vēlaties mainīt WiFi akreditācijas datus, mums būs jāpārprogrammē modulis. Lai izvairītos no šīs problēmas, tiek ieviesta sākotnējās iestatīšanas funkcija.

6. solis: Tagad ir pienācis laiks sniegt datus mākonī

Tagad ir pienācis laiks sniegt datus mākonī
Tagad ir pienācis laiks sniegt datus mākonī
Tagad ir pienācis laiks sniegt datus mākonī
Tagad ir pienācis laiks sniegt datus mākonī

Pēc visu iepriekšējo darbību pabeigšanas ir pienācis laiks ļaut modulim augšupielādēt datus serverī. Tas automātiski sāk augšupielādi, tiklīdz esat saglabājis akreditācijas datus.

Tas izsauc "insert.php" kā API izsaukumu, nododot visus parametrus nosūtīšanai GET metodē.

Zemāk esošais koda fragments parāda, kā tiek apstrādāti parametri.

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

Tāpat kā visi moduļi sāk augšupielādēt datus.

Piezīme: Samaziniet augšupielādes biežumu kodā, ja jūtat, ka serveris tiek pārslogots.

7. darbība. Atjauniniet bezvadu režīmā (OTA)

Over the Air (OTA) atjauninājums
Over the Air (OTA) atjauninājums

Pēc tam, kad modulis ir iestatīts un sāk augšupielādēt datus, tas katru dienu pārbauda, vai programmaparatūra nav atjaunināta noteiktā programmā minētajā laikā. Ja tas tiek atrasts, tas lejupielādē un mirgo tajā esošo bināro failu. Un, ja tā nav, tiek turpināta parastā datu augšupielādes darbība.

Lai pārbaudītu jaunu atjauninājumu, modulis izsauc "update.php", pieprasījuma galvenē nosūtot MAC adresi. Pēc tam serveris pārbauda, vai šai konkrētajai MAC adresei ir kāds jauns atjauninājums, ja jā, tad tas atbildē nosūta jaunākās programmaparatūras bināro failu.

Tas arī pārbauda visas nepieciešamās galvenes, kas nepieciešamas moduļa pamata autentifikācijai.

8. darbība. Kā lietotājs/klients var piekļūt datiem …

Kā lietotājs/klients var piekļūt datiem …
Kā lietotājs/klients var piekļūt datiem …
Kā lietotājs/klients var piekļūt datiem …
Kā lietotājs/klients var piekļūt datiem …
Kā lietotājs/klients var piekļūt datiem …
Kā lietotājs/klients var piekļūt datiem …

Piekļuve datiem no servera ir diezgan vienkārša. Vienkārši zvanot uz "retrieve.php", mēs saņemsim laika ziņas JSON formātā. Pēc tam atliek tikai parsēt JSON datus, lai piekļūtu atsevišķiem elementiem. Līdzīgi ir ar XML atbildi. Lietotājs vienmēr var norādīt vēlamo atbildes formātu, ar kuru lietotājam ir ērti strādāt. Ja lietotājs nenorāda formātu, noklusējuma formāts ir JSON.

Pieprasījuma paraugs tiek veikts, izmantojot rīku POSTMAN, lai pārbaudītu API darbību.

Tālāk esošajā koda fragmentā ir parādīts JSON atbildes parsēšanas piemērs javascript.

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); // nepatiess sinhronam pieprasījumam 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 ("temperatūra"). internalHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("temp"). internalHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("mitrums"). internalHTML = Math.round (obj.data [0].hum) + "%"; document.getElementById ("spiediens"). internalHTML = Math.round (obj.data [0].pres) + "mb";

Šīs darbības beigās ir pieejams HTML lapas parauga avota kods, kas analizē JSON atbildi.

Piezīme: mainiet faila paplašinājumu uz ".html".

9. solis: šī projekta ierobežojumi

  • Projekts datu nosūtīšanai izmanto GET; pat ja tie nav saistīti ar sensitīviem datiem, ar tiem var viegli manipulēt, jo tiem nav nekāda mehānisma, lai pārbaudītu avota autentiskumu, izņemot virsrakstu pārbaudi, ko var viegli mainīt un pat parastu ierīci var viltot šķiet laika apstākļu modulis.
  • Tā kā modulis paļaujas tikai uz citu piekļuves punktu (WIFI) un ir atkarīgs no tā, lai nosūtītu datus, kas lielākoties būtu no citām organizācijām. Ja kāda iemesla dēļ piekļuves punkts nedarbojas, modulis nevarēs nosūtīt datus.
  • Lai gan projekts ir veidots, lai palielinātu esošās sistēmas precizitāti, tirgū pieejamais sensors ir mazāk precīzs, nekā gaidīts, kā rezultātā tā galvenais mērķis neizdodas.
  • Plānojot projektu, es plānoju iekļaut režīmu, kurā serveris aprēķina vidējo datu vērtību, pamatojoties uz atrašanās vietu kļūdu labošanai. Bet, ieviešot šo funkciju, es sapratu, ka ir vajadzīgas dažas trešo pušu API, lai tulkotu koordinātas ģeogrāfiskajos reģionos.

10. darbība. Turpmākie uzlabojumi, ko var veikt šajā projektā

  • Moduļa precizitāti var vēl vairāk uzlabot, īpaši pielāgojot sensorus konkrētam mērķim, nevis izmantojot tirgū pieejamo vispārējo moduli.
  • Moduli var pārveidot, lai tas darbotos vēl patstāvīgāk, izmantojot īpašu mikroshēmu, kas bezvadu sakaros sazinās ar šūnu torņiem, lai nosūtītu datus, tādējādi uzlabojot kļūdu toleranci.
  • Saules paneli un akumulatoru sistēmu var izmantot kopā ar ESP dziļā miega režīmu, tādējādi uzlabojot energoefektivitāti un padarot to neatkarīgāku no ārējā barošanas avota.
  • POST var izmantot, lai nosūtītu datus ar kādu autentifikācijas mehānismu, piemēram, izmantojot cikliskus kodus katrai datu pārraidei.
  • NodeMCU, kas ir prototipēšanas dēlis, vietā mēs varam izmantot pielāgotu mikrokontrolleri masveida ražošanā, kas ne tikai samazina izmaksas, bet arī vislabāk izmanto sistēmas resursus.
  • Kopā ar Google ģeogrāfiskās atrašanās vietas API un savienojumu ar jebkuru pieejamu atvērtu WIFI modulis var darboties pat to nekonfigurējot; gatavs pārsūtīt datus no rūpnīcas bez jebkādas iestatīšanas.

11. solis: daži vārdi auditorijai

Daži vārdi skatītājiem
Daži vārdi skatītājiem

Hei puiši, es saprotu, ka šī nav iesācējiem piemērota apmācība, jo neesmu pieminējis katru detaļu, kas jāaptver. Un arī šis projekts ir patiešām plašs, lai to varētu iekļaut instrukcijā. Tomēr es darīju visu iespējamo, lai aptvertu visus svarīgos projekta aspektus. Es arī zinu, ka video, kas demonstrētu projekta darbību, būtu bijis patiešām lielisks, taču, tā kā šī ir mana pirmā pamācība un, godīgi sakot, šī ir mana pirmā publikācija par kaut ko līdzīgu šim, es biju diezgan nervozs, atrodoties priekšā kamera.

Ja jums, puišiem, ir nepieciešama palīdzība šī projekta īstenošanā vai kaut kas līdzīgs šim, vienkārši sazinieties ar mani pa e -pastu [email protected], vai arī kā vienmēr varat atstāt komentāru. Es centīšos jums palīdzēt, puiši, cik vien spēju.

Paldies!!

Ieteicams: