آردوینو آموزش آردوینو اینترنت اشیا IOT برد Esp32 برد ESP8266 برد Nodemcu

وب سرور ESP32: مانیتورینگ دما رطوبت با سنسور DHT22

وب سرور ESP32: مانیتورینگ دما با سنسور DHT22
نوشته شده توسط CiferTech

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

وب سرور ESP32: مانیتورینگ دما با سنسور DHT22

 


برد ESP32 مدل NodeMCU


تراشه ESP32 نسل پیشرفته ESP8266 است. یکی از تفاوت‌های آن بلوتوث داخلی‌اش است. همچنین دارای هسته وایفای ۲,۴ گیگا هرتزی و بلوتوث داخلی تولید شده با تکنولوژی ۴۰ نانومتری شرکت TSMC است. این ماژول دارای بهترین پرفورمنس در مصرف انرژی بوده و با کمترین مصرف انرژی بهترین نتیجه را برای ما به همراه دارد. اگر بخواهیم دقیق‌تر به این برد نگاه کنیم باید بگوییم، یک chip است که پلتفرم NodeMCU در اون پیاده سازی شده که به این نوع چیپ‌ها System on a chip microcontrollers هم گفته می‌شود. دارای چندین پایه GPIO برای ارتباط با سخت افزارهای مختلف است. در زیر نمایی از این برد خارق العاده را مشاهده می‌کنید.

وب سرور ESP32: مانیتورینگ دما با سنسور DHT22

 


سنسور دما رطوبت DHT22


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

برخی از ویژگی‌های سنسور دما رطوبت DHT22

  • ولتاژ عملیاتی ۳ تا ۵ ولت
  • مناسب برای رطوبت ۰ تا ۱۰۰% همچنین با دقت ۲ تا ۵%
  • حداکثر جریان مصرفی ۲٫۵ میلی آمپر
  • مناسب برای دمای ۴۰- تا ۱۲۵ درجه سانتی گراد

وب سرور ESP32: مانیتورینگ دما با سنسور DHT22

 


سنسور دما رطوبت DHT11


سنسور دما و رطوبت DHT11 سنسوری ارزان قیمت جهت اندازه گیری دما و  رطوبت هوا است. اندازه، مصرف کم انرژی آن را به یکی از بهترین گزینه‌ها جهت استفاده در پروژه‌های مختلف، تبدیل کرده است. با توجه به خروجی دیجیتال این سنسور، به راحتی می تواند به سایر میکروکنترلر ها متصل گردد.  سنسور DHT11 کالیبره شده و دارای خروجی دیجیتال است. محدوده اندازه گیری رطوبت بین ۲۰ تا ۹۰% RH و محدوده‌ی دما از ۰ تا ۵۰ درجه سانتی گراد می‌باشد. ولتاژ کاری ماژول DHT بین ۳٫۳ تا ۵ ولت DC است. فاصله انتقال سیگنال در ماژول DHT11 تا ۲۰ متر می‌باشد. ماژول دما و رطوبت DHT11 بسیار مقرون به صرفه، دارای کیفیت‌ عالی و واکنش سریع نسبت به تغییر دمای محیط است. ماژول DHT11 به ترتیب دارای ۳ پایه GND, VCC, Signal می‌باشد.

وب سرور ESP32: مانیتورینگ دما با سنسور DHT22

 


قطعات و شماتیک


برای راه اندازی مانیتورینگ دما رطوبت با سنسور DHT بایستی اتصالاتی مانند شماتیک زیر بین برد و سنسور برقرار کنید. در این مدار از nodemcu ESP32 و همچنین از سنسور DHT22 استفاده می شود. لازم به ذکر است با تغییر کد می توانیم از DHT11 نیز در این آموزش استفاده کنیم. در ماژول DHT22 پایه Data به GPIO 27 در nodeMCU متصل می شود و همچنین پایه VCC به ۳V و GND به GND متصل می گردد.

 


پیش نیازهای مانیتورینگ دما رطوبت


در این آموزش از برد ESP32 استفاده می کنیم، در ادامه مراحل را برای نصب این برد در نرم افزار آردوینو دنبال کنید:

  • ابتدا در نرم افزار Arduino IDE به مسیر FilePreferences بروید.

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

  • لینک زیر را در بخش مشخص شده قرار دهید.

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

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

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

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

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

 


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


ابتدا در نرم افزار Arduino IDE اقدام به نصب نرم افزار مرجع سنسور های DHT می پردازیم. مراحل زیر را دنبال کنید:

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

روش نصب کتابخانه در Arduino IDE

نصب کتابخانه DHT در آردوینو

در ادامه از این لینک کتابخانه Adafruit Unified Sensor را دانلود، و طبق مراحل زیر پیش بروید.

  • ابتدا به مسیر Sketch Include Library > Add .zip Library بروید، و فایل .Zip که از لینک های زیر دانلود کرده اید را اضافه کنید.

وب سرور ESP32 برای مانیتورینگ دما رطوبت

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

 


کد و تحلیل سنجش دما رطوبت


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

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

 

 کتابخانه هایی که در این پروژه استفاده شده به شرح زیر می باشد که البته قبل تر با هم آن ها را  نصب و به نرم افزار آردوینو اضافه کردیم.

#include "WiFi.h"
#include "ESPAsyncWebServer.h"
#include <ESPAsyncTCP.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>

 

در این خط از کد پین مربوط به خواندن پایه دیتای سنسور DHT را معرفی و مشخص می کنیم، که همان GPIO 27 می باشد که در بخش شماتیک به آن اشاره شد.

#define DHTPIN 27

 

در این قسمت نوع سنسوری که استفاده میکنید را با uncomment کرد آن مشخص می کنید.

//#define DHTTYPE    DHT11     // DHT 11
#define DHTTYPE    DHT22     // DHT 22 (AM2302)
//#define DHTTYPE    DHT21     // DHT 21 (AM2301)

 

کد مرجع سنجش دما رطوبت با سنسور DHT و برد ESP32

#include "WiFi.h"
#include "ESPAsyncWebServer.h"
#include <Adafruit_Sensor.h>
#include <DHT.h>

// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

#define DHTPIN 27     // Digital pin connected to the DHT sensor

// Uncomment the type of sensor in use:
//#define DHTTYPE    DHT11     // DHT 11
#define DHTTYPE    DHT22     // DHT 22 (AM2302)
//#define DHTTYPE    DHT21     // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);

// Create AsyncWebServer object on port 80
AsyncWebServer server(80);

String readDHTTemperature() {
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  //float t = dht.readTemperature(true);
  // Check if any reads failed and exit early (to try again).
  if (isnan(t)) {    
    Serial.println("Failed to read from DHT sensor!");
    return "--";
  }
  else {
    Serial.println(t);
    return String(t);
  }
}

String readDHTHumidity() {
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  if (isnan(h)) {
    Serial.println("Failed to read from DHT sensor!");
    return "--";
  }
  else {
    Serial.println(h);
    return String(h);
  }
}

const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
  <style>
    html {
     font-family: Arial;
     display: inline-block;
     margin: 0px auto;
     text-align: center;
    }
    h2 { font-size: 3.0rem; }
    p { font-size: 3.0rem; }
    .units { font-size: 1.2rem; }
    .dht-labels{
      font-size: 1.5rem;
      vertical-align:middle;
      padding-bottom: 15px;
    }
  </style>
</head>
<body>
  <h2>ESP32 DHT Server</h2>
  <p>
    <i class="fas fa-thermometer-half" style="color:#059e8a;"></i> 
    <span class="dht-labels">Temperature</span> 
    <span id="temperature">%TEMPERATURE%</span>
    <sup class="units">&deg;C</sup>
  </p>
  <p>
    <i class="fas fa-tint" style="color:#00add6;"></i> 
    <span class="dht-labels">Humidity</span>
    <span id="humidity">%HUMIDITY%</span>
    <sup class="units">%</sup>
  </p>
</body>
<script>
setInterval(function ( ) {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("temperature").innerHTML = this.responseText;
    }
  };
  xhttp.open("GET", "/temperature", true);
  xhttp.send();
}, ۱۰۰۰۰ ) ;

setInterval(function ( ) {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("humidity").innerHTML = this.responseText;
    }
  };
  xhttp.open("GET", "/humidity", true);
  xhttp.send();
}, ۱۰۰۰۰ ) ;
</script>
</html>)rawliteral";

// Replaces placeholder with DHT values
String processor(const String& var){
  //Serial.println(var);
  if(var == "TEMPERATURE"){
    return readDHTTemperature();
  }
  else if(var == "HUMIDITY"){
    return readDHTHumidity();
  }
  return String();
}

void setup(){
  // Serial port for debugging purposes
  Serial.begin(115200);

  dht.begin();
  
  // Connect to Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }

  // Print ESP32 Local IP Address
  Serial.println(WiFi.localIP());

  // Route for root / web page
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html, processor);
  });
  server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/plain", readDHTTemperature().c_str());
  });
  server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/plain", readDHTHumidity().c_str());
  });

  // Start server
  server.begin();
}
 
void loop(){
  
}

 

  • تنظیمات منوی tools در نرم افزار آردوینو نیز مانند تصویر زیر می باشد.

راه اندازی سریال مانیتور در آردوینو برای سنجش دما رطوبت

 


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


برد ESP32 DEVKIT ESP-WROOM-32

سنسور دما و رطوبت DHT22

انواع برد ESP32

مقاومت ۱k


جمع بندی


در نتیجه پس از آپلود کد در nodemcu یا تراشه ESP32؛ در نرم افزار آردوینو وارد Serial Monitor شوید، پس از ریست کردن، برد به وای فای مشخص شده متصل خواهد شد و ip مشخصی را در اختیار شما قرار خواهد داد، که با سرچ کردن آن در مرورگر می توانید به وب سرور دسترسی پیدا کنید.

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

 

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

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

CiferTech

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

۴ دیدگاه

  • سلام استاد
    ممنون از مطلب بسیار عالیتون
    آیا این امکان وجود دارد که برنامه را روی خود آردوینو آپلود کنم و از esp برای ارسال داده استفاده کنم؟لطفاَ راهنمایی بفرمایید
    باتشکر

    • سلام، ممنون از توجه شما، از آنجایی پروژه بر روی ESP32 اجرا می‌شود این کارد پیشنهاد نمی‌شود، برای مثال اگر از ESP8266 استفاده کرده بودیم منطقی بود که با یک ESP01 ارتباط شبکه را با برد آردوینو برقرار کنیم، البته می‌نوانیم کد زیر را بصورت کامل ویرایش کنید و بر روی ESP8266 اجرا و سناریویی که گفتم را اجرا کنید.

  • سلام و تشکر
    چگونه میتونیم اطلاعات هر یک دقیقه اتومات رفرش کنیم
    چون این کد بایستی دستی در مرورگر انجام بشه