آموزش آردوینو اینترنت اشیا IOT برد ESP8266 برد ویموس Wemos

مانیتورینگ دما محیط با سنسور Ds18b20 و نمایش گرافیکی با ESP-DASH

نوشته شده توسط CiferTech

سنجش دمای محیط با سنسورها و سناریوهای مختلفی قابل اجرا است. برای نمایش گرافیکی و RealTime در این پروژه از کتابخانه ESP-Dash استفاده می‌کنیم. با استفاده از سنسور Ds18b20 و همچنین برد Wemos که از تراشه وای‌فای ESP8266 استفاده می‌کند، اقدام به مانیتورینگ دما با ESP-Dash بصورت گرافیکی خواهیم کرد. همچنین در صورت نیاز قادر خواهیم بود تعداد سنسورهای دما را افزایش داده و بصورت همزمان اقدام به مانیتورینگ آن‌ها بکنیم. در این آموزش یاد می‌گیرد که چطور به سریع ترین و آسان ترین روش اقدام به راه‌اندازی یک وب سرور و همچنین یک دشبورد iot برای مانیتورینگ دما کنید. این کتابخانه علاوه بر سریع بودن در راه‌اندازی، بهینه طراحی شده پس می‌توانید با خیال راحت اقدام به مانیتورینگ دیتا از طریق وب سرور ایجاد شده با esp-dash کنید. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 

پروژه ESP-Dash با سنسور DS18B20 و برد ویموس Wemos - دیجی اسپارک

 


سنسور دما Ds18b20


سنسورها در انواع مختلف با کاربری‌های مختلف طراحی و تولید میشود. سنسورهای تک سیمه یا همان oneWire نوعی پرکاربرد در انواع صنایع هستند. سنسور DS18B20 با اینکه سه رشته سیم دارد ولی در دسته تک سیمه‌ها قرار می‌گیرد. به این دلیل که این سنسور فقط با یک سیم کلیه اطلاعات را ارسال می‌کند و چندین سنسور هم با یک پایه از میکروکنترلر می‌توانند ارتباط برقرار کنند. سنسور دما Ds18b20 با رنج اندازه‌گیری دما بین ۱۲۵+ تا ۵۵- درجه سانتیگراد و ولتاژ کاری ۵ ولت از سنسور های پر استفاده در زمینه اندازی‌گیری دما بشمار می‌رود. از ویژگی‌های مهم این سنسور می‎‌توان به قابلیت ارسال دیتا تنها از یک پین اشاره کرد. در ادامه می‌توان با استفاده از کد ۶۴ بیتی مختص به هر سنسور مقادیر آن ها را تنها از یک ورودی در میکروکنتلر اندازه‌گیری کرد. به عبارتی قابلیت اتصال چند سنسور DS18b20 به صورت همزمان از یک پایه وجود دارد. همچنین این سنسور ضد آب بوده پس می‌توان در شرایط مختلف از آن استفاده کرد.

 


شناخت ESP.DASH


بستری برای ساخت رابط کاربری مبتنی بر بردهای ESP است. به عبارتی ESP-DASH یک کتابخانه بر پایه زبانه ++C است که برای ایجاد دشبوردهای کاربردی و realTime برای میکروکنترلرهای ESP8266 و ESP32 است. استفاده از توابع استفاده از این کتابخانه را برای شما آسان می کند و به شما امکان می دهد دشبوردی را که از طریق آدرس IP ماژول قابل دسترسی است ایجاد کنید. این کتابخانه به کاربر این امکان را خواهد داد که با استفاده از توابعی از پیش تعیین شده اقدام به راه‌اندازی وب سرور و همچنین یک دشبورد با افزونه های گرافیکی برای مانیتورینگ مقادیر را خواهد داد. شما قادر خواهید بود با توجه به نوع دیتای ورودی روش نمایش این مقادیر را تغییر دهید، برای مثال تنها مقادیر را بصورت اعداد و حروف نمایش دهید یا یک گراف با نسبت های مختلف مانند زمان و مقادیر بدست آمده نمایش دهید.
شناخت ESP-Dash در برد ESP - دیجی اسپارک

 برد Wemos


برد Wemos یکی از پرطرافدار ترین برد هایی است که در زمینه iot مورد استفاده قرار میگیرد، یکی از مزیت های این برد نسبت به برد هایی مانند Node MCU اندازه کوچک آن می باشد تراشه وای فای مورد استفاده در این برد ESP8266 می باشد. از دیگر مزیت های این برد وجود شیلد های مختلفی برای این برد می باشد، که انجام هر پروژه ای را برای کاربر بسیار آسان و لذت بخش می کند، شیلد هایی از جمله شیلد باتری، multi sensor ، DHT22 ، رله ، oled تعداد بسیار زیادی شیلد برای این برد توسعه داده شده که در نتیجه تجربه خوبی از iot برای شما به جا خواهد گذاشت.

 


پروژه مانیتورینگ دما با ESP-Dash


در این آموزش ابتدا یک وب سرور با استفاده از ESp.Dash خواهیم ساخت و ابزار های GaugeChart و LineChart را به محیط وب سرور خود اضافه می‌کنیم. سپس مقادیر خروجی سنسور ds18b20 را تحلیل و به وب سرور ارسال تا در صفحه وب نمایش داده شود. در ادامه با استفاده از سریال مانیتور نرم افزار Arduino IDE قادر خواهیم بود ip مورد نیاز برای دسترسی به وب پیج را بدست آوریم.

پروژه نمایش دما با سنسور DS18B20 و ESP.Dash - دیجی اسپارک

 


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


برد wemos

سنسور دما Ds18b20

کابل جامپر مخصوص اتصالات سنسور و بردها

 


کتابخانه مورد نیاز


در این آموزش از دو کتابخانه Ds18b20 و oneWire استفاده خواهیم کرد، مراحل زیر را برای نصب کتابخانه ها دنبال کنید.

  1. این مسیر را دنبال کنید Sketch Include Library > Manage Libraries
  2. کلمه Ds18b20 و oneWire را جستجو کنید.
  3. کتابخانه را نصب کنید.

نصب کتابخانه one Wire در آردوینو - دیجی اسپارک

نصب کتابخانه DS18B20 در آردوینو - دیجی اسپارک

 


نحوه نصب ESP.DASH


برای دسترسی به کتابخانه ESP.DASH دو روش وجود؛ اول اینکه با مراجعه به سایت رسمی اقدام به فایل zip. کنید بصورت دستی آن را به نرم‌افزار Arduino IDE اضافه کنید. و روش دوم که به شخصه پیشنهاد میکنم استفاده از نسخه ای است که در هنگام نصب افزونه ESPبه آردوینو بصورت پیشفرض اضافه خواهد، پس برای استفاده از امکانات این کتابخانه با استفاده از مراحل زیر اقدام نصب افزونه مرجع برد ESP کنید.

  • ابتدا در نرم افزار Arduino IDE به مسیر FilePreferences بروید.
  • لینک زیر را در بخش مشخص شده قرار دهید.

وب سرور ESP32 با Arduino IDE کنترل نور LED

  • سپس به مسیر Tools > Board > Boards Manager بروید.

تنظیمات Arduino IDE برای راه اندازی وب سرور ESP32

  • در بخش board manager  کلمه ESP32 و ESP8266 را سرچ کنید و بر روی install  کلیک کنید.

نصب کتابخانه ESP32 در نرم افزار آردوینو ساخت وب سرور

 


شماتیک و اتصالات


در اولین بخش برای راه‌اندازی پروژه اقدام برقراری اتصالات بین سنسور دما Ds180b20 و برد Wemos خواهیم کرد، از آنجایی که تراشه اصلی برد Wemos است در نتیجه می‌توانیم در صورت نیاز برای راه‌اندازی از برد های nodemcu نیز استفاده کنیم. اتصالات را مطابق جدول و شماتیک زیر برقرار کنید.

اتصالات پروژه مانیتورینگ دما با ESP-Dash - دیجی اسپارک

  • شماتیک اتصالات پروژه مانیتورینگ دما با 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 را یک کتابخانه بهینه برای مصارفی مانند مانیتورینگ دیتا در وب‌سرور با قابلیت ساخت دشبوردی کاملا گرافیکی نامید، که با توابع تعریف شده در این کتابخانه قادر خواهیم بود در کمترین زمان ممکن اقدام به راه‌اندازی وب سرور و دشبوردی با ظاهری زیبا و کارکرد مناسب کنیم.

 

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

CiferTech

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

۳ دیدگاه

  • سلام.وقت بخیر بنده میخوام ی دماسنج دیجیتال از روی اموزش های جنابعالی بسازم…
    لطفا تا اخر راهنماییم کنین…خیلی هم حرفه ای نیستم…
    اگه ممکنه بفرمایین که تمام وسایل مورد نیاز شما دارین برا تهیه ؟ و هرینه هاش چقدر هست ؟
    اگه ++c ایرادی باشه رفع کنین… و

    • با سلام خیلی ممنونم،
      برای این موارد لطفا از طریق تیکت های سایت دانشجو کیت اقدام کنید تا راهنمایی دقیقی ارائه شود.