احتمالا تصور کنترل کردن وسایل از راه دور برای شما هم جذاب باشد. با بکارگیری معماری اینترنت اشیا میتوانید وضعیت انواع قطعات الکترونیکی مانند سنسور دما و رطوبت را از راه دور و توسط تلفن همراهتان مشاهده کنید و در صورت امکان آنها را از راه دور کنترل کنید. برای انجام این کار لازم است ابتدا درک مقدماتی از مفهوم اینترنت اشیا داشته باشید؛ اینترنت اشیا مجموعهای از اشیای مختلف است که با مجهز شدن به سنسورها میتوانند اطلاعات محیط اطراف خود را دریافت کنند و آن اطلاعات را از طریق شبکه (اینترنت یا اینترانت) با انسانها یا سایر اشیا به اشتراک بگذارند. با بکارگیری اینترنت اشیا، انسانها میتوانند از طریق نرمافزارهای موبایل یا وب، از راه دور و در هر لحظه از وضعیت اشیا مطلع شوند و آنها را کنترل کنند.
در این مقاله قرار است با بکارگیری ماژول NodeMCU ESP32، سنسور دما و رطوبت و پلتفرم اینترنت اشیا تینگزپاد یک پروژه بسیار کاربردی در زمینه اینترنت اشیا انجام دهیم.
در این پروژه ابتدا با استفاده از سنسور دما، دمای محیط را اندازهگیری میکنیم و از طریق کامپیوتر نمایش میدهیم. سپس، این دادهها را از طریق اینترنت به پلتفرم تینگزپاد ارسال میکنیم تا مشاهده وضعیت دما از راه دور نیز امکان پذیر باشد. مراحل انجام و نتیجه نهایی را میتوانید در ویدیوی آموزشی این پروژه نیز مشاهده کنید.
برای راه اندازی این پروژه به قطعات زیر احتیاج دارید:
قبل از شروع پروژه، بهتر است با این قطعات و دلیل انتخاب آنها برای این پروژه بهتر آشنا شوید.
ماژول NodeMCU ESP32 چیست؟
برای ارسال اطلاعات در بستر اینترنت نیاز است از بوردی استفاده کنید که دارای هسته وای-فای باشد. به همین دلیل است که بر خلاف پروژههای قبلی، نمیتوان از بورد آردوینو اونو (Arduino Uno) در این پروژه استفاده کرد. اما، ESP32 تراشهای است که قابلیت اتصال به شبکه وای-فای را دارد و میتوان از آن برای راهاندازی پروژههای اینترنت اشیا استفاده کرد. ماژول NodeMCU ESP32 یک بورد توسعه مخصوص ماژول وای فای ESP32 است. این ماژول شامل تراشه ESP32، پینهای ورودی و خروجی دیجیتال، تغذیه، دکمه بوت (Boot) و ریست (Reset) است. ولتاژ کاری این ماژول ۳.۳ ولت میباشد.
تصویر این ماژول و پایههای آن را میتوانید در زیر مشاهده کنید.
سنسور DHT11 چیست؟
سنسور DHT11 نام سنسور دما و رطوبت است. این سنسور دما را در بازه ۰ تا ۵۰ درجه و رطوبت را بین ۲۰ تا ۸۰ درصد اندازه گیری میکند. این سنسور دارای چهار پایه است. دو تا از پایهها مربوط به تغذیه (۳.۳ ولت و زمین)، یکی از پایهها مربوط به داده سنسور و پایه دیگر به چیزی متصل نمیشود.
ماژول ESP32 دارای پین هدرهایی است که میتواند روی بردبورد قرار بگیرد. پس با استفاده از فضای خالی وسط برد بورد، ماژول را روی بردبورد قرار داده و سنسور DHT11 را نیز هر جای دیگری بر روی بردبورد قرار میدهیم. سپس با سیمهای جامپر، پایه زمین DHT11 را به پین ماژول ESP32، پایه VCC را به پین ۳.۳ ولت ESP32 و پایه خروجی داده رو به پین شماره ۵ (D5) ESP32 وصل میکنیم. (همانند تصویر زیر)
ابتدا وارد نرمافزار Arduino IDE شوید. میتوانید این نرم افزار را از وبسایت آردوینو https://arduino.cc/ دانلود و نصب کنید.
برای برنامه نویسی بوردهای ESP32 باید خانواده این بوردها را به نرم افزار آردوینو اضافه کنید. برای این کار از منوی File روی Preferences کلیک کنید. در پنجره باز شده در قسمت Additional boards manager URLs لینک زیر را کپی کنید و پنجره را ببندید.
https://dl.espressif.com/dl/package_esp32_index.json
سپس از منوی tools به قسمت Board رفته و رویBoards manager کلیک کنید. در این قسمت، کلمه ESP32 را سرچ کرده و فایل آن را نصب کنید. پس از نصب، هستههای مربوط به خانواده ESP32 برای شما نشان داده خواهند شد و میتوانید بورد خود را از قسمت Board انتخاب کنید. ما در این پروژه از ESP32 Dev Module استفاده کردیم.
هماکنون، کتابخانههای مورد نیاز این پروژه را نصب میکنیم.
کتابخانه DHT: این کتابخانه برای راه اندازی سنسور دما و رطوبت است. از منوی tools به قسمت manage libraries رفته و عبارت DHT sensor library را جست و جو کنید. سپس این کتابخانه را نصب کنید.
کتابخانه Wi-Fi: این کتابخانه برای اتصال به شبکه وای فای و اسکن شبکههای وای فای میباشد. این کتابخانه به طور خودکار هنگام نصب افزونه ESP32 برای شما نصب میشود.
کتابخانه ThingsPod: از این کتابخانه برای راحتتر شدن کار با پلتفرم تینگزپاد استفاده میشود. برای نصب این کتابخانه به گیتهاب (GitHub) تینگزپاد مراجعه کرده و کتابخانه را دانلود کنید یا اینجا کلیک کنید. سپس از منوی Sketch در قسمت Include library بر روی گزینه Add Zip Library کلیک کرده و فایل زیپ تینگزپاد را انتخاب کنید تا کتابخانه نصب شود.
کتابخانه PubSubClient: این کتابخانه برای پشتیبانی از پروتکل MQTT بر روی بوردهای ESP استفاده میشود. از منوی tools به قسمت manage libraries رفته و عبارت PubSubClient را جست و جو و این کتابخانه را نصب کنید.
کتابخانه Arduinojson: برای آسانتر شدن دریافت و ارسال داده میتوان از این کتابخانه استفاده کرد تا بتوان دادهها را به فرمت جیسون (JSON) نوشت. از منوی tools به قسمت manage libraries رفته و عبارت Arduinojson را جست و جو و این کتابخانه را نصب کنید. توجه داشته باشید که حتما از ورژن 6.19.4 آردوینو جیسون استفاده کنید.
برای اطلاعات بیشتر در رابطه با ArduinoJson میتوانید به مستندات آن در سایت arduinojson مراجعه کنید.
(میتوانید تمامی کدهای زیر را از گیتهاب تینگزپاد دانلود کنید.)
در ابتدا کتابخانهها را فراخوانی میکنیم.
توجه: کتابخانه AruinoJson و PubSubClient در کتابخانه تینگزپاد فراخوانی شدهاند؛ به همین دلیل، شما آنها را در این قسمت مشاهده نمیکنید. در صورت نصب نبودن این دو کتابخانه، کد با ارور مواجه میشود.
در ادامه، پین شماره پنج ESP32 را به متغیر DHTPIN اختصاص داده و نوع DHT را DHT11 قرار میدهیم.
نام و رمز شبکه وای فای مورد نظر را مینویسیم.
در تینگزپاد، هر دستگاه توکن مربوط به خودش را دارد که به عنوان یک شناسه برای ارتباط بین پلتفرم و دستگاه استفاده میشود. این توکن را در اینجا وارد میکنیم. (مراحل ایجاد دستگاه و کپی کردن توکن تینگزپاد در انتهای مقاله توضیح داده شده است.) سپس سرور تینگزپاد و پورت MQTT آن را نیز تعریف میکنیم.
یکobject از کتابخانه DHT ایجاد کرده و پین و نوع DHT را به این تابع اختصاص میدهیم.
یک object از کتابخانه WiFiClient با نام wifiClient برای استفاده از تابعهای آن ایجاد میکنیم . همچنین برای ایجاد شی MQTT هم از کتابخانه PubSubClient استفاده میکنیم و Object وای فای را برای ارتباط با اینترنت به آن پاس میدهیم. سپس یک object از تینگزپاد با نام thingspod ایجاد کرده و object وای فای و MQTT را به آن پاس میدهیم.
حالا متغیرهای پروژه را تعریف میکنیم.
در تابع ()setup، تابع راهانداز وای-فای را مینویسیم. این تابع را بعد از تابع ()setup تعریف میکنیم. در این تابع، عدم اتصال به شبکه وای فای مورد نظر در سریال مانیتور پرینت میشود تا زمانی که با موفقیت به وای فای وصل شود. سپس، سرور را راه اندازی کرده و سنسور dht را فعال میکنیم.
تابع راهانداز وای فای به صورت زیر است:
در تابع حلقه به این صورت عمل میکنیم که اگر برنامه به وای فای وصل نشد، تابع reconnectWifi را اجرا کند (در آخر برنامه این تابع تعریف شده است.). در این تابع، اگر برنامه به اینترنت وصل نشد، برای اتصال مجدد آن به وای-فای تلاش میکنیم.
در ادامه تابع حلقه زمانی که برنامه به اینترنت وصل شد، باید ببینیم که به پلتفرم تینگزپاد هم وصل میشود یا خیر. اگر به تینگزپاد وصل نشد، برنامه عبارت Failed to connect را در سریال مانیتور پرینت میکند و در صورت اتصال موفقیت آمیز، تابع mqttClientLoop از کتابخانه تینگزپاد فراخوانی میشود. این تابع، دریافت داده از طریق پروتکل MQTT را بررسی میکند.
در ادامه، میخواهیم دادههای دما و رطوبت را هر دو ثانیه یکبار اندازهگیری کنیم و در سریال مانیتور نمایش دهیم. در صورت بروز خطا در خواندن دما و رطوبت، عبارت Failed to read from DHTsensor در سریال مانیتور پرینت میشود.
سپس میخواهیم برای نظارت از راه دور اینترنتی، این دادهها را به پلتفرم تینگزپاد نیز ارسال کنیم. بنابراین، یک بافر جیسون با سایز ۲ ایجاد میکنیم (زیرا قرار است فقط دو مقدار دما و رطوبت را ارسال کنیم.). سپس این مقادیر را به فرمت جیسون تبدیل میکنیم.
در نهایت، دادهها را به صورت تلهمتری بر روی پلتفرم تینگزپاد ارسال میکنیم.
تابع ()reconnectWifi که در آخر برنامه نوشته میشود، به این صورت است:
کد با موفقیت کامپایل (Compile) شد. حالا برنامه را روی بورد ESP32 آپلود میکنیم.
(کد کامل برنامه را میتوانید در اینجا مشاهده و کپی کنید.)
اکنون به سراغ پلتفرم تینگزپاد میرویم تا داده دما و رطوبت دریافتی را از طریق داشبوردهای پلتفرم نمایش دهیم. برای این کار ابتدا وارد وبسایت تینگزپاد شوید و اگر حساب کاربری ندارید، میتوانید یک حساب کاربری رایگان بسازید که از 5 دستگاه و 1 میلیون دیتاپوینت ماهانه پشتیبانی میکند. سپس، وارد حساب کاربری خود شوید.
ایجاد دستگاه: اول باید یک دستگاه ایجاد کنیم. منظور از دستگاه همان سنسور دما و رطوبت است. برای این کار، وارد صفحه گروههای دستگاه (Device Groups) شوید، یک گروه برای دستگاههای این پروژه ایجاد کنید و بعد در این گروه یک دستگاه با نام DHT11Sensor بسازید. در تینگزپاد، هر دستگاه توکن (Access Token) مربوط به خودش را دارد که به عنوان یک شناسه برای ارتباط بین پلتفرم و دستگاه استفاده میشود. روی اسم دستگاه یا همانDHT11Sensor کلیک کنید و از منوی باز شده روی گزینه Copy access token کلیک کنید. از این توکن همانطور که در بالا گفته شد، در نرم افزار آردوینو استفاده میکنیم.
مشاهده اطلاعات: حالا اگر روی اسم دستگاه کلیک کرده و به پنجره Latest Telemetry دستگاه مراجعه کنید، میبینید که مقدار دما و رطوبت هر دو ثانیه یک بار آپدیت میشود. اما تاریخچه تغییرات دما و رطوبت را میتوان با ایجاد داشبود، به صورت گرافیکی و در قالب نمودارهای مختلف هم نمایش داد.
ایجاد داشبورد: برای ایجاد داشبورد در پلتفرم تینگزپاد، وارد صفحه گروه داشبوردها (Dashboard Groups) میشویم، اول یک گروه داشبورد برای این پروژه ایجاد کرده و داخل آن یک داشبورد میسازیم. حالا وارد صفحه داشبورد میشویم و ویجتی که برای نمایش داده سنسور مناسب است را انتخاب میکنیم. یک نام مستعار (Alliance) برای دستگاه انتخاب میکنیم تا بتوانیم با این نام مستعار، دما و رطوبت را به ویجت اضافه کنیم.
به همین سادگی میتوانید اطلاعات سنسور را روی داشبوردهای تعاملی پلتفرم ببینید.
امیدواریم که با طی کردن گام به گام مراحل فوق، موفق به ساخت پروژه مانیتورینگ دما و رطوبت با پلتفرم تینگزپاد شده باشید. در صورت بروز هرگونه مشکل:
نظارت از راه دور بر پارامترهای مختلف از جمله دما و رطوبت در بسیاری از صنایع امروزی حائز اهمیت است. به طور مثال، در یک گلخانه نظارت و کنترل لحظهای سطح دما و رطوبت از اهمیت بالایی برخوردار است. زیرا، شرایط جوی در گلخانه در رشد گیاهان و کیفیت محصول نهایی بسیار تاثیرگذار است. یا یک سردخانه را در نظر بگیرید؛ نظارت بر سطح دما و رطوبت در این سردخانه امری حیاتی است زیرا خارج شدن وضعیت جوی سردخانه از حالت ایدهآل، باعث تلفات مواد اولیه خواهد شد. بنابراین، صنایع مذکور و بسیاری از صنایع دیگر به دنبال راهحلهای عملیاتی برای نظارت و کنترل لحظهای سطح پارامترهای محیطی هستند.
البته، سنسور دما و رطوبت صرفا به عنوان یک مثال ساده در این پروژه استفاده شده است و شما میتوانید همین پروژه را با سنسورهای مختلف انجام دهید و داده تمامی سنسورها را در نمودارهای متفاوت در یک داشبورد نمایش دهید. به طور مثال، نمونه داشبوردهای ساخته شده توسط تینگزپاد را میتوانید در صفحه کاربردها مشاهده کنید.
در نتیجه، با یادگیری اصول کلی کار با سختافزارهای اینترنت اشیا، پلتفرمهای IoT، درک نیازمندی مشتریان و چاشنی خلاقیت خود میتوانید پروژهها و محصولات هوشمند کاربردی را برای صنایع مختلف توسعه دهید.
تمرکز اصلی آکادمی تینگزپاد بر آموزش مفهوم اینترنت اشیا و انجام پروژههای هوشمندسازی مرتبط با این فناوری است. اما قدم اول در یادگیری این مفهوم، شناخت نسبتا خوب از دنیای الکترونیک و کار با مدارهای الکترونیکی است. بنابراین، پیشنهاد میکنیم خود را به چالش بکشید و سایر پروژههای آکادمی تینگزپاد را نیز انجام دهید. همچنین، خودتان را محدود نکنید و با جایگزینی سنسورها و تغییر در برنامه، پروژههای خلاقانه جدید ایجاد کنید.
اگر به مباحث هوشمندسازی و اتوماسیون علاقهمند هستید، مقالات مرتبط با این حوزه را در وبلاگ مطالعه کنید و ویدیوهای آموزشی ما را در یوتیوب و آپارات مشاهده کنید.