Talaan ng mga Nilalaman:

Smart Distribution IoT Weather Monitoring System Paggamit ng NodeMCU: 11 Mga Hakbang
Smart Distribution IoT Weather Monitoring System Paggamit ng NodeMCU: 11 Mga Hakbang

Video: Smart Distribution IoT Weather Monitoring System Paggamit ng NodeMCU: 11 Mga Hakbang

Video: Smart Distribution IoT Weather Monitoring System Paggamit ng NodeMCU: 11 Mga Hakbang
Video: Paano Mag COMPUTE ng SUBMETER | Local Electrician | Philippines 2024, Hulyo
Anonim
Ipinamamahagi ng Smart IoT Weather Monitoring System Gamit ang NodeMCU
Ipinamamahagi ng Smart IoT Weather Monitoring System Gamit ang NodeMCU

Maaari kayong lahat may kamalayan sa tradisyunal na istasyon ng panahon; ngunit naisip mo ba kung paano ito aktwal na gumagana? Dahil ang tradisyunal na istasyon ng panahon ay magastos at malaki, ang density ng mga istasyong ito sa bawat yunit ng yunit ay mas mababa na nag-aambag sa kawastuhan ng data. Ipaliwanag ko sa iyo kung paano: Ipagpalagay na ang isang istasyon ay matatagpuan sa gitna ng isang lungsod at ito lamang ang istasyon na matatagpuan sa 'x' meter radius, madali itong makiling kung ang anumang ahente na sanhi ng polusyon ay naroroon sa paligid ng istasyon na nagpapakita ng buong 'x' meter radius area bilang marumi dahil ang solong istasyon na iyon ay responsable upang matukoy ang data ng panahon ng buong lugar.

Upang mapagtagumpayan ang problemang ito, dapat dagdagan ang density ng mga module na posible lamang kung ang mga module ay mas mura at tumatagal ng isang mas maliit na bakas ng paa kaysa sa mayroon nang isa.

Ito ang dahilan ng aking iminungkahing solusyon ay ang perpektong solusyon para sa problemang ito, Mas mababa sa $ 10 ang gastos at madali ring nakasalalay sa aking palad.

Paano ito gumagana …

Mayroong 3 pangunahing bahagi ng proyektong ito.

Bahagi ng aparato:

Ang Device ay isang module ng IoT na ipinapakita sa larawan na nagpapadala ng data ng panahon sa server bawat agwat ng oras na 'x'. Kasama sa data ang aktwal na data ng panahon, ang lokasyon ng heograpiya ng module; ibig sabihin, Ang mga coordinate nito, ang MAC address; upang natatanging kilalanin ang aparato, ang bersyon ng firmware na kasalukuyan nitong tumatakbo. Ang panig ng aparato ay naglalaman ng mga N-module na ipinamamahagi sa buong lugar na aktibong nagbibigay ng data sa server.

Sa panig ng server:

Tulad ng ipinahihiwatig ng pangalan, ito ay ang sentralisadong server na humahawak ng maraming mga operasyon tulad ng pagtanggap ng data mula sa mga module at iimbak ito sa database, pag-update ng module sa pinakabagong firmware kung tumatakbo ito sa isang mas lumang bersyon, ipinapadala ang data ng panahon sa kapag hiniling ng kliyente.

Kliyente / panig ng Gumagamit:

Ito ang end-user na humiling ng data ng panahon mula sa server. Ipinapadala ng kliyente ang kasalukuyang lokasyon at batay sa lokasyon, kinakalkula ng server ang distansya sa pagitan ng kliyente at ng lahat ng mga module at ipinapadala ang data ng panahon ng pinakamalapit na module sa kliyente na itinuturing na tumpak.

Mga gamit

  • NodeMCU (ESP8266-12E)
  • DHT11 (Humidity at temperatura sensor)
  • BMP180 (Pressure at Temperatura sensor)
  • MQ-135 (Air quality index sensor)
  • USB cable (upang mai-upload ang programa)

  • 5 volt supply ng kuryente
  • Mga Capacitor (Opsyonal: mailagay kahilera sa powerline)
  • Arduino IDE (Upang i-debug at i-upload ang programa)
  • Application ng POSTMAN (opsyonal: i-debug ang API)
  • Isang Website (upang i-host ang PHP at MySQL server)

