نمایش پارامترهای آب و هوا در صدر پروژه های IoT است و برای اجرای یک پروژه مصرفی و کاربردی در هر مکانی قابل استفاده خواهد بود. در این آموزش پروژه IoT Weather Station با استفاده از برد وای فای NodeMCU ESP8266 و سنسور دما فشار ارتفاع BMP280 اجرا خواهیم کرد. همچنین داده دریافتی از سنسورها در پلتفرم اینترنت اشیا Arduino IoT Cloud نمایش داده میشود. در ادامه ایستگاه هواشناسی با پلتفرم Arduino Cloud با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
هدف از اجرای پروژه IoT Weather Station
در پروژه ایستگاه هواشناسی با پلتفرم اطلاعات دما Temperature, فشار Pressure و ارتفاع Altitude توسط سنسور BMP280 اندازه گیری شده و سپس توسط برد وای فای NodeMCU داده ها پردازش شده و در نمایشگر OLED نمایش داده میشود. سپس برای مانیتوریگ دادهها از پلتفرم Arduino IoT Cloud استفاده میکنیم. در پلتفرم آردوینو کلود Arduino IoT Cloud در دشبورد تمامی داده ها به صورت طبقه بندی شده نمایش داده میشود و در هر لحظه میتوانید رصد کنید.
اتصالات پروژه ایستگاه هواشناسی با پلتفرم
در این پروژه به برد وای فای NodeMCU سنسور دما فشار ارتفاع BMP280 و نمایشگر OLED نیاز داریم. برد nodemcu به عنوان پردازنده مرکزی و میکروکنترلر در این پروژه نقش دارد. اطلاعات را از سنسور BMP280 دریافت کرده و ضمن ارسال روی پلتفرم Arduino IoT Cloud اطلاعات را روی نمایشگر OLED هم نمایان میکند. مطابق با تصویر زیر اتصالات را انجام دهید. پایه های SCL نمایشگر و سنسور به یکدیگر متصل شده و پایه های SDA نمایشگر و سنسور به یکدیگر متصل میشود. با توجه به اینکه هر دو ماژول از رابط I2C استفاده میکنند. بنابراین دو پایه مذکور به هم متصل میشوند.
سنسور BMP280
سنسور BMP280 قابلیت اندازه گیری دما، فشار و ارتفاع دارد. ماژول BMP280 از جمله ماژول های حسگر الکترونیکی numerous electronic است که همزمان میتواند چندین پارامتر را تشخیص داده و نمایش دهد. بر روی ماژول سنسور نقره ای رنگ GY-BM E/P 280 قرار گرفته شده است که پارامترهای محیطی را همانند نسخه اصلی آن اندازه گیری کرده و دیتا را ارسال میکند. این سنسور فشار را در بازه ۳۰۰ تا ۱۱۰۰ اندازه گیری کرده و رنج دمای اندازه گیری بین – ۴۰ تا + ۸۵ درجه سانتی گراد است. دقت اندازه گیری فشار ±۱ hPa است. متوسط جریان مصرفی ۲٫۷۴ µA و در حالت Sleep mode برابر با ۰٫۱ µA است. رزولوشن برای اندازه گیری فشار ۰٫۰۱ hPa و برای دما ۰٫۰۱ درجه سانتی گراد است. ولتاژ کاری ماژول ۳٫۳ تا ۵ ولت DC است. این ماژول توان مصرفی کم، قیمت بسیار مناسب و سنسور آن مناسب استفاده در ساخت گجت های مختلف جهت اندازه گیری فشار و دما است. این سنسور در دو مدل BMP280 و BME280 تولید شده است:
- مدل P فقط برای نمایش دما و فشار و ارتفاع است.
- مدل E فقط برای نمایش فشار، دما و رطوبت است.
ارتباط I2C
- پایه VCC به پایه ۳٫۳ ولت برد آردوینو / ESP متصل میشود.
- پایه GND به پایه GND آردوینو / ESP متصل میشود.
- پایه SCL به پایه A5 آناولوگ آردوینو / ESP متصل میشود.
- پایه SDA به پایه A4 آنالوگ آردوینو / ESP متصل میشود.
ارتباط SPI
از پایه های CSB و SDO فقط در هنگام استفاده از رابط SPI در ارتباط ۴ سیمه استفاده میشود. در ارتباط SPI برای اتصالات پایه ها به صورت زیر است:
تشخیص ارتفاع بر اساس فشار
سنسور BMP280 یک قابلیت منحصر به فرد دارد و آن فشار و ارتفاع است که توسط این تراشه اندازه گیری میشود. پاسکال Pa واحد اندازه گیری فشار است که در فیزیک به تعریف اصولی نیروی وارد بر سطح با آن آشنا شدیم. واحد اندازه گیری فشار هوا در هواشناسی و سطح آب هکتوپاسکال و یا میلی بار است که به صورت hPa نوشته میشود و معادل ۱۰۰ پاسکال است. فشار اتمسفری که در هوا وجود دارد برابر با ۱۰۱۳۲۵ Pa و یا معادل ۷۶ سانتی متر جیوه است. در نظر داشته باشید چگالی هوا با افزایش ارتفاع کاهش مییابد که مشخصه ای از فشار هوا است. با تغییر دما و رطویت چگالی هوا هم تغییر میکند. hpa نرمال در سطح دریا بر واحد MSL برابر با ۱۰۱۳٫۲۵ hPa یا ۲۹٫۹۲ اینچ جیوه است. برای تبدیل فشار به ارتفاع از فرمول زیر استفاده میشود:
۱ hectopascal (hPa) = 67.20 poundal-feet (ft pdl) Altitude = (10^(log(P/P_0)/5.2558797)-1/(-6.8755856*10^-6)
در اندازه گیری ارتفاع انتخاب مبدا بسیار مهم است. به صورت پیش فرض در یک محیط بسته میتوانیم مبدا را سقف در نظر بگیریم که در این حالت در صورتیکه شی مورد نظر پایین تر از سقف باشد، ارتفاع منفی در نظر گرفته میشود و بالعکس!
نمایشگر OLED SSD1306
یکی از پرکاربردترین ماژول OLED که در حال حاضر در صنعت الکترونیک و بردهای توسعه میکروکنترلر استفاده میشود، نمایشگر OLED با درایور قدرتمند SSD1306 است که در اشکال مختلف به بازار ارائه شده است. چیپ SSD1306 یک کنترل کننده درایور قدرتمند CMOS است. این درایور از پروتکل های ارتباطی I2C و SPI پشتیبانی میکند و با توجه به اینکه در پروتکل I2C تنها با دو پایه برای اتصال نیاز دارد، برای اتصال OLED به میکروکنترلرها از این پروتکل بیشتر استفاده خواهیم کرد. ولتاژ کاری نمایشگر ۳٫۳ و ۵ ولت است و از هر دو پایه های تعذیه میکروکنترلر میتوانید استفاده کنید. زاویه دید نمایشگر ۱۶۰ درجه است و ابعاد آن ۰٫۹۶ اینچ است. نمایشگر دارای ۸ سطر و ۱۲۸ ستون است. این OLED در ردو رنگ سفید و زرد موجود است. دقیق ترین کتابخانه ای که برای OLED وجود دارد توسط Adafruit توسعه یافته است و پیشنهاد میشود فقط از این کتابخانه استفاده کنید. با توجه به اینکه پروتکل ارتباطی نمایشگر ماژول OLED به صورت I2C است، با تمامی میکروکنترلرهایی که از پروتکل I2C پشتیبانی میکنند قابل تست و راه اندازی است و بدون نگرانی با نصب کتابخانه های مرتبط میتوانید ماژول نمایشگر را راه اندازی و استفاده کنید.
نصب کتابخانه OLED SSD1306
جهت استفاده از ماژولهای OLED با درایور SSD1306 به کتابخانه Adafruit_SSD1306 نیاز داریم. لینک دانلود کتابخانه در ادامه در بخش دانلود قرار گرفته شده است. در مرحله اول کتابخانه را از لینک زیر دانلود کرده و پس از دانلود به مسیر گفته شده انتقال دهید: ماژول نمایشگر OLED با پروتکل ارتباطی I2C درایور SSD13
پس از دانلود کتابخانه را کپی کرده و همانند زیر عمل کنید:
- وارد پوشه Document شده و سپس فایل آردوینو Arduino را باز کنید.
- وارد پوشه Library شده و فایل دانلود شده را کپی کنید.
- سپس از حالت زیپ خارج کرده و در صورت داشتن اسم master در انتهای اسم فایل آن را پاک کنید.
روش دیگر میتوانید مستقیم از نرم افزار آردوینو کتابخانه را فیلتر و نصب کنید:
در ادامه به کتابخانه Adafruit_gfx نیاز داریم. همانند تصویر زیر کتابخانه را فیلتر و نصب کنید:
حال پس از این بخش کتابخانه های مورد نیاز نصب شده است. تحلیل و بررسی کتابخانه Adafruit_SSD1306.h
کد آردوینو پروژه Arduino IoT Cloud
پس از انجام اتصالات کد را بر روی نرم افزار آردوینو انتقال داده و سپس کتابخانه های لازم برای تراشه ESP8266 که در کد مشخص شده است را در صورت لزوم نصب کنید. برای ارتباط برد با پلتفرم و یا وب سرور لوکال در صورت نیاز اطلاعات اینترنت شامل SSID, PASSWORD را وارد کنید.
#include <Wire.h> #include <SPI.h> #include <Adafruit_Sensor.h> #include <Adafruit_BMP280.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <ESP8266WiFi.h> char ssid[] = ""; char pass[] = ""; #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BMP280 bmp; void setup() { Serial.begin(9600); delay(1000); Wire.begin(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE, BLACK); display.setTextWrap(false); display.setCursor(123, 4); display.println("I"); display.setCursor(123, display.getCursorY()); display.println("O"); display.setCursor(123, display.getCursorY()); display.println("T"); display.setCursor(123, display.getCursorY()); display.display(); Serial.println(F("BMP280 test")); if (!bmp.begin()) { // connection error or device address wrong! Serial.println(F("Could not find a valid BMP280 sensor, check wiring!")); display.setCursor(34, 23); display.print("Connection"); display.setCursor(49, 33); display.print("Error"); display.display(); while (1) delay(1000); } display.setCursor(29, 0); display.print("TEMPERATURE:"); display.setCursor(36, 23); display.print("Pressure:"); display.setCursor(38, 46); display.print("Altitude:"); display.display(); } void loop() { // read temperature, humidity and pressure from the BME280 sensor float temp = bmp.readTemperature(); // get temperature in degree Celsius float pres = bmp.readPressure()/100; // get pressure in Pa float alti = bmp.readAltitude(SEALEVELPRESSURE_HPA); // get altitude in meter delay(1000); Serial.print("Temperature = "); Serial.print(temp); Serial.println("*C"); display.setCursor(37, 10); if (temp < 0) display.printf("-%02u.%02u C", (int)abs(temp) % 100, (int)(abs(temp) * 100) % 100 ); else display.printf(" %02u.%02u C", (int)temp % 100, (int)(temp * 100) % 100 ); // print degree symbols ( ° ) display.drawRect(75, 10, 3, 3, WHITE); //print pressure Serial.print("Pressure = "); Serial.print(pres); Serial.println("hPa"); display.setCursor(38, 33); display.printf("%02u hPa", (int)(pres)); //print Altitude Serial.print("Approx. Altitude = "); Serial.print(alti); Serial.println("m"); display.setCursor(38, 56); display.printf("%02u meter", (int)(alti)); display.display(); delay(1000); Serial.println(); delay(1000); }
اجرا در پلتفرم Arduino IoT Cloud
پلتفرم Arduino IOT Cloud اینترنت اشیا با هدف اجرای پروژه های اینترنت اشیا IOT پدید آمده است. از بردهای آردوینو سری وای فای و بردهای جانبی مانند ESP8266, ESP32 , loRaWAN پشتیبانی میکند. پلتفرم Arduino CLoud توسط کمپانی آردوینو تولید شده است. برنامه نویسی در محیط آنلاین، برخورداری از وب ادیتور آنلاین، برای کدنویسی یک محیط جذاب را فراهم کرده است. در این پلتفرم به محیط برنامه نویسی Arduino IDE دسترسی داریم و همانند نرم افزار تمامی ویژگی ها از جمله نصب کتابخانه، انتخاب بردها، سریال مانیتور در اختیار ما قرار گرفته شده است. بدون نیاز به ارتباط سریال کدنویسی انجام شده و در لحظه آپدیت میشود. محیط همان محیط برنامه نویسی Arduino IDE است و هیچ تغییری ایجاد نشده است. داده ها در دو فضای ابری و IDE نوشته شده و سپس مقادیرها با هم یکسان میشود. در این پروژه از برد Third Party مدل ESP8266 استفاده میکنیم. مشابه هر پلتفرم دیگری در اولین قدم بایستی حساب کاربری ایجاد کنیم. برای ساخت حساب کاربری در ابتدا وارد سایت آردوینو شوید. روی لینک کلیک کنید.
اگر در سایت آردوینو حساب کاربری دارید در قسمت های ۱ و ۲ اطلاعات حساب خود را وارد کنید. سپس بر روی SIGN IN کلیک کنید. همچنین میتوانید از طریق Google, Github, Facebook, Apple به Arduino IOT Cloud دسترسی پیدا کنید. پس از ورود صفحه ی زیر نمایش داده میشود.
یک اسم دلخواه انتخاب کرده و سپس تیک تمامی گزینه ها را زده و بر روی Create Account کلیک کنید.
نصب Agent در پلتفرم Arduino Cloud
برای برقراری ارتباط Arduino IOT Cloud به برد میکروکنترلرها بایستی Arduino Agent را نصب کنید. بر روی لینک کلیک کنید. مشابه تصویر زیر را مشاهده خواهید کرد.
سپس بر روی دانلود کلیک کنید. تا Arduino Agent به پلتفرم شما متصل شود. مشابه تصویر زیر خواهد بود.
با توجه به نوع سیستم خود یکی از ورژن های win32, win64 را انتخاب کنید.
سپس مراحل را تکمیل کنید تا نصب شود و آیکون آن در پایین صفحه نمایش داده شود. دقیقا مشابه تصویر زیر دنبال کنید.
روش ساخت Devices در پلتفرم Arduino IOT Cloud همان انتخاب میکروکنترلر است. برای شروع ارتباط قدم اول انتخاب برد است.
پلتفرم Arduino IOT Cloud از دو مدل میکروکنترلر پشتیبانی میکند که هر کدام به چندین زیر شاخه تقسیم بندی میشوند.
در قسمت دوم از برد ESP8266 استفاده میکنیم. برد را با کابل به سیتسم متصل کرده و سپس بر روی گزینه Setup an Arduino Device کلیک کنید. منتظر بمانید تا برد شناسایی شود. گزینه Setup a 3rd Party Devices را انتخاب کنید.
در این قسمت با توجه به اینکه از برد ESP8266 استفاده میکنیم، گزینه ESP8266 را انتخاب کنید. سایز گزینه ها هم به همین صورت قابل استفاده است.
بر روی Select Model کلیک کنید.
در این تست از NodeMCU 1.0 استفاده میکنیم. یک نام برای برد انتخاب کنید.
در پلتفرم اینترنت اشیا Arduino IoT پس از انتخاب دیوایس Device قدم بعدی ورود به صفحه Things است. پس از کلیک بر روی Things صفحه ی زیر نمایش داده میشود. مراحل زیر برای ایجاد Things بایستی دنبال شوند.
- نمایش Variable
- ساخت یک متغیر جدید
- انتخاب سخت افزار از قبل ساخته شده
- تغییرات سخت افزار
- اتصال به شبکه وای فای
ار صفحه ی تنظیم Things اولین بخش Add Variable است. در این بخش بایستی سخت افزارهایی که به میکروکنترلر متصل کرده ایم را به صورت متغیرهای منحصر به فرد همراه با نوع داده مشخص کنیم. داده int, float, bool و… همگی در این بخش قابل انتخاب است. انتخاب اسم برای متغیر هم دلخواه است. با انتخاب متغیرها، برای هر متغیر در سرویس ابری آردوینو به صورت اتوماتیک متغیر ساخته شده و سپس مجدد به صورت اتوماتیک در کد Sketch برنامه نوشته میشود! بله برنامه نویسی در این بخش به صورت آنلاین و اتوماتیک صورت میگیرد. به ازای تعریف هر متغیر در این بخش، در فضای ابری Cloud آردوینو یک متغیر در کد برنامه ساخته شده و یک تابع سفارسی Custom Function به صورت اختصاصی پس از حلقه Loop در برنامه Sketch اضافه میشود. قدرت Arduino IOT Cloud در این بخش است که آن را نسبت به سایر پلتفرم ها متمایز کرده است. برای تست بر روی Add Variable کلیک کنید.
- در این بخش یک اسم برای متغیر انتخاب کنید.
- نوع داده متغیر را مشخص کنید.
- پس از انتخاب گزینه ۱ و ۲ گزینه ۳ به صورت اتوماتیک متغیر و نوع داده را نمایش میدهد.
- نوع متغیر را مشخص کنید که به صورن خواندن و یا خواندن و نوشتن باشد.
- وضعیت تغییر و به روز رسانی داده متغیر را مشخص کنید که با هر تغییر وضعیت به روزرسانی شود و یا به صورت دوره ای؟
- سپس بر روی Add Variable کلیک کنید.
پس از معرفی متغیرها Variable ها بایستی به این ترتیب متغیرها با اسم دلخواه نمایش داده شود.
از قسمت Network اطلاعات مربوط به اینترنت خود را وارد کنید. اگر از برد Nodemcu استفاده میکنید. پس از انتخاب برد یک فایل pdf دانلودی همراه با Secret Key در اختیار شما قرار میگیرد که بایستی در این صفحه وارد کنید.
نمایش داده ها در دشبورد
پلتفرم Arduino IOT Cloud یک نقطه قوت در مقایسه با سایر پلتفرم ها دارد و آن برخورداری از یک محیط گرافیکی داشبورد است که در لحظه امکان دسترسی به متغیرهای تعریف شده در Things فراهم است. پس از شناخت دیوایس، انتخاب متغیرها و در نهایت نوشتن برنامه نوبت به فراخوانی متغیرها در دشبورد Dashboard است. از منو بر روی Dashboards کلیک کنید. با صفحه ی بالا رو به رو خواهید شد. بر روی گزینه Build Dashboard کلیک کنید.
فلش هایی که در تصویر بالا مشخص شده است، هر کدام برای کار خاصی در پلتفرم طراحی شده است. بر روی گزینه ADD کلیک کنید.
دو گزینه در این بخش قابل توجه است، یکی WIDGETS و دیگری THINGS.زیر شاخه های WIDGETS از محموعه ای از ویجت ها برای دسترسی به نمایش داده ها در قالب های مختلف استفاده شده است. تمامی ویجت ها را بررسی کنید از نمایش به صورت نمودار گرفته تا اسلاید و ال ای دی و کلید و استپر که هر کدام به تنهایی میتواند یک دشبورد بی نظیر را برای مدیریت داده ها فراهم کند.
- SWITCH
- PUSH BUTTON
- SLIDER
- STEPPER
- MESSENGER
- COLOR
- DIMMED LIGHT
- COLORED LIGHT
- TIME PICKER
- SCHEDULER
- VALUE
- STATUS
- GAUGE
- PERCENTAGE
- LED
- MAP
- CHART
با توجه به نوع نیاز برنامه و داده از هر یک از ویجت ها در دشبورد میتوانید استفاده کنید و آن را به یک متغیر در برنامه نسبت دهید. این نسبت دادن بسیار ساده است. کافی است یکی از ویجت ها را به دلخواه انتخاب کنید. با وارد کردن آن به صفحه دشبورد یک نوار تنظیم در سمت راست نمایش داده میشود که به ترتیب میتوانید برای ویجت یک اسم انتخاب کنید و سپس به متغیر نسبت دهید یا به اصطلاح لینک LINK کنید. برای نمونه ویجت GAUGE را وارد صفحه کنید.
وسایل مورد نیاز
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
سلام
سایت arduino iot cloud ما رو تحریم کرده.
آیا میتوان با برد nodemcu الان بهش وصل شد؟
لطفا راه حل کامل اتصالشو با توجه به این تحریم بگید چون من تازه کارم و به راهنمایی شما نیازمندم.
با سلام
میتوانید از DNSهای شکن استفاده کنید. از آموزش کتابخانه WiFi آردوینو هم میتوانید استفاده کنید.
سلام لطفا پروژه
همین رو فقط سنسور گاز و شعله که وقتی اتش و گاز بهش برسه لوکیشن یا مپ بفرسته و به گوشی زنگ بزنه
با سلام
کاربر گرامی درخواست شما نوشتن پروژه است که خارج از فعالیت سایت است. با توجه به آموزش های ارائه شده بایستی اقدام کنید.