فهرست مطالب:

سیستم پایش آب و هوای هوشمند IoT توزیع شده با استفاده از NodeMCU: 11 مرحله
سیستم پایش آب و هوای هوشمند IoT توزیع شده با استفاده از NodeMCU: 11 مرحله

تصویری: سیستم پایش آب و هوای هوشمند IoT توزیع شده با استفاده از NodeMCU: 11 مرحله

تصویری: سیستم پایش آب و هوای هوشمند IoT توزیع شده با استفاده از NodeMCU: 11 مرحله
تصویری: وبینار کاربرد هوش مصنوعی دیتاساینس در صنعت بیمه- قسمت اول 2024, جولای
Anonim
سیستم پایش آب و هوای IoT توزیع شده هوشمند با استفاده از NodeMCU
سیستم پایش آب و هوای IoT توزیع شده هوشمند با استفاده از NodeMCU

همه شما ممکن است از ایستگاه هواشناسی سنتی آگاه باشید. اما آیا تا به حال فکر کرده اید که در واقع چگونه کار می کند؟ از آنجا که ایستگاه هواشناسی سنتی پرهزینه و حجیم است ، تراکم این ایستگاه ها در واحد سطح بسیار کمتر است که به نادرستی داده ها کمک می کند. من به شما توضیح می دهم چگونه: فرض کنید یک ایستگاه در وسط یک شهر واقع شده است و تنها ایستگاهی است که در شعاع 'x' متر واقع شده است ، در صورت وجود هرگونه عامل آلودگی در مجاورت ، می توان آن را به راحتی تعصب کرد. ایستگاه کل منطقه شعاع 'x' را آلوده نشان می دهد زیرا آن ایستگاه واحد وظیفه تعیین داده های آب و هوایی کل منطقه را بر عهده دارد.

برای غلبه بر این مشکل ، تراکم ماژول ها باید افزایش یابد که این امر تنها در صورتی امکان پذیر است که ماژول ها ارزان تر بوده و ردپای کوچکتری نسبت به مدل قبلی داشته باشند.

به همین دلیل است که راه حل پیشنهادی من راه حل مناسبی برای این مشکل است ، هزینه آن کمتر از 10 دلار است و همچنین به راحتی روی کف من قرار می گیرد.

چگونه کار می کند…

3 بخش اصلی این پروژه وجود دارد.

سمت دستگاه:

دستگاه یک ماژول اینترنت اشیا است که در تصویر نشان داده شده است و داده های آب و هوا را در هر بازه زمانی 'x' به سرور ارسال می کند. داده ها شامل داده های واقعی آب و هوا ، موقعیت جغرافیایی ماژول است. یعنی مختصات آن ، آدرس MAC آن ؛ برای شناسایی منحصر به فرد دستگاه ، نسخه سیستم عامل آن در حال حاضر در حال اجرا است. سمت دستگاه شامل ماژول های N است که در سراسر منطقه توزیع شده و داده ها را به طور فعال به سرور ارائه می دهد.

سمت سرور:

همانطور که از نامش پیداست ، این سرور متمرکز است که چندین عملیات مانند دریافت داده ها از ماژول ها و ذخیره آنها در پایگاه داده ، به روز رسانی ماژول با آخرین سیستم عامل در صورت اجرا بر روی نسخه قدیمی تر ، ارسال داده های آب و هوا به مشتری در صورت درخواست

مشتری/سمت کاربر:

این کاربر نهایی است که اطلاعات آب و هوا را از سرور درخواست می کند. سرویس گیرنده مکان فعلی را ارسال می کند و بر اساس موقعیت مکانی ، سرور فاصله بین مشتری و همه ماژول ها را محاسبه می کند و داده های آب و هوایی نزدیکترین ماژول را به مشتری ارسال می کند که دقیق در نظر گرفته می شود.