Hakbang 1: Maghinang ng Lahat ng Mga Bahagi at Mag-upload ng Programa sa NodeMCU

Maghinang ng Lahat ng Mga Bahagi at Mag-upload ng Programa sa NodeMCU
Maghinang ng Lahat ng Mga Bahagi at Mag-upload ng Programa sa NodeMCU
Maghinang ng Lahat ng Mga Bahagi at Mag-upload ng Programa sa NodeMCU
Maghinang ng Lahat ng Mga Bahagi at Mag-upload ng Programa sa NodeMCU

Paghinang ng lahat ng mga bahagi sa NodeMCU tulad ng ipinakita sa circuit diagram sa isang perf board. Gayundin, maghinang ng isang kapasitor na kahanay ng mga powerline dahil umikot ang kuryente habang aktibong nagpapadala at tumatanggap ng data.

Kapag tapos na ang gawaing paghihinang, i-upload ang code na ibinigay sa file na "code.c".

Tandaan: Huwag kalimutang palitan ang mga kredensyal sa iyong sariling mga kredensyal. Ilagay din ang file na pinangalanang "html_file.h" sa loob ng arduino sketch folder. Ang lahat ng mga file ng header na ginamit sa proyektong ito ay matatagpuan dito

Mga tampok ng code:

Access Point: Dahil mahirap i-program ang bawat module na may mga kredensyal sa produksyon ng masa, nag-host ang module ng isang webpage sa unang boot nito upang tanggapin ang mga kredensyal ng WiFi kung saan kailangang kumonekta at maiimbak ng mga module sa EEPROM para magamit sa paglaon.

Kapag na-configure ang mga kredensyal, susuriin ng NodeMCU ang EEPROM para sa mga kredensyal at kumokonekta sa mga kredensyal ng WiFi na naroroon sa EEPROM.

Matapos matagumpay na pagkonekta sa WiFi, nagsisimula ang NodeMCU sa pag-upload ng data sa server bawat agwat ng 'x' ng oras, kasama sa data ang data ng panahon, MAC address ng module, bersyon ng firmware, lokasyon ng heyograpiya ng aparato.

Pag-update ng OTA: Sinusuri din ng module ang bagong pag-update ng firmware araw-araw sa isang tukoy na oras na tinukoy sa code. Kapaki-pakinabang ang tampok na ito dahil hindi posible para sa anumang tagagawa na magpatuloy at baguhin ang programa ng isang indibidwal na module kung sakaling may mga pagbabagong magagawa.

Watchdog Timer: Atlast dapat mayroong isang paraan upang mabawi ang sarili nito nang walang anumang interbensyon ng tao kung ito ay ma-stuck o mag-crash. Maaari itong makamit sa pamamagitan ng paggamit ng timer ng Watchdog. Ang paraan ng paggana nito ay: Mayroong isang Nakagambalang sub-routine na tumatakbo bawat segundo. Ang ISR ay nagdaragdag ng counter sa tuwing nagpapatupad ito at sinusuri kung umabot na sa maximum na bilang ang counter. Sa sandaling maabot ng counter ang maximum na halaga, i-reset ng module ang sarili sa pag-aakalang na-crash ito. Sa normal na operasyon, palaging nakakakuha ng reset ang counter bago maabot ang maximum na bilang.

Hakbang 2: Pag-configure ng SQL Server

Ang pag-configure ng SQL Server
Ang pag-configure ng SQL Server

Ang pag-set up ng SQL Server ay talagang simple din. Lumikha lamang ng isang database sa SQL server at I-import ang setting sa pamamagitan ng pag-import ng file na pinangalanang "database_structure.txt". Mahahanap mo ang file sa hakbang na ito. Dahil hindi pinapayagan ng pagtuturo na mag-upload ng ".sql" na mga file, pinalitan ko ng pangalan ang file na ".txt".

Tandaan: Palitan ang pangalan ng file mula sa ".txt" patungong ".sql".

Hakbang 3: Pag-configure ng File Server

