سنجش دمای محیط با سنسورها و سناریوهای مختلفی قابل اجرا است. برای نمایش گرافیکی و RealTime در این پروژه از کتابخانه ESP-Dash استفاده میکنیم. با استفاده از سنسور Ds18b20 و همچنین برد Wemos که از تراشه وایفای ESP8266 استفاده میکند، اقدام به مانیتورینگ دما با ESP-Dash بصورت گرافیکی خواهیم کرد. همچنین در صورت نیاز قادر خواهیم بود تعداد سنسورهای دما را افزایش داده و بصورت همزمان اقدام به مانیتورینگ آنها بکنیم. در این آموزش یاد میگیرد که چطور به سریع ترین و آسان ترین روش اقدام به راهاندازی یک وب سرور و همچنین یک دشبورد iot برای مانیتورینگ دما کنید. این کتابخانه علاوه بر سریع بودن در راهاندازی، بهینه طراحی شده پس میتوانید با خیال راحت اقدام به مانیتورینگ دیتا از طریق وب سرور ایجاد شده با esp-dash کنید. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
سنسور دما Ds18b20
سنسورها در انواع مختلف با کاربریهای مختلف طراحی و تولید میشود. سنسورهای تک سیمه یا همان oneWire نوعی پرکاربرد در انواع صنایع هستند. سنسور DS18B20 با اینکه سه رشته سیم دارد ولی در دسته تک سیمهها قرار میگیرد. به این دلیل که این سنسور فقط با یک سیم کلیه اطلاعات را ارسال میکند و چندین سنسور هم با یک پایه از میکروکنترلر میتوانند ارتباط برقرار کنند. سنسور دما Ds18b20 با رنج اندازهگیری دما بین ۱۲۵+ تا ۵۵- درجه سانتیگراد و ولتاژ کاری ۵ ولت از سنسور های پر استفاده در زمینه اندازیگیری دما بشمار میرود. از ویژگیهای مهم این سنسور میتوان به قابلیت ارسال دیتا تنها از یک پین اشاره کرد. در ادامه میتوان با استفاده از کد ۶۴ بیتی مختص به هر سنسور مقادیر آن ها را تنها از یک ورودی در میکروکنتلر اندازهگیری کرد. به عبارتی قابلیت اتصال چند سنسور DS18b20 به صورت همزمان از یک پایه وجود دارد. همچنین این سنسور ضد آب بوده پس میتوان در شرایط مختلف از آن استفاده کرد.
شناخت ESP.DASH
برد Wemos
برد Wemos یکی از پرطرافدار ترین برد هایی است که در زمینه iot مورد استفاده قرار میگیرد، یکی از مزیت های این برد نسبت به برد هایی مانند Node MCU اندازه کوچک آن می باشد تراشه وای فای مورد استفاده در این برد ESP8266 می باشد. از دیگر مزیت های این برد وجود شیلد های مختلفی برای این برد می باشد، که انجام هر پروژه ای را برای کاربر بسیار آسان و لذت بخش می کند، شیلد هایی از جمله شیلد باتری، multi sensor ، DHT22 ، رله ، oled تعداد بسیار زیادی شیلد برای این برد توسعه داده شده که در نتیجه تجربه خوبی از iot برای شما به جا خواهد گذاشت.
پروژه مانیتورینگ دما با ESP-Dash
در این آموزش ابتدا یک وب سرور با استفاده از ESp.Dash خواهیم ساخت و ابزار های GaugeChart و LineChart را به محیط وب سرور خود اضافه میکنیم. سپس مقادیر خروجی سنسور ds18b20 را تحلیل و به وب سرور ارسال تا در صفحه وب نمایش داده شود. در ادامه با استفاده از سریال مانیتور نرم افزار Arduino IDE قادر خواهیم بود ip مورد نیاز برای دسترسی به وب پیج را بدست آوریم.
وسایل مورد نیاز
کابل جامپر مخصوص اتصالات سنسور و بردها
کتابخانه مورد نیاز
در این آموزش از دو کتابخانه Ds18b20 و oneWire استفاده خواهیم کرد، مراحل زیر را برای نصب کتابخانه ها دنبال کنید.
- این مسیر را دنبال کنید Sketch > Include Library > Manage Libraries
- کلمه Ds18b20 و oneWire را جستجو کنید.
- کتابخانه را نصب کنید.
نحوه نصب ESP.DASH
برای دسترسی به کتابخانه ESP.DASH دو روش وجود؛ اول اینکه با مراجعه به سایت رسمی اقدام به فایل zip. کنید بصورت دستی آن را به نرمافزار Arduino IDE اضافه کنید. و روش دوم که به شخصه پیشنهاد میکنم استفاده از نسخه ای است که در هنگام نصب افزونه ESPبه آردوینو بصورت پیشفرض اضافه خواهد، پس برای استفاده از امکانات این کتابخانه با استفاده از مراحل زیر اقدام نصب افزونه مرجع برد ESP کنید.
- ابتدا در نرم افزار Arduino IDE به مسیر File> Preferences بروید.
- لینک زیر را در بخش مشخص شده قرار دهید.
https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json
- سپس به مسیر Tools > Board > Boards Manager بروید.
- در بخش board manager کلمه ESP32 و ESP8266 را سرچ کنید و بر روی install کلیک کنید.
شماتیک و اتصالات
در اولین بخش برای راهاندازی پروژه اقدام برقراری اتصالات بین سنسور دما Ds180b20 و برد Wemos خواهیم کرد، از آنجایی که تراشه اصلی برد Wemos است در نتیجه میتوانیم در صورت نیاز برای راهاندازی از برد های nodemcu نیز استفاده کنیم. اتصالات را مطابق جدول و شماتیک زیر برقرار کنید.
- شماتیک اتصالات پروژه مانیتورینگ دما با ESP-Dash سنسور Ds18b20 با ESP-DASH توجه داشته باشید که سنسور DS18B20 در دو مدل موجود است. از اینرو حتما پایهها را با دیتاشیت تطبیق دهید.
کد و راهاندازی
در بخش دوم از راهاندازی نوبت به کد های پروژه میرسد که ابتدا بخش های مهمی از آن را بررسی خواهیم کرد، این کد از دو بخش کلی تشکیل یک بخش مربوط به جمع آوری و تحلیل دیتای دمای محیط به سنسور دما Ds18b20 است و بخش دوم مربوط به راهاندازی ESP.DASH و مانیتورینگ دیتای بدست آمده از قبل است. در این دستور کوتاه اقدام به مشخص کردن پین مربوط به خواندن دیتای سنسور کردهایم که در این سناریو ما مقدار ۲ را مشخص کرده به معنای GPIO2 که در استاندارد برد راهانداز پین D4 است.
OneWire ds(2);
در این بخش اقدام به معرفی شبکه وایفای مورد نظر با وارد ssid و پسوورد خواهیم کرد.
const char* ssid = "C1F3R"; // شبکه وای فای SSID const char* password = "314159265"; // پسوورد شبکه وای فای
در این چهار خط مقادیر قابل نمایش گرافیکی برای محور های x و y در صفحه وب را مشخص میکنیم.
int x_axis_size = 16; int x_axis[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; int y_axis_size = 7; int y_axis[7] = {2, 5, 10, 12, 18, 8, 5};
در نهایت برای بدست آوردن مقدار دما محیط بر اساس سلسیوس و فارنهایت از دو خط زیر استفاده کردهایم.
celsius = (float)raw / 16.0; // محاسبه دما سلسیوس و فارنهایت fahrenheit = celsius * 1.8 + 32.0;
کد کامل پروژه مانیتورینگ دما با ESP-Dash سنسور Ds18b20 با ESP-DASH
#include <Arduino.h> #include <ESP8266WiFi.h> #include <ESPAsyncTCP.h> #include <ESPAsyncWebServer.h> #include <ESPDash.h> #include <OneWire.h> OneWire ds(2); // پین خواندن دیتا برای سنسور AsyncWebServer server(80); const char* ssid = "C1F3R"; // شبکه وای فای SSID const char* password = "314159265"; // پسوورد شبکه وای فای byte i; byte present = 0; byte type_s; byte data[12]; byte addr[8]; float celsius, fahrenheit; // مقادیر لاین های x و y int x_axis_size = 16; int x_axis[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; int y_axis_size = 7; int y_axis[7] = {2, 5, 10, 12, 18, 8, 5}; void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); if (WiFi.waitForConnectResult() != WL_CONNECTED) { Serial.printf("WiFi Failed!\n"); return; } Serial.print("IP Address: "); Serial.println(WiFi.localIP()); ESPDash.init(server); // راه اندازی وب سرور // اضفه کردن مقادیر صفحه وب ESPDash.addLineChart("chart1", "DS18b20", x_axis, x_axis_size, "TEMP", y_axis, y_axis_size); ESPDash.addGaugeChart("chart2", "DS18b20", 30); server.begin(); } void loop() { if ( !ds.search(addr)) { Serial.println("No more addresses."); Serial.println(); ds.reset_search(); delay(250); return; } Serial.print("ROM ="); for( i = 0; i < 8; i++) { Serial.write(' '); Serial.print(addr[i], HEX); } if (OneWire::crc8(addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return; } Serial.println(); switch (addr[0]) { case 0x10: Serial.println(" Chip = DS18S20"); type_s = 1; break; case 0x28: Serial.println(" Chip = DS18B20"); type_s = 0; break; case 0x22: Serial.println(" Chip = DS1822"); type_s = 0; break; default: Serial.println("Device is not a DS18x20 family device."); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); delay(1000); present = ds.reset(); ds.select(addr); ds.write(0xBE); Serial.print(" Data = "); Serial.print(present, HEX); Serial.print(" "); for ( i = 0; i < 9; i++) { data[i] = ds.read(); Serial.print(data[i], HEX); Serial.print(" "); } Serial.print(" CRC="); Serial.print(OneWire::crc8(data, 8), HEX); Serial.println(); int16_t raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); if (cfg == 0x00) raw = raw & ~7; else if (cfg == 0x20) raw = raw & ~3; else if (cfg == 0x40) raw = raw & ~1; } celsius = (float)raw / 16.0; // محاسبه دما سلسیوس و فارنهایت fahrenheit = celsius * 1.8 + 32.0; Serial.print(" Temperature = "); Serial.print(celsius); Serial.print(" Celsius, "); Serial.print(fahrenheit); Serial.println(" Fahrenheit"); ESPDash.updateLineChart("chart1", x_axis, x_axis_size, y_axis, y_axis_size); ESPDash.updateGaugeChart("chart2", celsius); delay(2000); ESPDash.updateGaugeChart("chart2", fahrenheit); delay(2000); for(int i=0; i < 7; i++){ y_axis[i] = float(celsius); x_axis_size = int(i); } }
جمع بندی
در نهایت با استفاده از ESP.DASH که یک کتابخانه برای راهاندازی هرچه آسان تر و سریع تر وب سرور برای مانیتورینگ دیتا است، توانستیم یک پروژه دیگر را نیز راهاندازی کنیم، همچنین میتوانید با استفاده از این کد و تغییر مقادیر، دیتا مختلفی را با راهاندازی یک وب سرور ساده ماینتور کنید. در آخر میتوانیم esp-dash را یک کتابخانه بهینه برای مصارفی مانند مانیتورینگ دیتا در وبسرور با قابلیت ساخت دشبوردی کاملا گرافیکی نامید، که با توابع تعریف شده در این کتابخانه قادر خواهیم بود در کمترین زمان ممکن اقدام به راهاندازی وب سرور و دشبوردی با ظاهری زیبا و کارکرد مناسب کنیم.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
منظور از دش چیه با خوندن آموزش هنوز متوجه نشدم!
مخفف دشبورد است. صفحه ای که تمام مقادیر در آن نمایش داده میشود.
سلام.وقت بخیر بنده میخوام ی دماسنج دیجیتال از روی اموزش های جنابعالی بسازم…
لطفا تا اخر راهنماییم کنین…خیلی هم حرفه ای نیستم…
اگه ممکنه بفرمایین که تمام وسایل مورد نیاز شما دارین برا تهیه ؟ و هرینه هاش چقدر هست ؟
اگه ++c ایرادی باشه رفع کنین… و
با سلام خیلی ممنونم،
برای این موارد لطفا از طریق تیکت های سایت دانشجو کیت اقدام کنید تا راهنمایی دقیقی ارائه شود.