اینترنت اشیا IOT برد ESP8266

ارسال دما رطوبت به سرور IoT با پلتفرم Thingsboard توسط DHT22 و آردوینو

dht22-esp8266-with-thingsboard-and-mqtt-digispark
نوشته شده توسط اروند طباطبایی

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

 


نیازمندی‌های پروژه اینترنت اشیا


اولین بخش از هرپروژه اینترنت اشیا شامل سخت افزار میباشد. از جمله سنسور به همراه برد الکترونیکی، تمامی این موارد در لایه اول دسته بندی می‌شوند. بنابراین تهیه یک برد آردوینو یا Wemos یا اورنج پای و … می‌تواند یکی از انتخاب‌های لایه اول باشد. در لایه دوم پروژه اینترنت اشیا با پروتکل انتقال مواجه هستیم. به این مفهوم که با پروتکل MQTT ارسال کنیم یا با پروتکل CoAP یا HTTP و… همگی از جمله پروتکل‌های معمولی در اینترنت اشیا میباشند. در لایه سوم پروژه IoT با مفهوم پلتفرم روبرو خواهیم بود. پلتفرم اینترنت اشیا به معنی یک وب سرویس یا نرم افزار تحت وب میباشد. که امکان کنترل و هدایت تمامی سخت افزارها را فراهم می‌کند. برای آشنایی با انواع پلتفرم‌ها به پست معرفی ۴ پلتفرم اینترنت اشیا و راهنمای انتخاب برای پروژه‌ها مراجعه کنید. اقدامات در لایه چهارم اینترنت اشیا، بسیار مهم و به نظر من تخصصی‌ترین بخش از هر پروژه اینترنت اشیا به حساب می‌آید. بنابراین در این بخش به آن ورود نخواهیم کرد. و اما در این پروژه از پلتفرم Thingsboard استفاده می‌کنیم. برای استفاده از این سرویس نیاز به نصب آن روی سرور وجود دارد. این موضوع نیازمند چندین تخصص سمت سرور و Admin Server میباشد. طبیعتا راه اندازی یک سرور مجزا هم هزینه برخواهد بود. در ادامه راهکار مناسب برای این بخش را اعلام خواهم کرد.

 


اتصالات مدار مانیتور دما رطوبت محیط


ابتدا به بخش سخت افزاری مدار میپردازیم. اتصالات را مانند شماتیک زیر بین برد ESP8266 و مبدل USB برقرار می‌کنیم. دقت کنید که از پایه ۳٫۳ ولت مبدل USB در این پروژه استفاده می‌کنیم. همچنین مقاومت به کار رفته در این شماتیک از نوع ۱۰ کیلو اهم می‌باشد. مقادیر پیشنهادی در بازه ۴٫۷ کیلو اهم تا ۱۰ کیلو اهم می‌باشد. با توجه به اینکه شماتیک این مدار کاملا گویا است و تمایل اکثر کاربران به بستن مدار از روی شماتیک می‌باشد، توضیحاتی در خصوص روش اتصالات ارایه نمی‌دهم. ولی چنانچه نیاز هرجایی از اتصالات با مشکل مواجه شدید، از بخش نظرات همین آموزش سوالتان را مطرح کنید.

 

 


کد ESP8266 در Thingsboard با MQTT


کدهای زیر را روی برد ESP8266 آپلود کنید. همانطور که می‌دانید برد ESP8266-01 به صورت مستقل به عنوان یک برد عمل می‌کند. بنابراین کافیست که کدها را توسط مبدل USB به سریال روی آن آپلود کنید. اما چهار بخش در کدهای زیر با ستاره مشخص شده است. هر کدام نیازمند اطلاعاتی شخصی هستند. در بخش نام کاربری و رمز عبور برای اتصال به شبکه وای فای مورد نظر را وارد کنید. بخش Token که مربوط به پلتفرم تینگزبرد می‌باشد را در ادامه توضیح خواهم داد. آخرین بخش هم مربوط به آدرس سروری است که پلتفرم تینگزبرد روی آن نصب شده است. پس از وارد کردن این موارد، کدها را روی برد ESP8266 آپلود کنید.

#include "DHT.h"
#include <ESP8266WiFi.h>
#include <ThingsBoard.h>

#define WIFI_AP "**************"
#define WIFI_PASSWORD "**********"

#define TOKEN "**************"

// DHT
#define DHTPIN 2  
#define DHTTYPE DHT22

char thingsboardServer[] = "*********";

WiFiClient wifiClient;

// Initialize DHT sensor.
DHT dht(DHTPIN, DHTTYPE);

ThingsBoard tb(wifiClient);

int status = WL_IDLE_STATUS;
unsigned long lastSend;

void setup()
{
  Serial.begin(115200);
  dht.begin();
  delay(10);
  InitWiFi();
  lastSend = 0;
}

void loop()
{
  if ( !tb.connected() ) {
    reconnect();
  }

  if ( millis() - lastSend > 1000 ) { // Update and send only after 1 seconds
    getAndSendTemperatureAndHumidityData();
    lastSend = millis();
  }

  tb.loop();
}

void getAndSendTemperatureAndHumidityData()
{
  Serial.println("Collecting temperature data.");

  // Reading temperature or humidity takes about 250 milliseconds!
  float humidity = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float temperature = dht.readTemperature();

  // Check if any reads failed and exit early (to try again).
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  Serial.println("Sending data to ThingsBoard:");
  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.println(" *C ");

  tb.sendTelemetryFloat("temperature", temperature);
  tb.sendTelemetryFloat("humidity", humidity);
}

void InitWiFi()
{
  Serial.println("Connecting to AP ...");
  // attempt to connect to WiFi network

  WiFi.begin(WIFI_AP, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("Connected to AP");
}


void reconnect() {
  // Loop until we're reconnected
  while (!tb.connected()) {
    status = WiFi.status();
    if ( status != WL_CONNECTED) {
      WiFi.begin(WIFI_AP, WIFI_PASSWORD);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("Connected to AP");
    }
    Serial.print("Connecting to ThingsBoard node ...");
    if ( tb.connect(thingsboardServer, TOKEN) ) {
      Serial.println( "[DONE]" );
    } else {
      Serial.print( "[FAILED]" );
      Serial.println( " : retrying in 5 seconds]" );
      // Wait 5 seconds before retrying
      delay( 5000 );
    }
  }
}

 


مراحل آپلود کد آردوینو روی ESP8266-01


ابتدا پکیج بردهای ESP8266 را به نرم افزار Arduino IDE معرفی کنید. برای این منظور از منو file، زیر شاخه preferences را انتخاب کنید. سپس لینک http://arduino.esp8266.com/stable/package_esp8266com_index.json را در بخش Board manager URL وارد کنید. پنجره را ببندید. سپس از منو tools، زیر شاخه Board و سپس زیر شاخه Board manager را انتخاب کنید. در پنجره باز شده، عبارت ESP8266 را وارد کنید. از لیست باز شده، نسخه ۲٫۵٫۲ مربوط به بردESP را نصب کنید. پس از این اقدام، یکبار نرم افزار آردوینو را ببنیدید و دوباره باز کنید. سپس نسخه ESP8266 Generic را از داخل بردهای مربوطه انتخاب کنید. حالا آمادگی برای آپلود کدها روی برد ESP8266 وجود دارد. ولی کتابخانه‌های مورد نیاز برای این بخش بسیار اهمیت دارند. در این آموزش از ۶ عدد کتابخانه بسیار مهم برای برقراری ارتباط با سرور تینگزبورد و برقراری امنیت پروژه استفاده کرده‌ایم. کلیه این فایل‌ها با نسخه تست شده از لینک کتابخانه قابل دانلود می‌باشد. پس از دانلود این فایل چنانچه روش به کار گیری کتابخانه را نمی‌دانید، از طریق آموزش نصب کتابخانه در آردوینو اقدام کنید. چنانچه راجع به هرکدام از این کتابخانه‌ها سوالی دارید، در بخش نظرات همین آموزش مطرح کنید. در این مرحله همچنان امکان آپلود کدها روی ESP8266 وجود ندارد.

 


تنظیمات پلتفرم Thingsboard و تعریف Device


از این مرحله بایستی وارد بخش SaaS یا همان Software as a service شده و تنظیمات را انجام دهیم. پیش از این در پست معرفی تینگزبرد Thingsboard راجع به برخی از ویژگی‌های این پلتفرم مطالبی را ارایه دادم. با توجه به این موارد وارد بخش تنظیمات می‌شویم. ابتدا با سطح دسترسی Tenant وارد پخش کاربری پلتفرم می‌شویم. سپس از منو سمت چپ وارد بخش Devices می‌شویم. به تصویر زیر دقت کنید.

بخش تنظیمات Devices در پلتفرم تینگزبرد Thingsboard

سپس روی علامت + در سمت راست کنار صفحه پلتفرم Thingsboard کلیک کنید. و گزینه Add New Device را انتخاب کنید. سپس در پنجره باز شده، نام و نوع سخت افزار را انتخاب کنید. در این آموزش هر دو این موارد را می‌توانید به دلخواه انتخاب کنید. با دیگر بخش های این پنجره فعلا کاری نداریم. سپس گزینه Add را کلیک کنید. مانند تصویر زیر

تعریف Device جدید در تینگزبورد ThingsBoard - دیجی اسپارک

تا اینجا یک Device جدید تعریف کرده‌اید و به لیست پیش فرض اضافه شده است. حال روی Device که ساخته‌اید، کلیک کنید. مانند تصویر زیر یک پنجره از سمت راست باز خواهد شد. در این پنجره تنظیمات زیادی قرار دارند. تک به تک در پروژه‌های بعدی موارد مختلف را کار خواهیم کرد. در این پروژه به Access Token سخت افزاری که ساخته‌ایم نیاز داریم. بنابراین روی گزینه Copy Access Token کلیک کرده و در کدها قسمت define TOKEN آن را بجای ستاره‌ها وارد کنید.

تنظیمات اضافه کردن Device جدید به تینگزبورد - دیجی اسپارک

داخل کدهای پروژه در بخش char thingsboardServer آدرس سروری که تینگزبورد روی آن نصب شده است را وارد می‌کنیم. میتواند IP یا دامنه باشد. پس از این اقدامات، می‌توانیم کدها را روی برد ESP8266 آپلود کنیم. یکی از مهم‌ترین بخش‌ها در اجرای پروژه IoT روی تراشه ESP8266 آپلود کدها و راه اندازی آن می‌باشد. در ادامه فرض را بر این قرار میدهم که کدها را آپلود کرده‌اید، تراشه ESP به شبکه متصل شده و در حال ارسال دیتا می‌باشد. به تصویر زیر دقت کنید.

ارسال دیتا به سرور IoT تینگزبورد - دیجی اسپارک

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

ارسال اطلاعات دما رطوبت به تینگزبورد دیجی اسپارک

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

 


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


ماژول وای فای ESP8266 V1.0 برد کنترل اینترنت اشیا IOT

ماژول مبدل USB to TTL CP2102 با درایور نصب

یا ماژول مبدل USB to Serial FT232RL

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

پک ۳ عددی کابل فلت رنگی Jumper

مقاومت ۸٫۲ کیلو اهم

 

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

 

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

اروند طباطبایی

بنیانگذار دیجی اسپارک: اولین مرجع تخصصی امبدد سیستم به زبان فارسی / کارشناس سئو و تولید محتوا

هرچه می آموزم میبینم که خیلی کم آموختم. علاقه به رباتیک و تکنولوژی دارم. امیدوارم بتونم دانشی را که آموخته‌ام، به روش‌های مختلفی به کاربران علاقمند منتقل کنم.

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

۳۷ دیدگاه

  • سلام خسته نباشید
    سوالی داشتم
    چطوری میتونم دیتا ها رو تبدیل. به stringکنم و به سرور ارسال کنم؟!
    مثلاً دیتا یه دسته بازی که از طریق سریال ارتباط برقرار می‌کنه رو چطور به string تبدیل میشه کرد ؟

    • با سلام
      بستگی به نوع ارتباط دیوایس مورد نظر دارد. مدل تبدیل شدن را باید بررسی کنید به چه صورت است.
      توضیحات بیشتری ارایه کنید تا امکان بررسی وجود داشته باشد.

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

  • سلام و تشکر از اطلاعات مفید
    آیا نیاز به دانش برنامه نویسی برای ارتباط با محیط داشبورد داریم؟

    • با سلام
      از توجه شما سپاسگزارم. در خصوص ساخت و ایجاد ویجت روی داشبورد نیازی به دانش تخصصی ندارید. ولی برای شخصی سازی کردن بخش های نمایشگر میتوانید به صورت کدنویسی موارد را توسعه دهید.

  • سلام من یه ماژول esp8366 دارم خواستم بدونم میشه که دوتا پایه GPIO 0 و GPIO2 رو به پرت سریال تبدیل کنم یعنی این ماژول از کتابخانه سافت ور سریال پیروی میکنه ؟
    ممنون میشم جواب منو بدبد

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

    • با سلام
      جناب مسائلی از توجه شما سپاسگزارم. اروری ارسال نکرده‌اید. لطفا دقیق‌تر مطرح کنید تا بررسی کنم. همچنین اینکه به چه طریقی پلتفرم را در دسترس دارید؟

      • با سلام و تشکر از حسن برخورد و پاسخگویی شما
        من در ارتباط ماژول D1 و D1 mini با پلتفرم Thingsboard مشکل دارم. عینا کد سایت شما و نیز Thingsboard رو کپی کردم و تغییرات مورد نیاز مثل توکن و …. رو در اون ایجاد کردم. اما در مانیتور با این متن روبرو میشم. با تشکر قبلی از راهنمایی شما
        Connection established!
        IP address: 192.168.20.26
        connected toPALA_2.4G
        Connecting to ThingsBoard node …[FAILED] [ rc = : retrying in 5 seconds]
        Connecting to ThingsBoard node …

  • با سلام خدمت آقای طباطبایی
    من یک برد آردوینو دارم که چند سنسور مختلف بهش وصله و الان می خواهم دیتا رو از آردوینو به esp8266 بدم و از طرق برد esp به پیام رسان بله بفرستم حالا دوتا سوال دارم اولی اینه که میشه این کارو کرد یعنی ارتباط سریال بین espو arduino راه اندازی کنم؟
    سوال دومم اینه که دستور خواندن رو چه جوری بنویسم که اطلاعات از طرف برد esp ذخیره بشه و بتونم اون رو بفرستم به پیام رسان بله؟

  • سلام وقتتون بخیر
    از پلتفرم thingsboard میشه برای کاربردهای فواصل زیاد هم استفاده کرد یا فقط برای شبکه های محلی مثل wifi قابل استفاده ست؟

  • باسلام
    میخواستم ببینم میتونیم با esp 8266 مانیتورینگ چند ماژول (فشار – دما – التراسونیک-..) را همزمان دریافت کنیم
    باهمین مدلش میشه آیا؟

  • سلام خسته نباشید من میخواستم همین پروژه ای رو که گذاشتین کنارش با ماژول sim 800 اطلاعات رو پیامک هم بکنم و با وای فای در گوشی هم نشان بدهم بنظرتون برد mega 2560 رو بگیرم بهتر نیست با توجه به اینکه از دو پورت سریال متفاوت هم میخوام استفاده کنم ؟

  • با سلام جناب طباطبائی.
    ایا امکان اینکه در این پروژه به جای سنسور dht از سنسور سنجش رطوبت خاک استفاده کنیم وجود داره؟

  • سلام خیلی خوب اموزش میدی
    استراک سرور تیگزبورد چه جوری میتونم تهیه کنم چه پلانهایی هست و هزینه انها چقدره
    همچنین سرور ایرانی هم داریم که این خدمات عرضه کنه
    ممنون میشم راهنمایی بفرمایید.

  • سلام و عرض تشکر بابت آموزش خوبتون
    من میخواهم تینگزبورد خارج از شبکه محلی نیز عمل کند و برای مثال داشبورد موردنظر خود را با شخصی در شهر دیگر به اشتراک بگذارم. آیا برای این کار باید هاست و دامنه خریده و ip آن را در جای تینگزبورد سرور وارد کنم؟
    در حال حاضر من تینگزبورد را به صورت community edition در سیستم نصب کرده ام و به صورت لوکال هاست به آن متصل میشوم.