اینترنت اشیا IOT برد ESP8266 برد Nodemcu پلتفرم uBeac

پروژه مانیتور شدت نور محیط در پلتفرم اینترنت اشیا uBeac با GY30 و Nodemcu

light-measure-with-esp8266-and-iot-cloud-platform-digispark
نوشته شده توسط پریسا پوربلورچیان

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

 


میکروکنترلر وای فای ESP8266


در پروژه‌های اینترنت اشیا IOT، ارتباط بیسیم به صورت وای فای از اهمیت ویژه ای برخوردار است. تراشه ESP8266 نیاز بسیاری از کاربران را در این مورد برطرف کرده است. بردهای متنوعی از تراشه داخلی ESP8266 بهره می‌برند، که در این بین برد Nodemcu طرفداران خاص خودش را دارد. اما اجرای این پروژه با تمامی بردهای وای فای از خانواده ESP8266 امکان پذیر است.  تراشه ESP8266 قابلیت اتصال به مودم‌ ، اتصال به شبکه اینترنت، قابلیت تبدیل به نقطه دسترسی Access Point، قرار گیری در مد سرور Server Mode داشته و بدون نیاز به برد کمکی قابلیت برنامه ریزی و اجرا بر روی Arduino IDE دارد. پس از آن دسترسی به شبکه اینترنت با ماژول ESP8266 فراهم شده و ارتباط با دنیای اینترنت اشیا آغاز می‌شود. برد Nodemcu ار تراشه داخلی وای فای ESP8266 طراحی شده است و در پروژه های DIY اینترنت اشیا بسیار کاربردی است. مدل های مختلفی برای Nodemcu با سری های متفاوت عرضه شده است که هر کدام ویژگی های منحصر به فرد خود را دارد. ولتاژ کاری برد Nodemcu CP2102 برابر با ۳٫۳ ولت است و همچنین از پین Vin بهره می‌برد.

در این آموزش از برد وای فای Nodemcu ESP8266 برای اتصال به سنسور شدت نور gy30 برای سنجش نور محیط استفاده می‌کنیم. دیتا از سنسور دریافت و از طریق شبکه وای فای به پلتفرم اینترنت اشیا ارسال می‌شود. در صورتیکه بخواهید از سایر بردهای وای فای استفاده کنید بایستی در نرم افزار آردوینو نوع برد مورد استفاده را انتخاب کنید.

 

 


سنسور نور gy30


سنجش پارامترهای محیطی نیازمند سنسورهای مختلفی است. یکی از سنسورها پرکاربرد تشخیص و مانیتور شدت نور محیط است. این پارامتر در موارد مختلفی تاثیرگذار است. از جمله سلامت محیط کار، که وابسته به نوع کار و نوع محیط است. سنسور gy-30 از خانواده سنسورهای فتو رزیستوری است. این سنسور شدت نور محیط را سنجیده و بر اساس پارامتر Lux به عنوان دیتا تبدیل می‌کند. مقادیر لوکس از ۰ تا ۶۵۵۳۵ واحد لوکس است. با سنسور gy-30 این مقادیر قابل اندازه گیری است. سنسور gy-30 از سنسورهای Light intensity است و به شدت نور دریافتی از محیط وابسته است. رابط سنسور I2C است و از طریق دو پایه SCL, SDA با بردهای میکروکنترلر ارتباط شکل میگیرد. واحد سنسور Lux است و به صورت پیش فرض کالیبره شده است. بازه تغییر دیتا از ۰ تا ۶۵۵۳۵ بر واحد لوکس Lux است. سنسور از مبدل داخلی ۱۶ بیتی AD ساخته شده است.

مقادیر تغییر پارامترهای لوکس در سنسور به صورت زیر است.

  • در شب مقدار لوکس عددی بین ۰٫۰۰۱-۰٫۰۲ بر واحد Lux است.
  • در moon light night مقدار لوکس عددی بین ۰٫۰۲-۰٫۳ بر واحد لوکس است.
  • در محیط ابری در داخل عددی بین ۵-۵۰ بر واحد لوکس است.
  • در محیط ابری بیرون عددی بین ۵۰-۵۰۰ بر واحد لوکس است.
  • در محیط آفتابی داخل عددی بین  ۱۰۰-۱۰۰۰ بر واحد لوکس است.

 

 


 Json برای ارسال دیتا به پلتفرم