تدارکات

  • NodeMCU (ESP8266-12E)
  • DHT11 (سنسور رطوبت و دما)
  • BMP180 (سنسور فشار و دما)
  • MQ-135 (سنسور شاخص کیفیت هوا)
  • کابل USB (برای بارگذاری برنامه)
  • منبع تغذیه 5 ولت
  • خازن ها (اختیاری: قرار دادن موازی خط برق)
  • Arduino IDE (برای اشکال زدایی و بارگذاری برنامه)
  • برنامه POSTMAN (اختیاری: برای اشکال زدایی API)
  • یک وب سایت (برای میزبانی PHP و سرور MySQL)

مرحله 1: همه اجزا را لحیم کرده و برنامه را در NodeMCU بارگذاری کنید

همه اجزا را لحیم کرده و برنامه را در NodeMCU بارگذاری کنید
همه اجزا را لحیم کرده و برنامه را در NodeMCU بارگذاری کنید
همه اجزا را لحیم کرده و برنامه را در NodeMCU بارگذاری کنید
همه اجزا را لحیم کرده و برنامه را در NodeMCU بارگذاری کنید

تمام قطعات را همانطور که در نمودار مدار روی یک تخته پرف نشان داده شده است به NodeMCU لحیم کنید. همچنین ، یک خازن را به موازات خطوط برق بچسبانید ، زیرا در هنگام انتقال و دریافت فعال اطلاعات ، برق بالا می رود.

پس از اتمام کار لحیم کاری ، کد ارائه شده در فایل "code.c" را بارگذاری کنید.

توجه: فراموش نکنید که اعتبارنامه ها را با اعتبار خود جایگزین کنید. همچنین پرونده ای با نام "html_file.h" را در داخل پوشه arduino sketch قرار دهید. همه فایلهای هدر مورد استفاده در این پروژه را می توانید در اینجا پیدا کنید

ویژگی های کد:

نقطه دسترسی: از آنجایی که برنامه ریزی هر ماژول با اعتبار در تولید انبوه دشوار است ، ماژول در اولین بوت خود یک صفحه وب را میزبانی می کند تا اعتبار WiFi را که ماژول ها باید به آن متصل شوند ، پذیرفته و برای استفاده بعدی در EEPROM ذخیره کند.

پس از پیکربندی اعتبارنامه ، NodeMCU EEPROM را برای اعتبار بررسی می کند و به اعتبار WiFi موجود در EEPROM متصل می شود.

پس از اتصال موفقیت آمیز به WiFi ، NodeMCU بارگذاری داده ها را در هر بازه زمانی 'x' شروع می کند ، داده ها شامل آب و هوا ، آدرس MAC ماژول ، نسخه سیستم عامل ، موقعیت جغرافیایی دستگاه است.

به روز رسانی OTA: ماژول همچنین هر روز در زمان خاصی که در کد مشخص شده است ، بروزرسانی سیستم عامل جدید را بررسی می کند. این ویژگی مفید است زیرا برای هیچ سازنده ای امکان تغییر برنامه و تغییر برنامه در هر صورت وجود ندارد.

Timer Watchdog: Atlast باید راهی برای بازیابی خود بدون هیچ دخالت انسانی در صورت گیر افتادن یا تصادف وجود داشته باشد. این را می توان با استفاده از تایمر Watchdog به دست آورد. روش کار این است: یک روال فرعی Interrupt وجود دارد که هر ثانیه اجرا می شود. ISR هر زمان که شمارنده را اجرا می کند شمارنده را افزایش می دهد و بررسی می کند که آیا شمارنده به حداکثر تعداد رسیده است یا خیر. هنگامی که شمارنده به حداکثر مقدار برسد ، ماژول با فرض خرابی خود را تنظیم مجدد می کند. در حالت عادی ، شمارنده همیشه قبل از رسیدن به حداکثر تعداد مجدداً تنظیم می شود.

مرحله 2: پیکربندی SQL Server

پیکربندی SQL Server
پیکربندی SQL Server

راه اندازی SQL Server نیز بسیار ساده است. فقط کافی است یک پایگاه داده در سرور SQL ایجاد کرده و با وارد کردن پرونده ای با نام "database_structure.txt" تنظیمات را وارد کنید. در این مرحله می توانید فایل را پیدا کنید. از آنجا که دستورالعمل اجازه بارگذاری فایل های ".sql" را نمی دهد ، من فایل را به ".txt" تغییر نام دادم.

