ارسال اطلاعات سنسور به اینترنت با برد آردوینو
محتویات
پیشرفتهای اخیر در فناوریهای اطلاعات و ارتباطات باعث ایجاد سبک جدیدی از محاسبات شده است. در این دوره، کاربران می توانند به قابلیت هایی مانند ذخیره سازی داده ها و قدرت محاسباتی از طریق اینترنت دسترسی داشته باشند. این کار معمولا به عنوان محاسبات ابری شناخته می شود.
در این آموزش در مورد فرآیند نوشتن داده ها در فضای ابری صحبت خواهیم کرد. سپس از Arduino Uno، سنسور رطوبت و دما DHT22 و ماژول WiFi ESP8266 برای نوشتن داده ها در فضای ابری استفاده می کنیم. همچنین به اصول اولیه مانند ابر، ThingSpeak، ارسال و ترسیم دادهها به ThingSpeak، و راهاندازی محرکها و اقدامات اشاره خواهیم کرد. در نهایت، ما پروژه ای برای نشان دادن این مفاهیم خواهیم ساخت.
ابر Cloud چیست؟
در سال های نه چندان دور، هارد دیسک ها، سی دی ها و فلاپی دیسک ها دستگاه های اصلی ذخیره سازی اطلاعات بودند. با این حال، این ها معایبی داشتند. در مرحله اول، برای تهیه نسخه پشتیبان از اطلاعات خود باید دستگاه های خارجی زیادی خریداری کنید، که منجر به هزینه های اضافی می شود. ثانیا، افزایش حجم داده های تولید شده توسط کاربران به قدرت پردازش بیشتری نیاز دارد که هزینه بیشتری دارد و به منابع خدمات و نگهداری نیاز دارد. از سوی دیگر، ابر مفید است، زیرا شامل جمع آوری مراکز داده است که می توان از طریق اینترنت به آنها دسترسی داشت. آنها خدماتی مانند ایمیل، ذخیره سازی داده ها، پردازش داده ها و بازیابی داده ها را ارائه می دهند که می تواند از هر جای دنیا انجام شود. ابر معایب دستگاههای ذخیرهسازی خارجی را با دادن قابلیتی به کاربران برای مدیریت منابع آنلاین برای خود برطرف کرد. اکنون کاربران می توانند فضای ذخیره سازی و خدمات آنلاین مورد نیاز خود را اجاره کنند.
نمودار بالا مفهوم ابر اینترنت اشیا را نشان می دهد. به طور کلی، محاسبات، ذخیرهسازی و پایگاههای داده توسط نهادهای شخص ثالث در مراکز داده از راه دور به جای دستگاهها یا زیرساختهای کاربر مدیریت میشوند. از طریق اینترنت می توان به همان فایل ها از هر دستگاهی دسترسی داشت. علاوه بر این، کاربران مجاز به ایجاد و مدیریت حساب های خود هستند. برترین پلتفرم های ابری موجود در بازار امروز عبارتند از:
- Amazon Web Services
- Google Cloud Platform
- Microsoft Azure
- IBM Bluemix
- Alibaba
اینترنت اشیا (IOT)
اینترنت اشیا، که معمولاً به عنوان IoT شناخته میشود. این یک حوزه فناوری نوظهور است که در آن دستگاه ها یا اشیاء توانایی اتصال و انتقال داده ها را از طریق شبکه بدون دخالت انسان دارند. این اشیا دارای قابلیت های حسی هستند و دارای شناسه های منحصر به فرد برای آدرس دهی و ارتباط هستند. برای انتقال داده ها از دستگاه ها از طریق اینترنت، رایانش ابری زیرساختی را برای آن داده ها فراهم می کند تا به مقصد برسند. در طول سالها، فروشندگان دستگاههای متصل زیادی ایجاد کردهاند و در همین راستا، پلتفرمهای ابری اینترنت اشیا زیادی توسعه داده شدهاند. نمونه هایی از پلتفرم های ابری اینترنت اشیا عبارتند از: ThingsBoard، ThingWorx، IBM Watson IoT، Node-RED، Thinger و ThingSpeak.
در این مقاله، ما بر روی ThingSpeak تمرکز خواهیم کرد.
THINGSPEAK چیست؟
ThingSpeak یک پلت فرم اینترنت اشیا و ابری است که اشیا یا دستگاه های فیزیکی را قادر می سازد به ابر متصل شوند. پروتکل های ارتباطی HTTP و MQTT ارتباطی بین اشیا و ابر فراهم می کنند. این پلتفرم به کاربران ثبت نام شده اجازه می دهد تا داده ها را جمع آوری، نمایش، تجزیه و تحلیل، استنتاج و بر اساس نیاز عمل کنند. ThingSpeak توسط ioBridge به بازار عرضه شد و اکنون از MATLAB پشتیبانی میکند، بنابراین به کاربر امکان دسترسی به ابزارهای پیشرفته تجزیه و تحلیل دادهها را میدهد. کاربران می توانند داده های حسگر خود را با استفاده از چندین نمودار داخلی متلب تجسم کنند یا داده ها را در سنج ها، نمودارها یا نمودارهای سفارشی نمایش دهند.
ThingSpeak به کاربران اجازه می دهد تا داده های حسگر خود را تجزیه و تحلیل و تجسم کنند. این پلت فرم علاوه بر تجسم ساده داده های حسگر شما، دارای ویژگی های داخلی است که به شما امکان می دهد داده های خود را پردازش کنید. یعنی یکپارچه سازی، تبدیل، محاسبه داده های جدید و توسعه برنامه های کاربردی اینترنت اشیا. ابزارهای بیشتر تبادل داده بین ThingSpeak و برنامه های وب یا پلتفرم های رسانه های اجتماعی را امکان پذیر می کنند.
ارسال اطلاعات به ThingSpeak
- یک حساب کاربری در ThingSpeak ایجاد کنید.
- از آنجایی که قرار است دادههای دما و رطوبت را ثبت کنیم، یک کانال جدید با دو فیلد ایجاد کنید – دما و رطوبت.
- کلید WRITE API را دریافت کنید. ما برای نوشتن داده ها در کانال ThingSpeak خود به آن نیاز داریم.
ارسال دادههای حسگر به کانال ThingSpeak نسبتاً آسان است. تنها چیزی که نیاز داریم کلید API نوشتن کانال و مقادیر حسگر است. برای این آموزش، از آنجایی که قرار است دو متغیر (دما و رطوبت) ارسال کنیم، باید دو فیلد داشته باشیم field1 و field2. سپس، همه این متغیرها را در یک URL واحد قرار میدهیم، که میتوانیم آن را با تایپ کردن در یک مرورگر وب ارسال کنیم:
https://api.thingspeak.com/update?api_key=drminls2dn88g1ez&field1=4&field2=4
راه دیگر ارسال این URL از طریق دستگاه هایی است که می توانند از دستورات AT استفاده کنند. اینها دستورالعمل هایی هستند که میکروکنترلر ها یا هر وسیله امبدد برای کنترل هر فرستنده سازگار با AT استفاده می کنند.
تبدیل داده های سنسور به نمودار در ThingSpeak
در این مقاله اشاره کردیم که میتوانیم از ThingSpeak برای جمعآوری، تجسم و تجزیه و تحلیل دادههای حسگر خود استفاده کنیم. اکنون که داده های خود را از سنسور DHT22 جمع آوری کرده ایم، باید آن را تجسم کنیم. ThingSpeak به ما این امکان را می دهد که از نمودارهای تجسم داخلی استفاده کنیم یا طرح های سفارشی خود را ایجاد کنیم. در این بخش از کد متلب زیر برای ایجاد نمودار تجسم خود استفاده می کنیم. برای مقایسه، تغییرات دما و تغییرات رطوبت را در همان نمودار ترسیم می کنیم.
برای ترسیم نمودار دادههای حسگر خود در ThingSpeak، روی تب visualization MATLAB کلیک کنید و custom radio button را انتخاب کنید. شما به یک ویرایشگر آنلاین هدایت خواهید شد. کد متلب زیر را کپی و پیست کنید تا یک نمودار تجسم سفارشی ایجاد کنید.
readChannelID = 1109284; fieldID1 = 1; fieldID2 = 2; readAPIKey = 'BYW217LCLBT8UCSA'; [data1, time1] = thingSpeakRead(readChannelID, 'Field', fieldID1, 'NumPoints', 30, 'ReadKey', readAPIKey); [data2, time2] = thingSpeakRead(readChannelID, 'Field', fieldID2, 'NumPoints', 30, 'ReadKey', readAPIKey); yyaxis left; plot(time1, data1,'-*','LineWidth',2) ytickformat('%.2f') ylabel('Temperature [^0C]') xlabel('Date') yyaxis right; plot(time2, data2,'-o','LineWidth',2); ytickformat('%.2f') ylabel('Humidity [%]') legend({'Temperature','Humidity'},'Location', 'northwest') grid on
در کد متلب برای تجسم داده های حسگر خود، اولین چیزی که نیاز داریم این است که داده ها را از کانال خود بخوانیم. بنابراین برای آن، باید شناسه کانال را به برنامه با کد readChannelID = 1109284 ارسال کنیم.
سپس کلید خواندن API را به برنامه خود منتقل می کنیم readAPIKey = ‘BYW217LCLBT8UCSA’. این کلید API برنامه را قادر می سازد تا داده های دما را از کانال ما بخواند.
سپس، تابعی می نویسیم که داده ها را از کانال ما بازیابی می کند و آن اطلاعات را در دو متغیر ذخیره می کند: متغیر دما (data1) و متغیر تاریخ (time1). این تابع تابع ()textSpeakRead نامیده می شود و چهار پارامتر را می پذیرد – شناسه کانال، شناسه فیلد، تعداد نقاط و کلید خواندن
[data1, time1] = thingSpeakRead(readChannelID, ‘Field’, fieldID1, ‘NumPoints’, 30, ‘ReadKey’, readAPIKey)
در نهایت، با استفاده از تابع MATLAB (time1, data1,’-*’,’LineWidth’,2) دما را بر اساس تاریخ در یک نمودار دو بعدی رسم می کنیم از بقیه کد ها برای زیباتر جلوه دادن طرح های خود استفاده می کنیم.
نتیجه بر روی یک نمودار دو بعدی در نمودار زیر نشان داده شده است.
خط آبی نشان دهنده دما (محور y سمت چپ) و خط قرمز نشان دهنده رطوبت (محور y سمت راست) است. گزینه های ما فقط به ایجاد طرح های دو بعدی محدود نمی شود. راههای زیادی وجود دارد که میتوانیم برای ترسیم نمودار دادههای حسگر استفاده کنیم.
کد آردوینو ارسال اطلاعات سنسور به اینترنت با هشدار ایمیلی
اکنون، بیایید کارهایی را که تاکنون انجام دادهایم ترکیب کنیم تا پروژهای ایجاد کنیم که دادههای حسگر را با استفاده از Arduino Nano، DHT22 و ماژول WiFi ESP8266 در فضای ابری ثبت میکند.
اینها قطعاتی هستند که شما نیاز خواهید داشت:
- آردوینو نانو یا اونو
- ماژول وای فای ESP8266
- سنسور رطوبت و دما DHT22
- آداپتور برد بورد ESP8266
- سیم های جامپر
- منبع تغذیه برد بورد
- باتری 9 ولت
- مقاومت 100 اهم
- مقاومت 250 اهم
- مقاومت 10 کیلو اهم
و در اینجا مدار کامل را مشاهده میکنید.
در مرحله بعد، از کد زیر برای آردوینو استفاده می کنیم تا با استفاده از ماژول WiFi ESP8266، داده های حسگر را به فضای ابری ارسال کنیم.
#include <SoftwareSerial.h> #define RX 2 #define TX 3 #include "DHT.h" #define DHTPIN 6 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); String AP = "AndroidAP_7822"; String PASS = "485088c2825f"; String API = "DRMINLS2DN88G1EZ"; String HOST = "api.thingspeak.com"; String PORT = "80"; String field1 = "field1"; String field2 = "field2"; int countTrueCommand; int countTimeCommand; boolean found = false; float TempSensor = 1; float HumidSensor = 1; SoftwareSerial esp8266(RX,TX); void setup() { Serial.begin(9600); esp8266.begin(9600); dht.begin(); delay(1000); sendCommand("AT",5,"OK"); sendCommand("AT+CWMODE=1",5,"OK"); sendCommand("AT+CWJAP=\""+ AP +"\",\""+ PASS +"\"",20,"OK"); } void loop() { TempSensor = getTempData(); HumidSensor = getHumidData(); String getData = "GET /update?api_key="+ API +"&"+ field1 +"="+String(TempSensor)+"&"+ field2 +"="+String(HumidSensor); sendCommand("AT+CIPMUX=1",5,"OK"); sendCommand("AT+CIPSTART=0,\"TCP\",\""+ HOST +"\","+ PORT,15,"OK"); sendCommand("AT+CIPSEND=0," +String(getData.length()+4),4,">"); esp8266.println(getData);delay(1500);countTrueCommand++; sendCommand("AT+CIPCLOSE=0",5,"OK"); } float getTempData(){ delay(2000); float t = dht.readTemperature(); if (isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return 0; } return t; } float getHumidData(){ delay(2000); float h = dht.readHumidity(); if (isnan(h)) { Serial.println("Failed to read from DHT sensor!"); return 0; } return h; } void sendCommand(String command, int maxTime, char readReplay[]) { Serial.print(countTrueCommand); Serial.print(". at command => "); Serial.print(command); Serial.print(" "); while(countTimeCommand < (maxTime*1)) { esp8266.println(command);//at+cipsend if(esp8266.find(readReplay))//ok { found = true; break; } countTimeCommand++; } if(found == true) { Serial.println("OK"); countTrueCommand++; countTimeCommand = 0; } if(found == false) { Serial.println("Fail"); countTrueCommand = 0; countTimeCommand = 0; } found = false; }
شما باید در خطوط زیر نام و رمز وای فای خود را جایگزین کنید.
String AP = “AndroidAP_7822”;
String PASS = “485088c2825f”;
TempSensor = getTempData(); HumidSensor = getHumidData();
توابعی برای بدست آوردن اطلاعات دما و رطوبت از DHT22 هستند.
خط مهم در زیر آورده شده است:
String getData = “GET /update?api_key=”+ API +”&”+ field1 +”=”+String(TempSensor)+”&”+ field2+”=”+String(HumidSensor);
این خط به آردوینو دستور میدهد چطور این URL را ارسال کند.
https://api.thingspeak.com/update?api_key=drminls2dn88g1ez&field1=4&field2=4
نتیجه در تصویر زیر نشان داده شده است:
اگر در مورد هر چیزی سوالی دارید، در زیر نظر خود را بنویسید!
سلام
دو سوال داشتم: 1. من از ماژول GSM SIM800L V2 به جای ESP 8266 استفاده میکنم، چه تغییری در کدهای آردوئینو باید ایجاد کنم؟
2. از اونجایی که پلتفورم ThingSpeak تو ایران سرویس نداره و ما باید با فیلتر شکن وارد بشیم، آیا برای ارسال داده به آن با سیمکارت همراه اول مشکل ایجاد میشود؟
سلام لطفا روش انتقال اطلاعات به Local Web Server از طریق Ethernet رو هم بفرمائید.
با سلام، متشکرم از سایت خیلی خوبتون.
با توجه به تحریم و فیلترینگ شدید کشور، آیا جایگزین دیگری با سرور در ایران برای پلتفرم Thingspeak وجود داره؟
سلام عزیز
سرور آدافروت که در دوره اینترنت اشیا آموزش داده شده است در حال حاضر با اپراتور ها در دسترس هست.