جیسون Json در برنامه نویسی بهترین روش برای اشتراک گذاری داده ها است. جیسون داده ها را تفکیک کرده و به اجزای کوچک تر تبدیل می‌کند. به عنوان مثال می‌توانیم اطلاعات من را به صورت جیسون در برنامه نویسی به صورت زیر تفکیک کنیم. جیسون Json به صورت آرایه Array قابل نوشتن است و به همین دلیل سبب آسان تر شدن ارسال و دریافت دیتا خواهد شد. در جیسون هر خط از برنامه با نمایش ویژگی ها آغاز شده و در ادامه آن جزییات آن ویژگی نوشته می‌شود. به عنوان مثال برای تحلیل ویژگی بنده به عنوان یک انسان از عنوان نام کوچک و نام بزرگ برای ویژگی و از اسم و فامیل برای نمایش جزییات ویژگی استفاده شده است.

 // تحلیل جیسون 
{
     "firstName": "Parisa",
     "lastName" : "Pourbolourchian",
     "age"      : 28,
     "address"  : "Vanak "
}

در Json سرعت انتقال داده بسیار زیاد است و برای برنامه نویس ها مدت زمان پاسخگویی به درخواست از سمت سرور مهم بوده و با استفاده از جایگزینی Json روند ارسال دیتا با سرعت بیشتری انجام شده و مدت زمان پاسخگویی کاهش چشم گیری داشته است. نوع داده Json از تمامی مرورگرهای وب پشتیبانی می‌کند. جیسون Json عملکری مشابه آبجکت در زبان برنامه نویسی جاوا اسکریپت دارد و برای ذخیره و ارسال دیتا استفاده می‌شود. در این پروژه به کمک داده جیسون Json می‌توانیم دیتای اندازه گیری شده توسط سنسور GY-30 را به پلتفرم ارسال کنیم.

جیسون Json از سه مولفه ی اصلی تشکیل شده است.

  • استفاده از آرایه که با علامت [ نمایش داده می‌شود.
  • استفاده از آبجکت که با علامت { نمایش داده می‌شود.
  • استفاده از کلید که برای نمایش آبجکت Json استفاده می‌شود.
  • استفاده از ارزش یا Value که برای نمایش مقدار کلید استفاده می‌شود.

 در پروژه مانیتور شدت نور محیط دیتای دریافتی از سنسور شدت نور GY-30 را به یک فرمت قابل فهم Json برای سرور تبدیل می‌کنیم. کد جیسون میتواند دلخواه باشد و فقط کافیست در یک آرایه با نام دلخواه معرفی شود. به عنوان مثال در این آموزش از سنسور GY30 استفاده می‌کنیم. نام سنسور را به دلخواه lux و کد جیسون را lightsensor تعریف می‌کنیم.

 


اتصال سنسور GY30 به Nodemcu


سنسور نور GY-30 دارای ۴ پایه است که به ترتیب با VCC, SDA, SCL,AD,AD0,GND بر روی پایه ها نامگذاری شده است. برای ارتباط I2C با برد Nodemcu از دو پایه SDA و SCL استفاده می‌کنیم. پایه SDA پایه D2 در برد Nodemcu و پایه SCL پایه D1 در برد Nodemcu است. تغدیه VCC سنسور به پایه Vin و GND به GND برد وصل می‌شود.

 


کد آردوینو Json


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

#include <ESP8266HTTPClient.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <ArduinoJson.h>



#include <Wire.h>
#include <BH1750.h>




#define url "http://digispark.hub.ubeac.io/......."

BH1750 lightMeter;

float lux;



void setup() {
  Serial.begin(9600);
  WiFiManager wifiManager;


wifiManager.autoConnect(".........", "........");
  wifiManager.autoConnect("AutoConnectAP");
  Serial.println("connected!");

  Wire.begin();
  lightMeter.begin();
}



  void loop() {
  StaticJsonDocument<300> doc;
  
   
   lux = lightMeter.readLightLevel();

   doc["Name"] = "lux";
   doc["Lightsensor"] = lux;



  serializeJson(doc, Serial);
  Serial.println();


   char JSONmessageBuffer[300];
  serializeJsonPretty(doc, JSONmessageBuffer);


  
 HTTPClient http;
  http.begin(url);
  http.addHeader("Content-Type", "application/json");
  int httpCode = http.POST(JSONmessageBuffer);
  String payload = http.getString();
  Serial.println(httpCode);
  Serial.println(payload);
  http.end();

  delay(2000);
}



    

کد را کپی و به نرم افزار آردوینو انتقال دهید.

 


تحلیل کد آردوینو Json


با توجه به اینکه تراشه اصلی برد ESP8266 است، برای ارتباط با این برد نیاز به نصب پکیج کامل ESP8266 خواهیم داشت. در آموزش راه اندازی برد Nodemcu روش نصب پکیج ESP8266 توضیح داده شده است. تا به امروز که در تاریخ ۱۰ ژانویه ۲۰۲۱ هستیم ورژن های متعدد و توسعه یافته ای برای برد ESP8266 معرفی شده است. جهت ارتباط با دنیای شبکه و وای فای چندین کتابخانه توسعه یافته است که به ترتیب زیر در کدهای برنامه به آن نیاز داریم.

  •  کتابخانه ESP8266HTTPClient
  • کتابخانه ESP8266WiFi
  • کتابخانه ESP8266WebServer
  • کتابخانه WiFiManager

 همچنین برای تبدیل فرمت دیتا به Json از کتابخانه Json استفاده می‌کنیم.

  • کتابخانه ArduinoJson

 با توجه به اینکه سنسور مورد استفاده در این آموزش BH1750 استف کتابخانه ای با همین نام برای آن در لیست کتابخانه های پیش فرض Arduino IDE توسعه یافته و در دسترس قرار دارد.

  • کتابخانه BH1750

در مرحله اول برای نصب کتابخانه BH1750 از منو نرم افزار آردوینو Tools/Manage Libraries کتابخانه را سرچ و فیلتر کنید. سپس بر روی install کلیک کنید تا نصب شود. با توجه به اینکه از پروتکل I2C بهره می‌برد بایستی کتابخانه Wire را فراخوانی کنید. این کتابخانه به صورت پیش فرض در لیست کتابخانه های نصب شده نرم افزار آردوینو Arduino قرار دارد.

 

نصب کتابخانه های پکیج ESP8266

ESP8266 تراشه ای است که منحصرا برای ارتباط وای فای Wifi طراحی شده است و جهت دریافت و ارسال دیتا از شبکه وای فای می‌توان از ان استفاده کرد. در این خصوص کتابخانه های متعددی برای ارتباط با شبکه های وای فای توسعه داده شده است که در این بین کتابخانه های وای فای ESP8266 در پکیج کتابخانه ی آردوینو قرار داشته و در دسترس است. با استفاده از کتابخانه ESP8266WiFi به شبکه وای فای متصل شده و آی پی برای ورود به مرورگر و ساخت یک وب پیج برای نمایش و دریافت اطلاعات فراهم است. به عنوان مثال در کد زیر با فراخوانی کتابخانه و وارد کردن اطلاعات شبکه وای فای شخصی به اینترنت متصل شده و یک آی پی منحصر به فرد در اختیار ما قرار می‌دهد.

از کتابخانه ESP8266WebServer برای مدیریت درخواست های HTTP مانند POST و GET استفاده میشود و فقط همزمان از یک کلاینت پشتیبانی می‌کند. از این کتابخانه برای ساختن کلاس از ESP8266webserver استفاده می‌شود که شامل IP Address هاست و پورت هاست Host port است که به صورت پیش فرض پورت عدد ۸۰ است.

#define url "http://digispark.hub.ubeac.io/............"

از کتابخانه ESP8266HTTPClient جهت دسترسی به دستورات توابع Http برای ارتباط با سرورهای دیگر از طریق پروتکل Http استفاده می‌شود که به صورت زیر در برنامه تعریف شده است. از http برای مشخص شدن فرمت دیتا و ارسال دیتا در شبکه استفاده می‌شود. همچنین مفهوم Request که در فارسی همان درخواست به سرور است در پروتکل http از پارامترهای مهم است . به این شکل که سنسور  یک Request را از طریق url ساخته شده به وب سرور می‌فرستد. در این مرحله پردازش بر روی Request انجام می‌شود.  از متد Post برای ارسال داده در پروتکل http استفاده می‌شود. از متد Post برای ارسال حجم بیشتری از اطلاعات استفاده می‌شود و از مزیت های آن عدم نمایش دیتا در URL است که بیشتر مورد استفاده قرار می‌گیرد.  در واقع در متد post دیتا به صورت مستقیم از کلاینت Client به سرور Server ارسال می‌شود. امنیت این متد نسبت به سایر متدها بسیار بالاتر است و دیتاها در url نمایش داده می‌شود. از مهم ترین ویژگی های متد Post ارسال داده های متنی و باینری است که در این پروژه این اتفاق رقم خورده است.

 HTTPClient http;
  http.begin(url);
  http.addHeader("Content-Type", "application/json");
  int httpCode = http.POST(JSONmessageBuffer);
  String payload = http.getString();
  Serial.println(httpCode);
  Serial.println(payload);
  http.end();

در hhtp نوع دیتا را توسط hhtp.addheader مشخص می‌کنیم که دیتای ما به صورت متنی Type و از نوع Json است.

 http.addHeader("Content-Type", "application/json");

با ورود به سریال مانیتور در نرم افزار آردوینو Arduino می‌توانید دیتا را در لحظه رصد کنید. اما مهمترین قسمت در این آموزش ارسال دیتا بر روی پلتفرم است. مهم ترین بخش در تحلیل کد مربوط به آدرس URL است که در این بخش آدرس URL از پلتفرم اینترنت اشیا uBeac دریافت می‌شود. دیتا در ابتدا از سنسور دریافت شده و سپس توسط وای فای و با استفاده از کتابخانه ESP8266HTTPClient از طریق متد Post با آدرس URL ساخته شده به پلتفرم uBeac ارسال می‌شود. روش دریافت آدرس Gateway URL در آموزش معرفی uBeac کامل توضیح داده شده است.

از کتابخانه wifimanager برای مدیریت تنظیمات وای فای با تنظیمات پرتال وب استفاده می‌شود. توسط این کتابخانه یک اکسس پوینت ساخته و به صورت اتوماتیک به اکسس پوینت اتصال می‌یابد. از توابع wifimanager برای معرفی یوزرنیم Username و پسورد وای فای Wifi Password استفاده می‌کنیم. در این بخش اطلاعات نوشته شده مربوط به وای فای شخصی من است که بایستی کدها اطلاعات اینترنت خود را وارد کنید.

#include <WiFiManager.h>

 WiFiManager wifiManager;
  
wifiManager.autoConnect("Irancell-Z6000", "YcQLPscpSe");
  wifiManager.autoConnect("AutoConnectAP");
  Serial.println("connected!");

 

جهت دانلود کتابخانه های پکیج ESP8266 از فایل گیت هاب که لینک شده است، می‌توانید استفاده کنید.

نصب و تحلیل کتابخانه ArduinoJson

کتابخانه Arduinojson بهترین کتابخانه توسعه یافته برای بردهای امبدد C++ است. آردوبنو Json طی دو فرآیند Serialization و Deserialization داده را به یک فرمت خاص تبدیل می‌کند تا بتواند دیتا را ذخیره انتقال و بازسازی کند.

  • یکی از ویژگی های مهم ArduinoJson یک روش قابل درک برای مدیریت اشیا Object و آرایه ها دارد.

 

مهم ترین بخش در کدنویسی در این پروژه دریافت و خواندن دیتا از سنسور و تبدیل دیتا به یک پارامتر قابل فهم برای ارسال به پلتفرم است. برای تبدیل دیتا از Json استفاده می‌کنیم. توابع مورد نیاز برای Json بر اساس پارامترهای مورد نیاز از سنسور نوشته می‌شود. همانطور که گفته شد Json دارای سه مولفه اساسی برای تعریف متغیرها است. در این کد از آرایه با علامت اختصاری [] کروشه استفاده می‌کنیم. توسط آرایه Array یک ارزش و مقدار را دریافت و یا جایگزین می‌کنیم. از staticjsonDocument برای تعیین و تخصیص حافظه استفاده می‌شود. عدد ۲۰۰ یا ۳۰۰ بر حسب بیت است.

 StaticJsonDocument<300> doc;



 doc["Name"] = "lux";
  doc["Lightsensor"] = t;
 


 serializeJson(doc, Serial);
  Serial.println();

کد Json به صورت بالا است. تا این مرحله دیتا از سنسورها دریافت شده است و سپس با دستور doc هر بخش از سنسور را تفکیک کرده و به هر doc یک ارزش نسبت میدهیم. در اینجا doc همان اسم آرایه ما است که به دلخواه انتخاب شده است. در اولین بخش یک اسم دلخواه برای سنسور استفاده می‌کنیم که برای من ladypi تعریف شده است. در این حالت یک آرایه برای سنسور نور با نام lightsensor تعریف می‌کنیم و در کدها با doc نمایش میدهیم.

 


ارسال دیتا به پلتفرم اینترنت اشیا uBeac


uBeac یک پلتفرم اینترنت اشیا IOT است که به دلیل محیط ساده و جذاب ارتباط با دنیای دیتا را برای ما فراهم کرده است. پلتفرم uBeac از پروتکل HTTP و پروتکل MQTT برای ارتباط با میلیون ها دیوایس استفاده می‌کند. پلتفرم uBeac قابلیت تعریف کردن بی نهایت Device و دسته بندی دیتاها بر اساس نوع و کاربرد و حتی اطلاعات جزیی تر مانند واحد سنسورهای مورد استفاده را در اختیار ما قرار داده و از طریق پروتکل های http mqtt ارتباط بین دیوایس های سخت افزاری مانند nodemcu , RaspberryPi را با یکدیگر فراهم می‌کند. از ویژگی های بی نظیر پلتفرم uBeac ساخت دشبورد به صورت لایو و زنده برای مدیریت دیتا دارد. همچنین امکان گزارش گیری از دیتاها با امکان تعریف بازه ی زمانی و تاریخی بر اساس ساعت هفته و ماه را فراهم کرده و در دو فرمت Json و CSV خروجی می‌دهد.

https://app.ubeac.io

پس از ثبت نام و ساخت حساب کاربری در پلتفرم uBeac با تعریف یک Gatway ارتباط با دنیای اینترنت اشیا IOT را شروع خواهیم کرد.

 


ساخت پلتفرم uBeac


گیت وی Gateway در یوبیک از دو بخش سخت افزار Hardware و نرم افزار Software تشکیل شده است که از چند بخش پشتیبانی می‌کند.  به عنوان مثال در بخش سخت افزار از آردوینو، رزبری پای و در بخش نرم افزار از Android applications و uBeac Generic Gateways پشتیبانی می‌کند. در این آموزش از برد ESP8266 استفاده شده است و شامل پشتیبانی است. از منو سمت راست پلتفرم بر روی Gateway کلیک کنید. در صفحه باز شده بر روی Setting کلیک کنید. در این بخش می‌توانید یک Gateway دلخواه Add Gateway بسازید. Firmware را بر روی uBeac Multiple انتخاب کنید. در Gateway ساخته شده آدرس URL که از پلتفرم دریافت شده است را به کد آردوینو برنامه انتقال می‌دهیم.

 روش ساخت Gateway و تعریف دیوایس در آموزش زیر کامل توضیح داده شده است. در ابتدا در صورتیکه از قبل گیت وی ساخته اید، نیازی به تعریف مجدد نیست و کافیست با توجه به نامی که برای سنسور نور Gy-30 و کد json انتخاب کرده اید، دیوایس جدید تعریف کنید تا دیتا را به صورت جداگانه رصد کنید.

همانطور که در تصویر مشهود است، دیتای سنسور Gy-30 با نام دلخواه بر واحد لوکس نمایش داده می‌شود. تغییر دیتا لحظه ای است و در کسری از ثانیه دیتای جدید را بر روی پلتفرم نمایش میدهد.

 


دریافت گزارش از پلتفرم uBeac


مهم ترین بخش برای تحلیل دیتا و بررسی دیوایس ها و عملکرد آن ها دریافت گزارش است. به عنوان مثال برای کنترل و بهینه کردن مصرف انرژی از دیوایس های اندازه گیری جریان استفاده می‌شود. پس از گذشت مدت زمان کوتاهی به واسطه دیتای دریافتی از محیط میتوان انرژی مصرف شده را اندازه گیری و سپس آن ها را بهینه کرد. پلتفرم های اینترنت اشیا این امکان را با دسترسی ساده تری در اختیار یوزر قرار میدهند تا سرعت در گزارش و اعمال تغییرات افزایش یابد.  در پلتفرم uBeac دریافت گزارش Report از گیت وی و دیوایس های تعریف شده طی بازه زمانی همراه با ساعت، هفته، ماه و سال است. دیتا با فرمت های Json , CVS از پلتفرم دریافت و دانلود شده و در یک فایل اکسل ذخیره می‌شود. در این بخش میتوانید دیتا را به سه روش مختلف رصد کنید.

  •  Sensor Data
  • Sensor Chart
  • Gateway Data

در این بخش دیتاهای دریافتی از سنسور را از مسیر Menu/ Reports مشاهده و در فرمت های مورد نظر دانلود کنید.

 


جمع بندی لیدی پای


اسم این آموزش را بخش دوم کار با پلتفرم اینترنت اشیا نام گذاری می‌کنم. در اولین آموزش منتشر شده برای دریافت دیتا در پلتفرم uBeac از سنسور دما رطوبت AM2301 استفاده کردیم. اما تصور کنید بخواهید یک گلخانه را مدیریت کنید. طبیعتا فقط پارامتر دما و رطوبت برای کنترل گلخانه کافی نیست. شدت نور دریافتی از محیط و تابش مستقیم نور بسیار مهم است. کدام ردیف از گل ها در روز به نور بیشتری نیاز دارند و تابش نور در محیط به چه صورت است. با استفاده از پلتفرم میتوانیم تابش نور را سنجیده و مقدار عددی آن را بر واحد Lux بدست آوریم. با ترکیب دو آموزش دما و رطوبت و آموزش شدت نور Gy-30 بخش مهمی از پروژه را پیش برده ایم. در نهایت با استفاده از گزارشی که پلتفرم در اختیار ما قرار میدهد میتوانید تغییرات مثبتی با توجه به حرارت و نور را محاسبه و تغییرات جدید اعمال کنید. قبل از اجرای پروژه آموزش کار با پلتفرم اینترنت اشیا uBeac را مطالعه کنید تا خطایی در ساخت دشبورد نداشته باشید.

 

 


وسایل مورد نیاز


برد وای فای ESP8266

سنسور تشخیص نور GY30 BH1750FVI

کابل و برد بورد

درباره نویسنده

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۳ دیدگاه

  • سلام وقت بخیر می خواستم بدونم ایا میشه همزمان دو عدد ماژول را برد اردینو ویا به ماژول node mcu esp8826 وصل کرد ایا ولتاژ مدار میتونه هر دو را ساپورت کنه ممنون میشم راهنمایی کنید