توجه: نام فایل را از ".txt" به ".sql" تغییر دهید.

مرحله 3: پیکربندی سرور فایل

اگر صاحب یک وب سایت هستید و به صورت آنلاین میزبانی می شود ، پیکربندی سرور واقعاً آسان است. من کل مراحل راه اندازی وب سایت و میزبانی آن را مرور نمی کنم ، زیرا خارج از محدوده این آموزش است. اما می توانید آن را در رایانه شخصی خود به عنوان localhost میزبانی کنید تا کار فایل ها را امتحان کنید.

از آنجا که Instructable اجازه بارگذاری فایل های PHP را نمی دهد ، نام فایل ها را به ".txt" تغییر دادم.

توجه: لطفاً نام پسوند فایلها را به ".php" تغییر دهید. همچنین فراموش نکنید که اعتبار پرونده "config.php" را تغییر دهید.

کافی است فایل ها را روی سرور بارگذاری کنید و خوب پیش می روید.

اطلاعات کوتاهی در مورد فایل های PHP به شما می دهم.

db_config.php:

در این فایل ، تمام اطلاعات مورد نیاز برای اتصال به سرور SQL ذخیره می شود.

db_connect:

در این فایل کلاس مورد نیاز برای اتصال پایگاه داده موجود است.

insert.php:

NodeMCU این فایل PHP را برای بارگذاری داده ها در سرور با استفاده از روش GET فراخوانی می کند. این فایل همچنین مسئول ذخیره همان داده ها در سرور SQL است.

retrieve.php:

کاربر/مشتری این PHP را با استفاده از روش GET فراخوانی می کند. سرور فاصله بین کاربر و همه ماژول ها را محاسبه می کند. سپس اطلاعات نزدیکترین ماژول به عنوان پاسخ به سرویس گیرنده در قالب JSON/XML به دلخواه مشتری ارسال می شود.

update.php:

این فایل PHP هر روز در یک ساعت خاص توسط ماژول فراخوانی می شود تا بررسی شود که آیا آخرین نسخه سیستم عامل در حال اجرا است یا خیر. کافیست آخرین فایل ".bin" را در سرور فایل قرار دهید و فهرست متغیر فایل را در متغیر فایل مشخص کنید.

اگر این تعداد زیادی فایل در ابتدا دلهره آور به نظر می رسند ، در مرحله بعد مستندات کاربر را وارد کرده ام.

مرحله 4: مستندات کاربر

مستندات کاربر
مستندات کاربر
مستندات کاربر
مستندات کاربر

معرفی:

Weather API یک رابط کاربری ساده برای درخواست داده های آب و هوا برای مکان های روی سطح زمین ارائه می دهد. شما اطلاعات آب و هوا را برای یک جفت عرض/طول جغرافیایی خاص با قالب خروجی مشخص شده درخواست می کنید. API دما ، رطوبت ، فشار و شاخص کیفیت هوا را که آخرین بار توسط نزدیکترین ماژول از محل درخواست شده ثبت شده است ، برمی گرداند.

قبل از اینکه شروع کنی:

این سند برای توسعه دهندگان وب سایت و تلفن همراه است که می خواهند اطلاعات آب و هوا را در برنامه ای که در حال توسعه است درج کنند. این کاربرد را با استفاده از API و مواد مرجع بر روی پارامترهای موجود معرفی می کند.

درخواست داده های آب و هوا:

درخواست های API هوا به عنوان یک رشته URL ساخته شده است. API داده های آب و هوا را برای نقطه ای از زمین ، که توسط یک جفت عرض/طول جغرافیایی مشخص شده است ، برمی گرداند. توجه داشته باشید که دقت داده های آب و هوا مستقیماً با چگالی ماژول های قرار گرفته در یک منطقه متناسب است.

یک درخواست API آب و هوا به شکل زیر است:

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

جایی که قالب خروجی (قالب) ممکن است یکی از مقادیر زیر باشد:

  • JSON (توصیه می شود) ، خروجی را در JavaScript Object Notation (JSON) نشان می دهد. یا
  • XML ، خروجی را در XML نشان می دهد که در گره پیچیده شده است.

پارامترهای درخواست:

همانطور که در همه URL ها استاندارد است ، پارامترها با استفاده از کاراکتر ampersand (&) جدا می شوند. لیست پارامترها و مقادیر احتمالی آنها در زیر نشان داده شده است.

پارامترهای مورد نیاز:

  • lat: نمایانگر عرض جغرافیایی یک مکان برای جستجو است. (به عنوان مثال lat = 19.56875)
  • lon: نمایانگر طول جغرافیایی یک مکان برای جستجو است. (به عنوان مثال lon = 72.97568)

پارامترهای اختیاری:

format: قالب خروجی پاسخ داده های آب و هوا را مشخص می کند. می تواند JSON یا XML باشد. به طور پیش فرض JSON است. (به عنوان مثال قالب = json یا قالب = xml)

پاسخ های آب و هوا:

برای هر درخواست معتبر ، سرویس منطقه زمانی پاسخ را در قالبی که در URL درخواست مشخص شده است باز می گرداند. هر پاسخ شامل عناصر زیر است:

  • موفقیت: مقداری که وضعیت پاسخ را نشان می دهد.

    • 0: منفی ؛ نشان می دهد که درخواست ناقص بوده است.
    • 1: مثبت ؛ نشان می دهد که درخواست موفقیت آمیز بوده است.
  • message: رشته ای که دلیل ناهنجاری درخواست را نشان می دهد. فقط در صورت منفی بودن وضعیت موجود است.
  • data: یک آرایه با پارامترهای متعدد آب و هوا.

    • temp: داده های دما
    • hum: داده های حضور رطوبت
    • pres: داده های فشار مطلق
    • aqi: شاخص کیفیت هوا در حال حاضر

نمونه های پاسخ هر دو فرمت را می توان در تصاویر مشاهده کرد.

مرحله 5: راه اندازی ماژول

راه اندازی ماژول
راه اندازی ماژول
راه اندازی ماژول
راه اندازی ماژول

یک نقطه دسترسی ایجاد می شود و یک صفحه وب روی یک آدرس IP (پیش فرض: 192.168.4.1) میزبانی می شود تا اعتبارنامه ها را از مدیر دستگاه/کاربر در اولین بوت دریافت کند یا اگر ماژول اعتبارات ذخیره شده قبلی را در برنامه پیدا نکند. EEPROM

کاربر باید SSID و گذرواژه ای را که کاربر می خواهد ماژول به آن متصل شود وارد کند. اگر به مرورگر اجازه دسترسی به مکان را بدهید ، عرض و طول جغرافیایی به طور خودکار پر می شود.

پس از وارد کردن همه جزئیات ، روی دکمه "SEND" کلیک کنید ، و سپس همه اعتبارنامه ها در EEPROM ماژول نوشته می شوند.

این مرحله بسیار مهم است زیرا هنگام تولید انبوه ماژول ها ، برنامه ریزی همه ماژول ها با داده های مکان دقیق و اعتبار WiFi امکان پذیر نیست. همچنین ، کدگذاری اعتبارنامه های برنامه توصیه نمی شود ، زیرا اگر اصلاً نیاز به جابجایی ماژول به مکان دیگری داشته باشیم یا بخواهیم اعتبار WiFi را تغییر دهیم ، باید برنامه را مجددا برنامه ریزی کنیم. برای جلوگیری از این مشکل ، عملکرد راه اندازی اولیه اجرا می شود.

مرحله 6: اکنون زمان آن رسیده است که داده ها را در ابر ارائه دهید

اکنون زمان کمک به داده ها در ابر است
اکنون زمان کمک به داده ها در ابر است
اکنون زمان کمک به داده ها در ابر است
اکنون زمان کمک به داده ها در ابر است

پس از اتمام تمام مراحل قبلی ، اکنون وقت آن است که به ماژول اجازه دهیم داده ها را روی سرور بارگذاری کند. پس از ذخیره اطلاعات کاربری ، بارگذاری به طور خودکار شروع می شود.

این "insert.php" را به عنوان یک تماس API با عبور از همه پارامترها برای ارسال در روش GET فراخوانی می کند.

قطعه کد زیر نحوه پردازش پارامترها را نشان می دهد.

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.}

مانند این ، همه ماژول ها بارگذاری داده ها را شروع می کنند.

توجه: اگر احساس می کنید سرور بیش از حد بار می شود ، فرکانس بارگذاری را در کد پایین بیاورید.

مرحله 7: به روز رسانی از طریق هوا (OTA)

به روز رسانی از طریق هوا (OTA)
به روز رسانی از طریق هوا (OTA)

پس از اینکه ماژول به طور کامل راه اندازی شد و شروع به بارگذاری داده ها کرد ، هر روز در زمان خاصی که در برنامه ذکر شده است ، بروزرسانی سیستم عامل را بررسی می کند. در صورت یافتن ، فایل باینری موجود در آن را بارگیری و چشمک می زند. و در غیر این صورت ، عملیات عادی بارگذاری داده ها ادامه می یابد.

برای بررسی بروزرسانی جدید ، ماژول با ارسال آدرس MAC در سرصفحه درخواست خود ، "update.php" را فراخوانی می کند. سپس سرور بررسی می کند که آیا آدرس MAC خاص به روز رسانی جدیدی دارد یا خیر ، در صورت پاسخ ، فایل باینری آخرین سیستم عامل را ارسال می کند.

همچنین همه سرصفحه های لازم برای احراز هویت اولیه ماژول را بررسی می کند.

مرحله 8: نحوه دسترسی کاربر/مشتری به داده ها…

نحوه دسترسی کاربر/مشتری به داده ها…
نحوه دسترسی کاربر/مشتری به داده ها…
نحوه دسترسی کاربر/مشتری به داده ها…
نحوه دسترسی کاربر/مشتری به داده ها…
نحوه دسترسی کاربر/مشتری به داده ها…
نحوه دسترسی کاربر/مشتری به داده ها…

دسترسی به داده ها از سرور بسیار ساده است. فقط با فراخوانی "retrieve.php" ، داده های آب و هوا را در قالب JSON دریافت می کنیم. پس از آن ، فقط موضوع تجزیه داده های JSON برای دسترسی به عناصر فردی است. مشابه پاسخ XML است. کاربر همیشه می تواند قالب ترجیحی پاسخ را که کاربر در آن راحت کار می کند ، مشخص کند. اگر کاربر قالب را مشخص نکند ، فرمت پیش فرض JSON است.

نمونه درخواست با استفاده از ابزار POSTMAN برای بررسی عملکرد API انجام می شود.

نمونه ای از تجزیه پاسخ JSON در جاوا اسکریپت در قطعه کد زیر نشان داده شده است.

var url = "https://example.com/retrieve.php؟lat=19.044848&lon=72.8464373"؛؛ تابع httpGet (theUrl) {var xmlHttp = new XMLHttpRequest ()؛ xmlHttp.open ("GET" ، theUrl ، false) ؛ // false برای درخواست همزمان xmlHttp.send (null) ؛ بازگشت xmlHttp.responseText؛ } var myVar = httpGet (url)؛ var obj = JSON.parse (myVar)؛ document.getElementById ("aqi"). innerHTML = obj.data [0].aqi؛ document.getElementById ("دما"). innerHTML = Math.round (obj.data [0].temp) + "° C"؛ document.getElementById ("temp"). innerHTML = Math.round (obj.data [0].temp) + "° C"؛ document.getElementById ("رطوبت"). innerHTML = Math.round (obj.data [0].hum) + "٪" ؛ document.getElementById ("فشار"). innerHTML = Math.round (obj.data [0].pres) + "mb" ؛

کد منبع مثال صفحه HTML که پاسخ JSON را تجزیه می کند در پایان این مرحله در دسترس است.

توجه: پسوند فایل را به ".html" تغییر دهید.

مرحله 9: محدودیت های این پروژه

  • پروژه از GET برای ارسال داده استفاده می کند. حتی اگر با داده های حساس سروکار نداشته باشد ، داده ها به راحتی قابل دستکاری هستند زیرا هیچ مکانیزمی برای بررسی صحت منبع به غیر از بررسی سرفصل ها ندارد ، که به راحتی قابل تغییر است و حتی یک دستگاه معمولی می تواند جعل شود به نظر می رسد ماژول آب و هوا
  • از آنجا که ماژول صرفاً متکی و وابسته به سایر نقاط دسترسی (WIFI) است تا داده هایی را ارسال کند که در بیشتر موارد از سازمان های دیگر خواهد بود. اگر به هر دلیلی نقطه دسترسی به کار افتاده باشد ، ماژول نمی تواند داده ارسال کند.
  • اگرچه این پروژه برای افزایش دقت سیستم موجود ساخته شده است ، اما سنسور موجود در بازار از دقت کمتر از حد انتظار برخوردار است که در نتیجه منجر به شکست هدف اصلی آن می شود.
  • در حین برنامه ریزی پروژه ، من قصد داشتم یک حالت را وارد کنم که در آن سرور به طور متوسط مقدار داده را بر اساس موقعیت مکانی برای تصحیح خطا در نظر می گیرد. اما با پیاده سازی این ویژگی ، متوجه شدم که برای ترجمه مختصات به مناطق جغرافیایی به برخی از API های شخص ثالث نیاز دارد.

مرحله 10: پیشرفت های بیشتر که می توان در این پروژه انجام داد

  • دقت ماژول را می توان با استفاده از سنسورها به منظور استفاده خاص به جای استفاده از ماژول عمومی موجود در بازار ، بیشتر افزایش داد.
  • ماژول را می توان برای استفاده مستقل تر با استفاده از یک تراشه مخصوص که به صورت بی سیم با Cell-tower ارتباط دارد ارسال کرد تا داده ها را ارسال کند و در نتیجه تحمل خطا را بهبود بخشد.
  • از پانل های خورشیدی و سیستم باتری می توان در رابطه با حالت خواب عمیق ESP استفاده کرد و در نتیجه بهره وری را بهبود بخشید و آن را از منبع تغذیه خارجی مستقل تر کرد.
  • POST را می توان برای ارسال داده ها با مکانیسم احراز هویت مانند استفاده از کدهای چرخه ای برای هر انتقال داده استفاده کرد.
  • به جای NodeMCU ، که یک برد نمونه سازی است ، می توانیم از یک میکروکنترلر سفارشی در تولید انبوه استفاده کنیم که نه تنها هزینه را کاهش می دهد بلکه از منابع سیستم نیز بهترین استفاده را می کند.
  • در ارتباط با API جغرافیایی Google و اتصال به هر WIFI باز موجود ، ماژول می تواند حتی بدون پیکربندی آن کار کند. آماده انتقال داده ها به کارخانه بدون هیچ گونه راه اندازی.

مرحله 11: چند کلمه برای مخاطبان

چند کلمه برای مخاطبان
چند کلمه برای مخاطبان

سلام بچه ها ، من متوجه می شوم که این یک آموزش مبتدی نیست ، زیرا من به تک تک جزئیاتی که باید پرداخته شود اشاره نکرده ام. و همچنین این پروژه واقعاً وسیع است که در یک دستورالعمل پوشش داده شود. با این وجود ، من تمام تلاش خود را کردم تا همه جنبه های مهم پروژه را پوشش دهم. من همچنین می دانم که یک ویدئو که کار پروژه را به نمایش می گذارد واقعاً عالی خواهد بود ، اما از آنجا که این اولین دستورالعمل آموزشی من است و صادقانه بگویم ، این اولین انتشار من در مورد هر چیزی شبیه به این است ، من از قرار گرفتن در مقابل بسیار عصبی بودم. دوربین.

اگر در ساخت این پروژه یا هر چیزی شبیه به آن به کمک احتیاج دارید ، کافی است با من در [email protected] تماس بگیرید ، یا می توانید مانند همیشه نظر دهید. من سعی می کنم تا جایی که می توانم به شما کمک کنم.

متشکرم!!

توصیه شده: