همواره اندازهگیری دمای محیط با بردها و سنسورهای مختلف پرطرفدار بوده و در کل از پروژه های محبوب میباشد. اما این بار تصمیم گرفتم یک پله جلو تر برویم و یک دماسنج IoT چند کاره با امکان نمایش مقادیر دما و رطویت در نمایشگر Oled ssd1306 و همچنین ارسال دیتا به دشبورد thingspeak بسازیم. در واقع همزمان که دیتا تحلیل شده و مقادیر رطوبت و دما در نمایشگر Oled نمایش داده میشود و در ادامه این مقادیر به سمت سرور های کلاود thingspeak ارسال شده و مقادیر بصورت عددی و گراف هایی به نسبت زمان و مقادیر نمایش داده خواهند شد.
سنسور DHT21 یا AM2301
سنسور دما دیجیتال DHT21 یکی از رایج ترین سنسورهای دما از سری سنسور های DHT است و دارای دقت اندازه گیری درجه حرارت نسبتاً بالای ۰٫۵ درجه سانتیگراد است و همچنین این اندازه گیری با دقت ۰٫۱ درجه سانتیگراد با دقت رطوبت نسبی ۳ درصد. این سنسور فقط از ۳ سیم برای راهاندازی استفاده می کند که دو پین برای تغذیه و یک پین دیتای دما و رطوبت را در اختیار ما قرار میدهد. یعنی فقط یک پایه دیجیتال برای اتصال به یک میکروکنترلر مورد نیاز است. این سنسور از ۳٫۳-۵V DC برای تغذیه استفاده میکند به همین دلیل میتوانید براحتی از میکروکنترل های مختلف تغذیه این سنسور را فراهم کنید. این سنسور برای اندازه گیری رطوبت از خازن رطوبت پلیمر استفاده میکند. رنج محاسبه رطوبت در این سنسور ۰-۱۰۰%RH و همچنین رنج اندازهگیری دما -۴۰~۸۰Celsius است. دقت اندازهگیری این سنسور ها بر اساس دیتاشیت های موجد برای اندازهگیری رطوبت ۰٫۱%RH و برای اندازه گیری دما ۰٫۱Celsius معرفی شده.
برد Wemos وای فای
برد Wemos یکی از پرطرافدار ترین برد هایی است که در زمینه iot مورد استفاده قرار میگیرد، یکی از مزیت های این برد نسبت به برد هایی مانند Node MCU اندازه کوچک آن می باشد تراشه وای فای مورد استفاده در این برد ESP8266 می باشد. از دیگر مزیت های این برد وجود شیلد های مختلفی برای این برد می باشد، که انجام هر پروژه ای را برای کاربر بسیار آسان و لذت بخش می کند، شیلد هایی از جمله شیلد باتری، multi sensor ، DHT22 ، رله ، oled تعداد بسیار زیادی شیلد برای این برد توسعه داده شده که در نتیجه تجربه خوبی از iot برای شما به جا خواهد گذاشت. در پروژه کنترل سرو موتور با ژایرو برد ویموس به عنوان گیرنده و انتقال دیتا به سرو موتور عمل میکند.
ماژول نمایشگر Oled SSD1306
معمولا در پروژه های اینترنت اشیا و دیگر پروژه های امبدد از برای نمایش متن و مقادیر مختلف از نمایشگر های Oled استفاده می شود، این ماژول ها بدر انواع مختلق بسته به نوع درایور اندازه یافت می شوند که یکی از پرطرفدار ترین آن ها SSD1306 می باشد، این نوع از Oled ها معمولا در اندازه های ۰٫۹۶ و ۱٫۳ اینچ ساخته می شوند همچنین پروتکل ارتباطی Oled ها I2C می باشد. صفحه نمایش دیود ساطع کننده نور (OLED) که ما در این آموزش استفاده خواهیم کرد مدل SSD1306 است، یک صفحه نمایش تک رنگ، ۰٫۹۶ اینچی با ۱۲۸ × ۶۴ پیکسل همانطور که در شکل زیر نشان داده شده است. نمایشگر OLED نیازی به نور پس زمینه ندارد، که نتیجه آن ایجاد تضاد بسیار خوب در محیط های تاریک است. همچنین پیکسل های آن فقط هنگام روشن بودن انرژی مصرف می کنند، بنابراین صفحه نمایش OLED در مقایسه با سایر نمایشگرها، مصرف برق کمتری دارد.
پلتفرم اینترنت اشیا ThingSpeak
پلتفرم ThingSpeak یک برنامه open source اینترنت اشیا و API برای ذخیره و بازیابی اطلاعات از طریق پروتکل های HTTP و MQTT با اینترنت و یا با استفاده از شبکه محلی است. Thingspeak به شما امکان می دهد داده های سنسور ها را جمع آوری، ذخیره کنید و تجزیه و تحلیل کنید، همچنین با استفاده از امکانات موجود در دشبورد IOT این سایت می توانیم نمودار هایی بر اساس مقادیر بدست آمده رسم کنیم. ThingSpeak یک سرویس پلتفرم تجزیه و تحلیل اینترنت اشیا است که به شما امکان می دهد جریان های داده زنده را در کلاود جمع آوری، تجسم و تجزیه و تحلیل کنید. می توانید از طریق دستگاه های خود داده ها را به ThingSpeak ارسال کنید، ایجاد تصویری فوری از داده های زنده و با استفاده از سرویس های وب مانند Twitter و Twilio هشدار ارسال کنید. ThingSpeak مهندسان و دانشمندان را قادر می سازد تا نمونه های اولیه و ساخت سیستم های اینترنت اشیا را بدون تنظیم سرورها یا توسعه نرم افزارهای وب ایجاد کنند.
روش کار پروژه
در پروژه دماسنج IoT با پلتفرم اینترنت اشیا ThingSpeak و سنسور AM2301 با استفاده از سه قطعه که عبارت است از نمایشگر oled برای نمایش مقادیر دما و رطوبت، سنسور AM2301 یا DHT21 برای بدست آوردن مقادیر دما و رطوبت محیط و برد وای فای esp8266 با برد راهانداز Wemos تا مقادیر را با اتصال به اینترنت خانه یا محل کار به سمت سرور های Thingspeak ارسال کنیم تا در نهایت بتوانیم این مقادیر را در دشبورد iot خود نمایش دهیم. همچنین در ادامه این قابلیت برای دشبورد iot ما وجود دارد تا با استفاده از لینکی مخصوص برای عموم نمایش داده شود، که از این مورد می توانیم برای ارائه مقادیر اندازه گیری شده در هر پروژه در مواقع مختلف استفاده کنیم.
وسایل موردنیاز
برد Wemos
سنسور AM2301
نمایشگر Oled
راه اندازی دشبورد ThingSpeak
ابتدا به آدرس thingspeak.com مراجعه کنید و یک یک اکانت جدید ایجاد کنید، سپس در قسمت Channels و در ادامه مانند تصویر زیر New Channel، اقدام به ساخت یک چنل یا دشبورد کنید.
این بخش در آموزش های قبلی توضیح داده شد، برای مشاهده کامل این بخش و همچنین آموزش دریافت API به این آموزش مراجعه کنید.
شماتیک و اتصالات
در مدار این پروژه از سه پایه دیجیتال در برد ESP8266 استفاده میکنیم که دو مورد وظیفه ارتباط i2c برای نمایشگر Oled را دارند و یک مورد دیگر وظیفه دریافت مقادیر دما و رطوبت از پین data سنسور AM2301 را دارد. همچنین برای تغذیه هردو برد یعنی سنسور AM2301 یا DHT21 و نمایشگر Oled از پین ۵v در برد Wemos استفاده خواهیم کرد. اتصالات را مطابق جدول و شماتیک زیر برقرار کنید.
-
شماتیک اتصالات پروژه ساخت دماسنج iot با ThingSpeak و AM2301
کد و راهاندازی مدار
در کدهای پروژه دماسنج IoT طبق روال ابتدا کتابخانه های مورد نیاز را فراخوانی خواهیم کرد، از کتابخانه های SPI , Wire , Adafruit_GFX , Adafruit_SSD1306 برای راهاندازی Oled استفاده خواهیم کرد. و همچنین برای راهاندازی وای فای برد ESP8266 از ESP8266WiFi استفاده خواهیم کرد و در ادامه برای راهاندازی و استفاده از توابعی آسان برای راهاندازی سنسور دما و رطوبت DHT21 در کتابخانه DHT.h استفاده خواهیم کرد.
#include <SPI.h> //فراخوانی کتابخانه های مورد نیاز #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <DHT.h> #include <ESP8266WiFi.h>
در ادامه باید ورودی هایی به کد ارائه دهیم در قالب متغیر هایی که در ادامه کد استفاده خواهد شد. نام و پسوورد شبکه وای فای ما در SSID و PASS ذخیره خواهد شد، همچنین قبل تر API را دریافت کردیک که اینجا با عنوان API در کد ذخیره میشود تا بعد تر آن را فراخوانی و استفاده کنیم. همچنین آدرس سرور که از سمت سایت Thingspeak ارائه میشود را در این بخش تعریف خواهیم کرد.
String apiKey = "MOF12ZGK61DKYH08"; // کد بدست آمده از پلتفرم اینترنت اشیا const char *ssid = "C1F3R"; //نام شبکه وای فای برای اتصال const char *pass = "314159265"; //پسوورد شبکه وای فای مدنظر const char* server = "api.thingspeak.com";
در بخش بعدی باید مواردی را برای راهاندازی اولیه سنسور dht انجام دهیم تا در مراحل بعد به مشکلی برنخوریم، در این قسمت با ایجاد متغیری پین مربوط برای سنسور dht را مشخص میکنیم و در خط بعدی با استفاده از توابع کتابخانه dht که قبل تر فراخوانی کردیم نوع سنسور و پین مربوط را در قالب نام متغیر از قبل تعریف شده معرفی می کنیم.
#define DHTPIN 2 //پین اتصال برای پایه دیتا در سنسور دما و رطوبت DHT dht(DHTPIN, DHT21); //مشخص کردن نوع سنسور مورد استفاده شده و معرفی پین اتصال
در بخش setup کد، فرمان شروع پروتکل i2c و همچنین دستور شروع خواندن مقادیر به سنسور dht داده میشود، اما مهم ترین بخش در این قسمت پاک کردن بافر oled است تا بتوانیم مقادیر را به درستی در این بخش نمایش دهیم. که تنها با چند دستور ساده انجام میشود، دستوراتی که از کتابخانه Adafruit فراخوانی خواهند شد.
display.display(); // پاک کردن بافر برای نمیش مناسب مقادیر در ادامه delay(1000); display.clearDisplay(); display.display();
کد های کامل پروژه ساخت دماسنج iot با ThingSpeak و AM2301 به شرح زیر است.
#include <SPI.h> //فراخوانی کتابخانه های مورد نیاز #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <DHT.h> #include <ESP8266WiFi.h> Adafruit_SSD1306 display = Adafruit_SSD1306(128, 32, &Wire); // مشخصکردن ابعاد نمایشگر و نوع درایور String apiKey = "MOF12ZGK61DKYH08"; // کد بدست آمده از پلتفرم اینترنت اشیا const char *ssid = "C1F3R"; //نام شبکه وای فای برای اتصال const char *pass = "314159265"; //پسوورد شبکه وای فای مدنظر const char* server = "api.thingspeak.com"; #define DHTPIN 2 //پین اتصال برای پایه دیتا در سنسور دما و رطوبت DHT dht(DHTPIN, DHT21); //مشخص کردن نوع سنسور مورد استفاده شده و معرفی پین اتصال WiFiClient client; void setup() { Serial.begin(115200); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //شروع ارتباط i2c برای نمایشگر oled display.display(); // پاک کردن بافر برای نمیش مناسب مقادیر در ادامه delay(1000); display.clearDisplay(); display.display(); delay(10); dht.begin(); //شروع محاسبه مقادیر از طرف سنسور Serial.println("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, pass); while (WiFi.status() != WL_CONNECTED) //تلاش برای اتصال به شبکه وای فای معرفی شده در بخش قبل { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); } void loop() { float h = dht.readHumidity(); //متغیر برای ذخیره مقادیر رطوبت بدست آمده float t = dht.readTemperature(); //متغیر برای ذخیره مقادیر دما بدست آمده display.setTextSize(2); display.setTextColor(SSD1306_WHITE); display.setCursor(40,10); display.print(t); // چاپ مقادیر بدست آمده مربوط به دما display.setTextSize(1); display.setCursor(0,0); display.print("Temperature:"); display.display(); display.clearDisplay(); delay(5000); display.setTextSize(2); display.setTextColor(SSD1306_WHITE); display.setCursor(40,10); display.print(h); // چاپ مقادیر بدست آمده مربوط به رطوبت display.setTextSize(1); display.setCursor(0,0); display.print("Humidity:"); display.display(); display.clearDisplay(); delay(5000); if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } if (client.connect(server,80)) //"184.106.153.149" or api.thingspeak.com { // در چند خط پایین اقدام به برقراری ارتباط با پلتفرم کرده ایم String postStr = apiKey; postStr +="&field1="; postStr += String(t); postStr +="&field2="; postStr += String(h); postStr += "\r\n\r\n"; client.print("POST /update HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Connection: close\n"); client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n"); client.print("Content-Type: application/x-www-form-urlencoded\n"); client.print("Content-Length: "); client.print(postStr.length()); client.print("\n\n"); client.print(postStr); Serial.print("Temperature: "); //پرینت مقادیر در سریال مانیتور Serial.print(t); Serial.print(" degrees Celcius, Humidity: "); Serial.print(h); Serial.println("%. Send to Thingspeak."); } client.stop(); Serial.println("Waiting..."); delay(500); yield(); }
جمع بندی
پروژه دماسنج IoT میتواند در موارد مختلفی از جمله در محیط های کاری و یا در خانه مفید باشد، پس اجرای این آموزش شما یک دما سنج با قابلیت نمایش دما و رطویت به صورت کرافیکی را دارید و همچنین میتوانید تغییرات دما را در پلتفرم iot استفاده شده یعنی Thingspeak مشاهده کنید، این پروژه را میتوان یک پروژه کامل معرفی کرد که تنها اگر دریک بسته بندی مناسب قرار بگیرد تفاوتی با دیگر وسایل هوشمند یک خانه ندارد.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام مهندس بسیار عالی من پروژه را انجام دادم و عالی بود
سلام و تشکر بابت انتشار اطلاعات خودتون. من یک پروژه دانشجویی مشابه با بورد آردوینو داشتم که مشکل اصلی من این بود که اگر بخواهم این کیت را بصورت یک ماژول بسازم نیاز دارم که اطلاعات کاربری و رمز WiFi بصورت داینامیک تنظیم و به بورد داده بشه و نتونستم راه حل مناسبی پیدا کنم. ممکنه لطفا راه حل خودتون را بفرمایید
با سلام
به آموزش زیر مراجعه کنید.
تغییر اطلاعات اتصال ماژول ESP8266 بدون اتصال کابل توسط Wifi Manager