Ang pag-configure ng server ay talagang madali kung nagmamay-ari ka ng isang website at ito ay naka-host sa online. Hindi ako dumaan sa buong pamamaraan ng pagse-set up ng isang website at pagho-host nito dahil lampas sa saklaw ng tutorial na ito. Ngunit maaari mo itong i-host sa iyong sariling pc bilang localhost upang subukan ang pagtatrabaho ng mga file.

Dahil hindi pinapayagan ng Instructable na mag-upload ng mga PHP file, pinalitan ko ng pangalan ang mga file sa ".txt".

Tandaan: Mangyaring palitan ang pangalan ng extension ng mga file sa ".php". Gayundin huwag kalimutang baguhin ang mga kredensyal ng "config.php" na file.

I-upload lamang ang mga file sa server at mahusay kang pumunta.

Bibigyan kita ng maikling impormasyon tungkol sa mga PHP file.

db_config.php:

Sa file na ito, ang lahat ng mga kredensyal na kinakailangan upang kumonekta sa SQL server ay nakaimbak.

db_connect:

Sa file na ito ang klase na kinakailangan para sa koneksyon sa database ay naroroon.

insert.php:

Tinatawag ng NodeMCU ang file na PHP na ito para sa pag-upload ng data sa server gamit ang pamamaraang GET. Responsable din ang file na ito na itabi ang parehong data sa SQL server.

kunin.php:

Tinatawagan ng User / Client ang PHP na ito gamit ang pamamaraang GET. Kinakalkula ng server ang distansya sa pagitan ng gumagamit at lahat ng mga module. Pagkatapos ang data ng pinakamalapit na module ay ipinadala bilang isang tugon sa client sa format na JSON / XML na ginusto ng kliyente.

update.php:

Ang file na PHP na ito ay tinatawag ng module araw-araw sa isang tukoy na oras upang suriin kung nagpapatakbo ang module ng pinakabagong bersyon ng firmware. Ilagay lamang ang pinakabagong ".bin" na file sa file server at tukuyin ang direktoryo ng file sa variable ng file.

Kung ang maraming mga file na ito ay tila nakakatakot sa una, isinama ko ang dokumentasyon ng gumagamit sa susunod na hakbang.

Hakbang 4: Dokumentasyon ng Gumagamit

Dokumentasyon ng Gumagamit
Dokumentasyon ng Gumagamit
Dokumentasyon ng Gumagamit
Dokumentasyon ng Gumagamit

Panimula:

Nagbibigay ang Weather API ng isang simpleng interface upang humiling ng data ng panahon para sa mga lokasyon sa ibabaw ng mundo. Humiling ka ng impormasyon ng panahon para sa isang tukoy na pares ng latitude / longitude na may tinukoy na format ng output. Ibinabalik ng API ang temperatura, halumigmig, presyon, at kalidad ng Air index na huling naitala ng pinakamalapit na module mula sa hiniling na lokasyon.

Bago ka magsimula:

Inilaan ang dokumentong ito para sa mga developer ng website at mobile na nais na isama ang impormasyon sa panahon sa isang application na binuo. Ipinakikilala nito ang paggamit gamit ang API at sanggunian na materyal sa mga magagamit na parameter.

Mga Kahilingan sa Data ng Panahon:

Ang mga kahilingan sa Weather API ay itinayo bilang isang string ng URL. Ibinabalik ng API ang data ng panahon para sa isang punto sa mundo, na tinukoy ng isang pares ng latitude / longitude. Tandaan na ang katumpakan ng data ng panahon ay direktang proporsyonal sa density ng mga module na inilagay sa isang lugar.

Ang isang kahilingan sa Weather API ay kumukuha ng sumusunod na form:

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

Kung saan ang format na output (format) ay maaaring alinman sa mga sumusunod na halaga:

  • Ang JSON (inirekomenda), ay nagpapahiwatig ng output sa JavaScript Object Notation (JSON); o
  • Ang XML, ay nagpapahiwatig ng output sa XML, na nakabalot sa loob ng node.

Humiling ng Mga Parameter:

Tulad ng pamantayan sa lahat ng mga URL, pinaghiwalay ang mga parameter gamit ang ampersand (&) na character. Ang listahan ng mga parameter at ang kanilang mga posibleng halaga ay ipinahiwatig sa ibaba.

Mga Kinakailangan na Parameter:

  • lat: Kumakatawan sa isang latitude ng isang lokasyon upang maghanap. (hal. lat = 19.56875)
  • lon: Kumakatawan sa isang longitude ng isang lokasyon upang maghanap. (hal. lon = 72.97568)

Opsyonal na Mga Parameter:

format: Tinutukoy ang format ng output ng tugon ng data ng panahon. Maaari itong maging alinman sa JSON o XML. Ang default ay JSON. (hal. format = json o format = xml)

Mga Tugon sa Panahon:

Para sa bawat wastong kahilingan, ang serbisyo ng time zone ay magbabalik ng isang tugon sa format na nakasaad sa loob ng URL ng kahilingan. Ang bawat tugon ay maglalaman ng mga sumusunod na elemento:

  • tagumpay: isang halaga na nagpapahiwatig ng katayuan ng tugon.

    • 0: Negatibo; ipinapahiwatig na ang hiling ay hindi maganda ang anyo.
    • 1: Kumpirmado; ipinapahiwatig na ang kahilingan ay matagumpay.
  • mensahe: isang string na nagsasaad ng dahilan para sa hindi maayos na kahilingan. Magagamit lamang kapag negatibo ang katayuan.
  • data: isang array na may maraming mga parameter ng panahon.

    • temp: ang data ng temperatura.
    • hum: ang data ng pagkakaroon ng halumigmig.
    • pres: ang ganap na data ng presyon.
    • aqi: ang kasalukuyang index ng kalidad ng Air.

Ang mga halimbawang tugon ng parehong format ay makikita sa mga imahe.

Hakbang 5: Pag-setup ng Modyul

Pag-setup ng Modyul
Pag-setup ng Modyul
Pag-setup ng Modyul
Pag-setup ng Modyul

Ang isang Access-point ay nilikha at ang isang webpage ay naka-host sa isang IP address (Default: 192.168.4.1) upang matanggap ang mga kredensyal mula sa manager ng aparato / gumagamit sa pinakaunang boot o kung hindi makita ng module ang nakaimbak na mga kredensyal sa EEPROM.

Kailangang ipasok ng gumagamit ang SSID at password kung saan nais ng gumagamit na kumonekta ang module. Awtomatikong napupunan ang latitude at longitude kung papayagan mong ma-access ng browser ang lokasyon.

Kapag naipasok na ang lahat ng mga detalye, mag-click sa pindutang "SEND", at pagkatapos ang lahat ng mga kredensyal ay nakasulat sa EEPROM ng module.

Napakahalaga ng hakbang na ito dahil habang gumagawa ng malawak ang mga module, hindi posible na mai-program ang lahat ng mga module na may eksaktong data ng lokasyon at mga kredensyal ng WiFi. Gayundin, hindi maipapayo na hard-code ang mga kredensyal sa programa dahil kung kinakailangan na ilipat namin ang module sa ilang iba pang lokasyon o nais na baguhin ang mga kredensyal ng WiFi, kakailanganin nating i-reprogram ang module. Upang maiwasan ang abala na ito, ipinatupad ang paunang pag-andar ng pag-setup.

Hakbang 6: Ngayon Na Oras na Mag-ambag ng Data sa Cloud

Oras na Ngayon upang Mag-ambag ng Data sa Cloud
Oras na Ngayon upang Mag-ambag ng Data sa Cloud
Oras na Ngayon upang Mag-ambag ng Data sa Cloud
Oras na Ngayon upang Mag-ambag ng Data sa Cloud

Matapos makumpleto ang lahat ng nakaraang mga hakbang, oras na nito upang hayaan ang module na i-upload ang data sa server. Awtomatiko itong nagsisimulang mag-upload sa sandaling nai-save mo ang mga kredensyal.

Tinatawag nito ang "insert.php" bilang isang tawag sa API na ipinapasa ang lahat ng mga parameter upang maipadala sa GET na pamamaraan.

Ipinapakita ng snippet ng code sa ibaba kung paano pinoproseso ang mga parameter.

kung (mag-isyu ($ _ GET ['temp']) && mag-isyu ($ _ GET ['hum']) && mag-isyu ($ _ GET ['pres']) && mag-isyu ($ _ GET ['aqi']) && mag-isyu ($ _ GET ['mac']) && pag-isyu ($ _ GET ['lat']) && pag-isyu ($ _ GET ['lon'])) 2. {3. // pangunahing programa 4.}

Tulad ng lahat ng mga module ay nagsisimulang mag-upload ng data.

Tandaan: Ibaba ang dalas ng pag-upload sa code kung sa palagay mo ang server ay nakakakuha ng labis na karga.

Hakbang 7: Pag-update sa Over the Air (OTA)

Over the Air (OTA) Update
Over the Air (OTA) Update

Matapos ang module ay naka-set up at nagsimulang mag-upload ng data, sinusuri nito ang mga pag-update ng firmware araw-araw sa isang tukoy na oras na nabanggit sa programa. Kung nakakahanap ito ng anumang, magda-download at mag-flash ang binary file dito. At kung hindi, nagpapatuloy ang normal na operasyon ng pag-upload ng data.

Upang suriin para sa isang bagong pag-update, tinawag ng module ang "update.php" sa pamamagitan ng pagpapadala ng MAC address sa header ng kahilingan nito. Sinusuri ng server kung ang tukoy na MAC address na iyon ay may anumang bagong pag-update, kung oo, ipinapadala nito ang binary file ng pinakabagong firmware bilang tugon.

Sinusuri din nito ang lahat ng kinakailangang mga header na kinakailangan para sa pangunahing pagpapatotoo ng modyul.

Hakbang 8: Paano Ma-access ng User / Client ang Data …

Paano Ma-access ng User / Client ang Data …
Paano Ma-access ng User / Client ang Data …
Paano Ma-access ng User / Client ang Data …
Paano Ma-access ng User / Client ang Data …
Paano Ma-access ng User / Client ang Data …
Paano Ma-access ng User / Client ang Data …

Ito ay medyo prangka upang ma-access ang data mula sa server. Sa pamamagitan lamang ng pagtawag sa "retrieve.php", makukuha namin ang data ng panahon bilang tugon sa format na JSON. Pagkatapos nito, isang bagay lamang sa pag-parse ang data ng JSON upang ma-access ang mga indibidwal na elemento. Katulad nito ay sa tugon sa XML. Palaging maaaring tukuyin ng gumagamit ang ginustong format ng tugon kung saan ang gumagamit ay komportable na gumana. Kung hindi tinukoy ng gumagamit ang format, ang default na format ay JSON.

Ang isang halimbawang kahilingan ay ginawa gamit ang tool na POSTMAN upang suriin ang pagtatrabaho ng API.

Ang isang halimbawa ng pag-parse ng tugon ng JSON sa javascript ay ipinapakita sa snippet ng code sa ibaba.

var url = "https://example.com/retrieve.php?lat=19.044848&lon=72.8464373";function httpGet (theUrl) {var xmlHttp = bagong XMLHttpRequest (); xmlHttp.open ("GET", theUrl, false); // false para sa magkasabay na kahilingan xmlHttp.send (null); ibalik ang xmlHttp.responseText; } var myVar = httpGet (url); var obj = JSON.parse (myVar); document.getElementById ("aqi"). panloobHTML = obj.data [0].aqi; document.getElementById ("temperatura"). panloobHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("temp"). innerHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("halumigmig"). panloobHTML = Math.round (obj.data [0].hum) + "%"; document.getElementById ("pressure"). innerHTML = Math.round (obj.data [0].pres) + "mb";

Ang source code ng halimbawang pahina ng HTML na pinag-parse ang tugon ng JSON ay magagamit sa pagtatapos ng hakbang na ito.

Tandaan: Palitan ang extension ng file sa ".html".

Hakbang 9: Mga Limitasyon ng Proyekto na Ito

  • Gumagamit ang proyekto ng GET upang maipadala ang data; kahit na hindi ito nakikipag-ugnay sa sensitibong data, ang data ay maaaring madaling manipulahin dahil wala itong anumang mekanismo upang suriin ang pagiging tunay ng pinagmulan bukod sa pag-check sa mga header, na maaaring madaling mabago at kahit isang normal na aparato ay maaaring ma-spoofed para bang isang module ng panahon.
  • Dahil ang module ay nakasalalay lamang at umaasa sa iba pang access-point (WIFI) upang ipadala ang data na sa karamihan ng kaso ay magiging ng ibang mga samahan. Kung sa lahat ng access-point ay wala sa serbisyo para sa ilang kadahilanan, ang module ay hindi maaaring magpadala ng data.
  • Kahit na ang proyekto ay binuo upang madagdagan ang kawastuhan ng umiiral na system, ang sensor na magagamit sa merkado ay hindi gaanong tumpak kaysa sa inaasahan na kung saan ay humantong sa mabibigo ang pangunahing layunin.
  • Habang pinaplano ang proyekto, binalak kong magsama ng isang mode kung saan ang server ay nag-average ng halaga ng data batay sa lokasyon para sa pagwawasto ng error. Ngunit sa pagpapatupad ng tampok na ito, napagtanto kong kailangan nito ng ilang mga third-party na API upang isalin ang mga coordinate sa mga heyograpikong rehiyon.

Hakbang 10: Karagdagang Mga Pagpapabuti Na Maaaring Magawa sa Project na Ito

  • Ang kawastuhan ng module ay maaaring karagdagang napabuti sa pamamagitan ng espesyal na pag-aayos ng mga sensor para sa tiyak na layunin sa halip na gamitin ang generic na module na magagamit sa merkado.
  • Ang modyul ay maaaring mabago upang gumana nang mas nakapag-iisa sa pamamagitan ng paggamit ng isang espesyal na maliit na tilad na wireless na nakikipag-usap sa mga Cell-tower upang maipadala ang data sa gayon ay nagpapabuti sa pagpapaubaya ng kasalanan.
  • Ang solar panel at system ng baterya ay maaaring magamit kasabay ng deep-sleep mode ng ESP kaya't pinapabuti ang kahusayan ng kuryente at ginagawa itong mas malaya mula sa isang panlabas na suplay ng kuryente.
  • Maaaring magamit ang POST upang magpadala ng data na may ilang mekanismo ng pagpapatunay tulad ng paggamit ng mga cyclic code para sa bawat paghahatid ng data.
  • Sa halip na NodeMCU, na kung saan ay isang prototyping board, maaari kaming gumamit ng isang pasadyang microcontroller sa mass-production na hindi lamang binabawasan ang gastos ngunit din ang pinakamahusay na paggamit ng mga mapagkukunan ng system.
  • Kasabay ng geolocation API ng Google at pagkonekta sa anumang magagamit na bukas na WIFI, ang module ay maaaring gumana nang hindi ito na-configure; handa nang magpadala ng data sa pabrika na walang kinakailangang pag-setup kung anupaman.

Hakbang 11: Ilang mga Salita para sa Madla

Ilang mga Salita para sa Madla
Ilang mga Salita para sa Madla

Hey guys, napagtanto ko na ito ay hindi isang tutorial na nagsisimula sa lahat dahil hindi ko nabanggit ang bawat solong detalye na kailangang masakop. At gayundin ang proyektong ito ay talagang malawak upang masakop sa isang Maituturo. Gayunpaman, sinubukan ko ang aking makakaya upang masakop ang bawat mahahalagang aspeto ng proyekto. Alam ko rin na ang isang video na nagpapakita ng pagtatrabaho ng proyekto ay talagang mahusay ngunit dahil ito ang aking unang itinuro at upang maging matapat, ito ang aking unang lathala ng anumang katulad nito, medyo kinakabahan ako na harapin ang isang camera

Kung kailangan mo ng anumang tulong sa paggawa ng proyektong ito o anumang katulad nito, makipag-ugnay lamang sa akin sa [email protected] o maaari kang mag-drop ng komento tulad ng lagi. Susubukan kong tulungan kayo sa abot ng aking makakaya.

Salamat!!

Inirerekumendang: