Mundarija:

NodeMCU yordamida aqlli tarqatilgan IoT ob -havo monitoringi tizimi: 11 qadam
NodeMCU yordamida aqlli tarqatilgan IoT ob -havo monitoringi tizimi: 11 qadam

Video: NodeMCU yordamida aqlli tarqatilgan IoT ob -havo monitoringi tizimi: 11 qadam

Video: NodeMCU yordamida aqlli tarqatilgan IoT ob -havo monitoringi tizimi: 11 qadam
Video: 97-dars: Qurilmalarni masofadan boshqarish, WIFI smart switch. 2024, Iyul
Anonim
NodeMCU yordamida aqlli tarqatilgan IoT ob -havo monitoringi tizimi
NodeMCU yordamida aqlli tarqatilgan IoT ob -havo monitoringi tizimi

Siz hammangiz an'anaviy ob -havo stantsiyasidan xabardor bo'lishingiz mumkin; lekin u aslida qanday ishlashini hech o'ylab ko'rganmisiz? An'anaviy ob -havo stantsiyasi qimmat va katta hajmga ega bo'lganligi sababli, ushbu stantsiyalarning har bir birlik uchun zichligi juda past, bu ma'lumotlarning noaniqligiga olib keladi. Men sizga qanday qilib tushuntiraman: deylik, stansiya shaharning o'rtasida joylashgan va bu "x" metr radiusda joylashgan yagona stansiya, agar atrofda ifloslantiruvchi vosita bo'lsa, uni osonlikcha bir xil deb hisoblash mumkin. butun "x" metrli radiusli maydonni ifloslangan deb ko'rsatadigan stansiya, chunki bitta stansiya butun hududning ob -havo ma'lumotlarini aniqlashga mas'uldir.

Ushbu muammoni bartaraf etish uchun modullarning zichligini oshirish kerak, agar modullar arzonroq bo'lsa va mavjudidan kichikroq joy egallasa.

Shuning uchun men taklif qilgan yechim - bu muammoning eng zo'r echimi, uning narxi 10 dollardan kam va kaftimga osonlikcha yotadi.

U qanday ishlaydi…

Loyihaning 3 ta asosiy qismi mavjud.

Qurilma tomoni:

Qurilma rasmda ko'rsatilgan IoT moduli bo'lib, u ob -havo ma'lumotlarini serverga har 'x' vaqt oralig'ida yuboradi. Ma'lumotlar haqiqiy ob -havo ma'lumotlarini, modulning geografik joylashuvini o'z ichiga oladi; ya'ni uning koordinatalari, MAC manzili; qurilmani yagona aniqlash uchun, u hozirda ishlayotgan dasturiy ta'minot versiyasi. Qurilma tomoni N-modullardan iborat bo'lib, ular serverga ma'lumotlarni faol ravishda qo'shadi.

Server tomoni:

Nomidan ko'rinib turibdiki, bu modullardan ma'lumotlarni qabul qilish va ma'lumotlar bazasida saqlash, eski versiyada ishlayotgan bo'lsa, modulni eng yangi dasturiy ta'minot bilan yangilash, ob -havo ma'lumotlarini yuborish kabi bir nechta operatsiyalarni bajaradigan markazlashtirilgan server. mijozning talabiga binoan.

Mijoz/Foydalanuvchi tomoni:

Bu ob-havo ma'lumotlarini serverdan so'raydigan oxirgi foydalanuvchi. Mijoz joriy manzilni yuboradi va joylashuvga asoslanib, server mijoz bilan barcha modullar orasidagi masofani hisoblab chiqadi va mijozga eng yaqin modulning ob -havo ma'lumotlarini aniq deb hisoblaydi.

Ta'minotlar

  • NodeMCU (ESP8266-12E)
  • DHT11 (namlik va harorat sensori)
  • BMP180 (bosim va harorat sensori)
  • MQ-135 (havo sifati indeksi sensori)
  • USB kabeli (dasturni yuklash uchun)
  • 5 voltli quvvat manbai
  • Kondensatorlar (ixtiyoriy: elektr uzatish liniyasiga parallel joylashtiriladi)
  • Arduino IDE (dasturni disk raskadrovka qilish va yuklash uchun)
  • POSTMAN ilovasi (ixtiyoriy: APIni tuzatish uchun)
  • Veb -sayt (PHP va MySQL serverlarini joylashtirish uchun)

1 -qadam: Barcha komponentlarni lehimlang va dasturni NodeMCU -ga yuklang

Barcha komponentlarni lehimlang va dasturni NodeMCU -ga yuklang
Barcha komponentlarni lehimlang va dasturni NodeMCU -ga yuklang
Barcha komponentlarni lehimlang va dasturni NodeMCU -ga yuklang
Barcha komponentlarni lehimlang va dasturni NodeMCU -ga yuklang

NodeMCU -ga barcha komponentlarni lehimlang. Bundan tashqari, ma'lumotlarni uzatish va qabul qilish paytida quvvat oshib ketishi sababli, kondansatkichni elektr uzatish liniyalariga parallel ravishda lehimlang.

Lehimlash ishlari tugagandan so'ng, "code.c" faylida ko'rsatilgan kodni yuklang.

Eslatma: Ishonch ma'lumotlarini o'z shaxsiy ma'lumotlaringiz bilan almashtirishni unutmang. "Html_file.h" nomli faylni arduino sketch papkasida joylashtiring. Bu loyihada ishlatilgan barcha sarlavhali fayllarni bu erda topishingiz mumkin.

Kodning xususiyatlari:

Kirish nuqtasi: har bir modulni ommaviy ishlab chiqarishda hisobga olish ma'lumotlari bilan dasturlash qiyin bo'lgani uchun, modul birinchi marta yuklanishida modullar ulanishi kerak bo'lgan Wi -Fi ma'lumotlarini qabul qilish uchun veb -sahifaga ega va keyinchalik foydalanish uchun EEPROM -da saqlanadi.

Hisob ma'lumotlari konfiguratsiya qilinganidan so'ng, NodeMCU EEPROM -ni hisobga olish ma'lumotlarini tekshiradi va EEPROM -da mavjud bo'lgan WiFi hisob ma'lumotlariga ulanadi.

Wi -Fi -ga muvaffaqiyatli ulanganidan so'ng, NodeMCU har 'x' vaqt oralig'ida ma'lumotlarni serverga yuklashni boshlaydi, bu ma'lumotlarga ob -havo ma'lumotlari, modulning MAC -manzili, dasturiy ta'minot versiyasi, qurilmaning geografik joylashuvi kiradi.

OTA yangilanishi: Modul shuningdek, har kuni kodda ko'rsatilgan vaqtda dasturiy ta'minotning yangi yangilanishini tekshiradi. Bu funksiya foydalidir, chunki har qanday ishlab chiqaruvchi o'z modulining dasturini o'zgartirishi mumkin emas.

Qo'riqchi taymeri: Atlast tiqilib qolsa yoki qulab tushsa, hech qanday odam aralashuvisiz o'zini tiklash yo'llari bo'lishi kerak. Bunga Watchdog taymeridan foydalanib erishish mumkin. Bu qanday ishlaydi: Har soniyada ishlaydigan Interrupt sub-routine bor. ISR hisoblagichni har safar bajaradi va hisoblagich maksimal songa yetganligini tekshiradi. Hisoblagich maksimal qiymatga yetganda, u qulab tushdi deb faraz qiladi. Oddiy ish paytida, hisoblagich maksimal qiymatga yetguncha har doim tiklanadi.

2 -qadam: SQL Serverni sozlash

SQL serverini sozlash
SQL serverini sozlash

SQL Serverni sozlash ham juda oddiy. SQL serverida ma'lumotlar bazasini yarating va "database_structure.txt" nomli faylni import qilib sozlamani import qiling. Siz ushbu bosqichda faylni topishingiz mumkin. Ko'rsatmalar ".sql" fayllarini yuklashga ruxsat bermagani uchun, men faylni ".txt" deb o'zgartirdim.

Eslatma: ".txt" faylini ".sql" ga o'zgartiring.

3 -qadam: Fayl serverini sozlash

Agar siz veb -saytga ega bo'lsangiz va uni Internetda joylashtirsangiz, serverni sozlash juda oson. Men veb -saytni yaratish va uni joylashtirishning butun protsedurasidan o'tmayman, chunki bu o'quv qo'llanmasidan tashqarida. Lekin siz fayllarni ishlashini sinab ko'rish uchun uni shaxsiy kompyuteringizda localhost sifatida joylashtirishingiz mumkin.

Instructable PHP fayllarini yuklashga ruxsat bermagani uchun, men fayllarni ".txt" deb o'zgartirdim.

Eslatma: Fayl kengaytmasini ".php" deb o'zgartiring. "Config.php" faylining hisob ma'lumotlarini o'zgartirishni unutmang.

Fayllarni serverga yuklang, shunda siz borishingiz mumkin.

Men sizga PHP fayllari haqida qisqacha ma'lumot beraman.

db_config.php:

Ushbu faylda SQL serveriga ulanish uchun zarur bo'lgan barcha hisobga olish ma'lumotlari saqlanadi.

db_connect:

Ushbu faylda ma'lumotlar bazasiga ulanish uchun zarur bo'lgan sinf mavjud.

insert.php:

NodeMCU bu PHP faylini GET usuli yordamida serverga yuklash uchun chaqiradi. Bu fayl ham xuddi shu ma'lumotlarni SQL serverida saqlash uchun javobgardir.

retrieve.php:

Foydalanuvchi/Mijoz bu PHP -ni GET usuli yordamida chaqiradi. Server foydalanuvchi va barcha modullar orasidagi masofani hisoblab chiqadi. Keyin eng yaqin modul ma'lumotlari mijozning xohishiga ko'ra JSON/XML formatida mijozga javob sifatida yuboriladi.

update.php:

Ushbu PHP fayli modul tomonidan har kuni ma'lum bir vaqtda chaqiriladi va modul dasturiy ta'minotning so'nggi versiyasi ishlayotganligini tekshiradi. Faqat oxirgi ".bin" faylini fayl serveriga joylashtiring va fayl o'zgaruvchisida fayl katalogini ko'rsating.

Agar bu ko'p fayllar dastlab qo'rqinchli bo'lib tuyulsa, men keyingi bosqichga foydalanuvchi hujjatlarini qo'shganman.

4 -qadam: Foydalanuvchi hujjatlari

Foydalanuvchi hujjatlari
Foydalanuvchi hujjatlari
Foydalanuvchi hujjatlari
Foydalanuvchi hujjatlari

Kirish:

Weather API er yuzidagi ob -havo ma'lumotlarini so'rash uchun oddiy interfeysni taqdim etadi. Siz chiqish formati ko'rsatilgan ma'lum bir kenglik/uzunlik juftligi uchun ob -havo ma'lumotlarini so'raysiz. API so'ralgan joydan eng yaqin modul tomonidan oxirgi qayd etilgan harorat, namlik, bosim va havo sifati indeksini qaytaradi.

Boshlashdan oldin:

Bu hujjat ishlab chiqilayotgan ilovaga ob -havo ma'lumotlarini qo'shishni istagan veb -saytlar va mobil dasturchilar uchun mo'ljallangan. U API va foydalanish mumkin bo'lgan parametrlar bo'yicha ma'lumotlardan foydalanishni taqdim etadi.

Ob -havo ma'lumoti so'rovlari:

Weather API so'rovlari URL qatori sifatida tuzilgan. API kenglik/uzunlik juftligi bilan ko'rsatilgan er yuzidagi nuqta uchun ob -havo ma'lumotlarini qaytaradi. E'tibor bering, ob -havo ma'lumotlarining aniqligi hududga joylashtirilgan modullarning zichligiga to'g'ridan -to'g'ri proportsionaldir.

Weather API so'rovi quyidagi shaklni oladi:

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

Bu erda chiqish formati (formati) quyidagi qiymatlardan biri bo'lishi mumkin:

  • JSON (tavsiya etiladi), JavaScript Object Notation (JSON) da chiqishni ko'rsatadi; yoki
  • XML, tugun ichiga o'ralgan, XML formatidagi chiqishni bildiradi.

So'rov parametrlari:

Barcha URL -larda bo'lgani kabi, parametrlar ampersand (&) belgisi yordamida ajratiladi. Parametrlar ro'yxati va ularning mumkin bo'lgan qiymatlari quyida ko'rsatilgan.

Kerakli parametrlar:

  • lat: qidirish uchun joyning kengligini ifodalaydi. (masalan, lat = 19.56875)
  • lon: qidirish uchun joyning uzunligini ifodalaydi. (masalan, lon = 72.97568)

Ixtiyoriy parametrlar:

format: ob -havo ma'lumotlarining javob formatini ko'rsatadi. Bu JSON yoki XML bo'lishi mumkin. Standart - JSON. (masalan, format = json yoki format = xml)

Ob -havo javoblari:

Har bir haqiqiy so'rov uchun vaqt zonasi xizmati so'rov URL manzilida ko'rsatilgan formatda javob qaytaradi. Har bir javob quyidagi elementlarni o'z ichiga oladi:

  • muvaffaqiyat: javob holatini ko'rsatuvchi qiymat.

    • 0: salbiy; so'rov noto'g'ri tuzilganligini ko'rsatadi.
    • 1: ijobiy; so'rov muvaffaqiyatli bajarilganligini ko'rsatadi.
  • xabar: so'rov noto'g'ri bajarilishining sababini ko'rsatuvchi satr. Faqat holat salbiy bo'lganda mavjud.
  • ma'lumotlar: bir nechta ob -havo parametrlariga ega qator.

    • Harorat: harorat ma'lumotlari.
    • hum: namlik mavjudligi haqidagi ma'lumotlar.
    • pres: mutlaq bosim ma'lumotlari.
    • aqi: hozirgi havo sifati indeksi.

Ikkala formatdagi misollarning javobini rasmlarda ko'rish mumkin.

5 -qadam: Modulni sozlash

Modulni sozlash
Modulni sozlash
Modulni sozlash
Modulni sozlash

Kirish nuqtasi yaratiladi va IP-manzilda veb-sahifa joylashtiriladi (standart: 192.168.4.1), qurilma yuklanishida qurilma menejeri/foydalanuvchidan hisob ma'lumotlarini olish uchun yoki modul allaqachon saqlangan hisob ma'lumotlarini topmasa. EEPROM.

Foydalanuvchi modul ulanmoqchi bo'lgan SSID va parolni kiritishi kerak. Agar siz brauzerga manzilga kirishga ruxsat bersangiz, kenglik va uzunlik avtomatik ravishda to'ldiriladi.

Barcha tafsilotlar kiritilgandan so'ng, "YUBORISH" tugmasini bosing, so'ng barcha modulning EEPROM -da barcha hisobga olish ma'lumotlari yoziladi.

Bu qadam juda muhim, chunki modullarni ommaviy ishlab chiqarishda hamma modullarni aniq joylashuvi va WiFi ma'lumotlari bilan dasturlash mumkin emas. Shuningdek, dasturda hisobga olish ma'lumotlarini qattiq kodlash maqsadga muvofiq emas, chunki agar modulni boshqa joyga ko'chirish yoki WiFi ma'lumotlarini o'zgartirmoqchi bo'lsak, modulni qayta dasturlashimiz kerak bo'ladi. Bu muammoning oldini olish uchun dastlabki sozlash funktsiyasi amalga oshiriladi.

6 -qadam: Endi ma'lumotlarni bulutga qo'shish vaqti keldi

Endi ma'lumotlarni bulutga qo'shish vaqti keldi
Endi ma'lumotlarni bulutga qo'shish vaqti keldi
Endi ma'lumotlarni bulutga qo'shish vaqti keldi
Endi ma'lumotlarni bulutga qo'shish vaqti keldi

Oldingi barcha amallar bajarilgandan so'ng, endi modulga ma'lumotlarni serverga yuklashga ruxsat berish vaqti keldi. Hisob ma'lumotlarini saqlaganingizdan so'ng, u avtomatik ravishda yuklashni boshlaydi.

U "insert.php" ni API chaqiruvi sifatida chaqiradi va GET usulida yuborish uchun barcha parametrlarni uzatadi.

Quyidagi kod parchasi parametrlarning qanday ishlashini ko'rsatadi.

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

Shunday qilib, barcha modullar ma'lumotlarni yuklashni boshlaydi.

Eslatma: Agar server haddan tashqari yuklanganini sezsangiz, kodni yuklash chastotasini kamaytiring.

7 -qadam: Havoda (OTA) yangilanishi

Havoda (OTA) yangilanishi
Havoda (OTA) yangilanishi

Modul o'rnatilgandan va ma'lumotlarni yuklay boshlaganidan so'ng, u har kuni dasturda ko'rsatilgan vaqtda dasturiy ta'minot yangilanishlarini tekshiradi. Agar u topsa, u ichidagi ikkilik faylni yuklaydi va yonadi. Agar shunday bo'lmasa, ma'lumotlarni yuklashning normal jarayoni davom etadi.

Yangi yangilanishni tekshirish uchun modul so'rov sarlavhasida MAC manzilini yuborib "update.php" ni chaqiradi. Keyin server aniq MAC manzilida yangi yangilanishlar mavjudligini tekshiradi, agar ha bo'lsa, u javob sifatida oxirgi dasturiy ta'minotning ikkilik faylini yuboradi.

Shuningdek, u modulning asosiy autentifikatsiyasi uchun zarur bo'lgan barcha kerakli sarlavhalarni tekshiradi.

8 -qadam: Qanday qilib foydalanuvchi/mijoz ma'lumotlarga kirishi mumkin …

Qanday qilib foydalanuvchi/mijoz ma'lumotlarga kirishi mumkin …
Qanday qilib foydalanuvchi/mijoz ma'lumotlarga kirishi mumkin …
Qanday qilib foydalanuvchi/mijoz ma'lumotlarga kirishi mumkin …
Qanday qilib foydalanuvchi/mijoz ma'lumotlarga kirishi mumkin …
Qanday qilib foydalanuvchi/mijoz ma'lumotlarga kirishi mumkin …
Qanday qilib foydalanuvchi/mijoz ma'lumotlarga kirishi mumkin …

Ma'lumotlarga serverdan kirish juda oddiy. Faqat "retrieve.php" ga qo'ng'iroq qilib, biz ob -havo ma'lumotlarini javob sifatida JSON formatida olamiz. Shundan so'ng, alohida elementlarga kirish uchun JSON ma'lumotlarini tahlil qilish kifoya. XML javobida ham xuddi shunday. Foydalanuvchi har doim foydalanuvchi bilan ishlash qulay bo'lgan javob formatini belgilashi mumkin. Agar foydalanuvchi formatni ko'rsatmasa, standart format - JSON.

Namuna so'rovi API ishini tekshirish uchun POSTMAN vositasi yordamida amalga oshiriladi.

JavaScript -da JSON javobini tahlil qilish misoli quyidagi kod parchasida ko'rsatilgan.

var url = "https://example.com/retrieve.php?lat=19.044848&lon=72.8464373"; httpGet (theUrl) funktsiyasi {var xmlHttp = yangi XMLHttpRequest (); xmlHttp.open ("GET", theUrl, noto'g'ri); // xmlHttp.send sinxron so'rovi uchun noto'g'ri (null); qaytish xmlHttp.responseText; } var myVar = httpGet (url); var obj = JSON.parse (myVar); document.getElementById ("aqi"). innerHTML = obj.data [0].aqi; document.getElementById ("harorat"). innerHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("temp"). innerHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("namlik"). innerHTML = Math.round (obj.data [0].hum) + "%"; document.getElementById ("bosim"). innerHTML = Math.round (obj.data [0].pres) + "mb";

JSON javobini tahlil qiladigan misol HTML sahifasining manba kodi ushbu bosqich oxirida mavjud.

Eslatma: Fayl kengaytmasini ".html" ga o'zgartiring.

9 -qadam: Ushbu loyihaning cheklovlari

  • Loyiha ma'lumotlarni yuborish uchun GET -dan foydalanadi; Garchi u nozik ma'lumotlar bilan ishlamasa ham, ma'lumotlarni osonlikcha boshqarish mumkin, chunki unda manba haqiqiyligini tekshirish uchun hech qanday mexanizm yo'q, uni sarlavhalarni tekshirishdan tashqari o'zgartirish mumkin, hatto oddiy qurilmani ham soxtalashtirish mumkin. ob -havo moduliga o'xshaydi.
  • Chunki modul faqat boshqa kirish nuqtasiga (WIFI) tayanadi va unga bog'liq bo'lib, ko'p hollarda boshqa tashkilotlarga tegishli bo'ladi. Agar biron-bir sababga ko'ra kirish nuqtasi umuman ishlamay qolsa, modul ma'lumotlarni jo'natolmaydi.
  • Loyiha mavjud tizimning aniqligini oshirish uchun qurilgan bo'lsa -da, bozorda mavjud bo'lgan sensor aniq emas, natijada uning asosiy maqsadi buziladi.
  • Loyihani rejalashtirayotganda, men xatolarni tuzatish uchun joylashuvga qarab, server ma'lumotlarning o'rtacha qiymatini belgilaydigan rejimni kiritishni rejalashtirgandim. Ammo bu funktsiyani amalga oshirgandan so'ng, men koordinatalarni geografik mintaqalarga tarjima qilish uchun uchinchi tomon API-lariga ehtiyoj borligini angladim.

10 -qadam: Ushbu loyihani yanada takomillashtirish mumkin

  • Modulning aniqligini bozorda mavjud bo'lgan umumiy modulni ishlatish o'rniga, datchiklarni aniq maqsadga moslashtirish orqali yanada yaxshilash mumkin.
  • Ma'lumotni yuborish uchun Cell-minoralari bilan simsiz aloqa o'rnatadigan maxsus chip yordamida modulni yanada mustaqil ishlashga o'zgartirish mumkin, bu esa xatolarga chidamliligini oshiradi.
  • Quyosh paneli va batareya tizimi ESP chuqur uyqu rejimi bilan birgalikda ishlatilishi mumkin, bu esa quvvat samaradorligini oshiradi va uni tashqi quvvat manbaidan mustaqil qiladi.
  • POST har qanday ma'lumotlarni uzatish uchun tsiklik kodlardan foydalanish kabi ba'zi autentifikatsiya mexanizmlari yordamida ma'lumotlarni yuborish uchun ishlatilishi mumkin.
  • Prototip taxtasi bo'lgan NodeMCU o'rniga biz ommaviy ishlab chiqarishda maxsus mikrokontrollerdan foydalanishimiz mumkin, bu nafaqat xarajatlarni kamaytiradi, balki tizim resurslaridan eng yaxshi foydalanadi.
  • Google geolocation API bilan birgalikda va mavjud bo'lgan ochiq WIFI -ga ulanishda, modul hatto konfiguratsiyasiz ham ishlashi mumkin; hech qanday sozlashsiz zavoddan ma'lumotlarni uzatishga tayyor.

11 -qadam: Tomoshabinlar uchun bir necha so'z

Tomoshabinlar uchun bir necha so'z
Tomoshabinlar uchun bir necha so'z

Hey bolalar, men tushunamanki, bu yangi boshlanuvchilar uchun qo'llanma emas, chunki men har bir tafsilotni aytib o'tmaganman. Bundan tashqari, ushbu loyiha ko'rsatmalarni o'z ichiga oladi. Shunga qaramay, men loyihaning har bir muhim jihatini yoritishga harakat qildim. Men, shuningdek, bilaman, loyihaning ishini ko'rsatadigan video juda zo'r bo'lardi, lekin bu mening birinchi ko'rsatmali va rostini aytsam, bu mening shunga o'xshash narsalarni birinchi marta nashr etishim, men o'zimni oldida juda asabiylashdim. kamera

Agar sizga bu loyihani yoki shunga o'xshash biror narsani amalga oshirishda yordam kerak bo'lsa, menga [email protected] elektron manziliga murojaat qiling yoki har doimgidek izoh qoldiring. Men sizlarga qo'limdan kelgancha yordam berishga harakat qilaman.

Rahmat!!

Tavsiya: