اینترنت اشیا IOT برد ESP8266 برد Nodemcu پروژه های آردوینو

پروژه ساخت دیتالاگر دما با DHT22 و ذخیره مقادیر در SDcard

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

تا امروز آموزش های مختلفی درباره مانیتورینگ دما در این سایت منتشر شده که تعدادی از آنها رو خود من نوشته بودم مثل نمایش مقادیر در وب‌سرور پرینت در نمایشگر هایی مثل Oled و بینهایت سناریوی مختلف که تا امروز تجربه کردید. اما امروز قصد داریم متفاوت تر کار کنیم و میخوایم این مقادیر رو بصورت یک فایل .txt در sd-card ذخیره کنیم. به شکلی معنی میشه که دیتای موجود و بدیست آمده از سنسور DHT22 را لاگ کنیم، یا همان دیتالاگر دما بسازیم. البته لاگ کردن مقادیر به روش ها و استانداردهای مختلفی انجام میشه، برای مثال زمان ثبت مقادیر را هم ذخیره کنیم اما برای شروع فقط مقادیر دما را ذخیره خواهیم کرد. در ادامه آموزش ساخت دیتالاگر دما آردوینو با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

دیتا لاگر Nodemcu با سنسور دما رطوبت DHT22 و ماژول SD card - دیجی اسپارک

 


سنسور دما DHT22


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

سنسور دما رطوبت DHT22 و ماژول SD card - دیجی اسپارک

 


دیتالاگر دما


ثبت کننده داده یا دیتالاگر وسیله‌ای الکترونیکی است که داده‌هایی را که به وسیلهٔ سنسور های موجود در دستگاه یا حسگر خارجی تامین می‌شوند را در طول زمان یا در رابطه با مکان ذخیره می‌کند. اکثر دیتالاگرها بر پایه یک پردازنده دیجیتال طراحی و ساخته می‌شوند. data logger وسیله ای الکترونیکی است که برای ذخیره داده ها در طول زمان استفاده می شود، معمولاً به عنوان ثبت کننده اطلاعات شناخته می شود. ثبت کننده های داده در هر مکان که در شرایط ضبط بیش از یک دوره زمانی مزیت داشته باشد، استفاده می شود.

 


کارت حافظه Micro SD


Micro SD یا “Secure Digital” که یک کارت حافظه غیرفرار است که به‌طور وسیعی در وسایل قابل حمل مانند تلفن همراه، دوربین دیجیتال، جی پی اس استفاده می شوند. همانطور که اشاره شد ما نیز در این آموزش به منظور ذخیره مقادیر ثبت شده استفاده می کنیم. کارت SD یک روش اساسی برای انتقال اطلاعات و ذخیره آن است. خوبی آن این است که این یک راه حل غیر فرار است مانند اکثر دستگاه های ذخیره سازی و برای نگهداری داده ها نیازی به منبع تغذیه نیز ندارید.

 


برد ESP8266


تراشه های ESP8266 از موارد محبوب در زمینه اینترنت اشیا هستند که نسبت به دیگر نمونه ها کیفیت بهتر و همچنین قیمت پایین تری نیز دارند، هسته مرکزی این ماژول ESP8266 EX می باشد که در واقع زیر این شیلد فلزی قرار گرفته است، در ضمن این شیلد فلزی به منظور کاهش نویز و همچنین محافظت از قطعات SMD حساس این ماژول قرار داده شده است. این ماژول ها در سری های مختلفی تولید می‌شوند از جمله esp01 و esp12، در واقع تفاوتی که مدل ها با یکدیگر دارند تعداد GPIO ها و همچنین حافظه آن ها است البته معمولا از نظر ظاهری نیز تفاوت هایی که با یکدیگر دارند که قابل تشخیص است. این ماژول ها از شبکه WIFI داخلی پشتیبانی می‌کنند، این میکرو کنترلر ها اولین بار در سال ۲۰۱۴ به بازار عرضه شدند. ESP8266 دارای ۱۳ GPIO و همچنین یک ورودی آنالوگ (A0) است.

ساخت دیتا لاگر Nodemcu - دیجی اسپارک

 


نحوه کار پروژه


در این پروژه با استفاده از ماژول sd-card Reader و برد ESP8266 مقادیر دما را از سنسور DHT22 دریافت و با ساخت یک فایل .txt در sd-card مقادیر را در این فایل ذخیره خواهیم کرد. همچنین این مقادیر را در سریال مانیتور آردوینو نیز پرینت خواهیم کرد.

پروژه دیتالاگر Nodemcu با سنسور DHT22 و ماژول SD card - دیجی اسپارک

 


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


برد Nodemcu ESP8266

ماژول SD-card Reader

سنسور DHT22

۱۰k مقاومت

 


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


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

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

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

 


تست و راه اندازی


در این بخش اتصالات مربوط به ماژول های استفاده شده با برد esp8266 را برقرار خواهیم کرد. ماژول SD-CARD Reader از پروتکل SPI برای برقراری ارتباط با برد ESP8266 استفاده می کند، همچنین در سنسور DHT22 بین پین DATA و Vin از یک مقاومت استفاده خواهیم کرد. جدول زیر مربوط به اتصالات ماژول SD-card Adapter است.

اتصالات ماژول Micro SD به برد Nodemcu ESP8266 - دیجی اسپارک

  • اتصالات سنسور DHT22

اتصالات ماژول DHT22 به برد Nodemcu ESP8266 - دیجی اسپارک

  • شماتیک مربوط به اتصالات پروژه

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

#include <SPI.h>
#include <SD.h>
#include <DHT.h>

 

در این قسمت نوع سنسور DHT که استفاده می‌کنیم و پین مربوط برای دریافت دیتا از سنسور در nodemcu را مشخص خواهیم کرد.

#define DHTPIN D2
#define DHTTYPE DHT22

 

در این بخش یک فایل با نام test در sd خواهیم ساخت که مقادیر در آن نوشته خواهد شد.

  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");
    while (myFile.available()) {
      Serial.write(myFile.read());
    }

 

کد کامل پروژه ساخت دیتالاگر دما با DHT22 و ذخیره مقادیر در SDcard

#include <SPI.h>
#include <SD.h>
#include <DHT.h>

#define DHTPIN D2
#define DHTTYPE DHT22

File myFile;
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  
  Serial.begin(9600);

  dht.begin();

  Serial.print("Initializing SD card...");

  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

  delay(1000);
  
}

void loop() {

  delay(2000);
  
  float t = dht.readTemperature();
  
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));

  myFile = SD.open("test.txt", FILE_WRITE);

  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.print(t);
    myFile.println(" °C");
    myFile.close();
    Serial.println("done.");
  } else {
    Serial.println("error opening test.txt");
  }

  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    myFile.close();
  } else {

    Serial.println("error opening test.txt");
  }

  delay(2000);
}

 


جمع بندی


در نهایت پس از پایان مراحل راه‌اندازی، برد شروع به اندازه گیری دما توسط DHT22 خواهد کرد و در ادامه تمام مقادیر را هر ۲ ثانیه یکبار لاگ خواهد کرد همچنین در ادامه با مراجعه به فایل های sd-card استفاده شده در پروژه، می‌توانید فایلی با نام test.txt پیدا کنید که تمام مقادیر در آن ثبت شده است.

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

وب سرور ESP32: کنترل نور LED

 

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

 

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

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

CiferTech

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

۱۳ دیدگاه

  • سلام ممنون از آموزش
    اگه بخواییم در کنا دما،رطوبت هم اندازه گیری بشه چه تغییری باید در کد انجام بدیم؟

  • سلام
    وقتی کد رو اجرا میکنم ارور زیر رو میده
    exit status 1
    ‘D2’ was not declared in this scope
    کتابخونه و برد لازم رو هم روی آردوئینو نصب کردم
    مشکلش چیه؟

    • با سلام، مشکل بوجود آمده از پین تعریف شده D2 است، در صورت وجود مشکل در حال حاضر. تنها عدد GPIO مورد نظر را وارد کنید.

      • % Temperature: nan°C error opening test.txt
        error opening test.txt
        جناب کدو عینا نوشتم مدار هم دقیقا همینه ولی هر دفعه این ارور رو میده

        • با سلام، زمانی که پروژه این پروژه را تست میکیردم برای من هم این ارور نمایش داده شد. که در ادامه متوجه شدم مشکل از ارتباط بین ماژول SD-Card من هست. شما هم این مورد را بررسی کنید.

      • ببینید کد من اینه
        #include
        #include
        #include

        #define DHTPIN 4
        #define DHTTYPE DHT22

        File myFile;
        DHT dht(DHTPIN, DHTTYPE);

        void setup() {

        Serial.begin(9600);

        dht.begin();

        Serial.print(“Initializing SD card…”);

        if (!SD.begin(4)) {
        Serial.println(“initialization failed!”);
        return;
        }
        Serial.println(“initialization done.”);

        delay(1000);

        }

        void loop() {

        delay(2000);

        float t = dht.readTemperature();

        Serial.print(F(“% Temperature: “));
        Serial.print(t);
        Serial.print(F(“°C “));

        myFile = SD.open(“test.txt”, FILE_WRITE);

        if (myFile) {
        Serial.print(“Writing to test.txt…”);
        myFile.print(t);
        myFile.println(” °C”);
        myFile.close();
        Serial.println(“done.”);
        } else {
        Serial.println(“error opening test.txt”);
        }

        myFile = SD.open(“test.txt”);
        if (myFile) {
        Serial.println(“test.txt:”);
        while (myFile.available()) {
        Serial.write(myFile.read());
        }
        myFile.close();
        } else {

        Serial.println(“error opening test.txt”);
        }

        delay(2000);
        }
        به جای D2 نوشتم ۴ الان دما رو نشون میده ولی فایل text نمیسازه
        اینو میگه
        % Temperature: 30.30°C error opening test.txt
        error opening test.txt
        % Temperature: 30.30°C error opening test.txt

  • سلام
    چرا برای اتصال کارت SD از پایه های D0 تا D7استفاده کردید؟
    چرا از پایه های مخصوص به کارت SD که در سمت دیگر قرار دارد، استفاده نکردید؟
    کانفیگ پایه ها و راه اندازی به چه صورت است؟

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

  • سلام وقت بخیر.
    ممنون بابت آموزش کم نظیرتون.
    برای تامین برق بصورت مداوم باید چه کاری انجام داد؟
    امکان استفاده از شارژر موبایل برای تامین برق ماژول وجود دارد؟
    (ببخشید سوالم خیلی ابتدایی هست، من هیچ سر رشته ای از الکترونیک و برنامه نویسی ندارم، فقط عملکرد دستگاه مورد نیازم هست، که مثلا هر یک ساعت یکبار دمارو اندازه گیری و ذخیره کنه…)