در دنیای دیجیتال امروزی، توانایی مدیریت و کنترل دستگاهها از هر مکانی توسط اینترنت اهمیت زیادی پیدا کرده است. پس از مطالعه این مقاله میتوانید به راحتی هر سیستم روشنایی را از راه دور و از طریق تلفن همراه یا کامپیوتر کنترل کنید. بنابراین، اگر میخواهید مهارتهای الکترونیکی خود را گسترش دهید یا به دنبال ادغام فناوریهای هوشمند در خانه یا محل کار خود هستید، این مقاله آموزشی را تا انتها مطالعه کنید تا دانش و ابزارهای لازم برای عملی کردن ایدههای خود را فرا بگیرید.
در پروژه روشن و خاموش کردن ال ای دی از طریق اینترنت، از مفهوم اینترنت اشیا و معماری اینترنت اشیا استفاده شده است. برای همین بهتر است ابتدا درک مقدماتی از مفهوم اینترنت اشیا داشته باشید؛ اینترنت اشیا مجموعهای از اشیای مختلف است که با مجهز شدن به سنسورها میتوانند اطلاعات محیط اطراف خود را دریافت کنند و آن اطلاعات را از طریق شبکه (اینترنت یا اینترانت) با انسانها یا سایر اشیا به اشتراک بگذارند. با بکارگیری اینترنت اشیا، انسانها میتوانند از طریق نرمافزارهای موبایل یا وب، از راه دور و در هر لحظه از وضعیت اشیا مطلع شوند و آنها را کنترل کنند.
در این مقاله قرار است با بکارگیری ماژول NodeMCU ESP32، ال ای دی و پلتفرم اینترنت اشیا تینگزپاد یک پروژه بسیار کاربردی در زمینه اینترنت اشیا انجام دهیم. به جای ال ای دی در این پروژه میتوان از انوواع موتور، لامپ یا فن نیز استفاده کرد.
در این پروژه ابتدا وضعیت ال ای دی را در بستر اینترنت نمایش میدهیم و با استفاده از ویجتهای کنترلی پلتفرم اینترنت اشیا تینگزپاد، این ال ای دی را از راه دور خاموش و روشن میکنیم. مراحل انجام و نتیجه نهایی را میتوانید در ویدیوی آموزشی این پروژه نیز مشاهده کنید.
برای راه اندازی این پروژه به قطعات زیر احتیاج دارید:
قبل از شروع پروژه، بهتر است با این قطعات و دلیل انتخاب آنها برای این پروژه بهتر آشنا شوید.
برای ارسال اطلاعات در بستر اینترنت نیاز است از بوردی استفاده کنید که دارای هسته وای-فای باشد. به همین دلیل است که بر خلاف پروژههای قبلی، نمیتوان از بورد آردوینو اونو (Arduino Uno) در این پروژه استفاده کرد. اما، ESP32 تراشهای است که قابلیت اتصال به شبکه وای-فای را دارد و میتوان از آن برای راهاندازی پروژههای اینترنت اشیا استفاده کرد. ماژول NodeMCU ESP32 یک بورد توسعه مخصوص ماژول وای فای ESP32 است. این ماژول شامل تراشه ESP32، پینهای ورودی و خروجی دیجیتال، تغذیه، دکمه بوت (Boot) و ریست (Reset) است. ولتاژ کاری این ماژول ۳.۳ ولت میباشد.
تصویر این ماژول و پایههای آن را میتوانید در زیر مشاهده کنید.
ال ای دی (LED) یک قطعه الکترونیکی است که نسبت به شدت جریانی که از آن عبور دهیم، شدت خاصی از نور را بازتاب میکند. ال ای دی در دستگاههای مختلف برای نمایش وضعیت خاموش و روشن بودن دستگاه استفاده میشود.
LED دارای دو پایه است:
همانطور که گفتیم ال ای دی نسبت به جریان عبوری از آن، میزان نوری را بازتاب یا ساطع میکند. اما باید دقت کنیم که جریان زیادتر از حد نامی ال ای دی را از آن عبور ندهیم؛ چون جریان بیش از حد باعث سوختن ال ای دی میشود. برای کنترل جریان عبوری در مدار از یک قطعه الکترونیکی دیگر به نام مقاومت استفاده میکنیم و مقاومت را سر راه ال ای دی و منبع تغذیه قرار میدهیم. مقاومت بین پایه آند (+) و VCC، یا بین پایه کاتد و GND متصل میشود. مقدار مقاومت مورد استفاده به مشخصات روی LED بستگی دارد. بالطبع هر چقدر مقدار این مقاومت بیشتر باشد، نور ساطع شده از ال ای دی کمتر خواهد بود.
در برخی از LEDها که دارای مقاومت داخلی هستند، دیگر نیازی به استفاده مجدد از مقاومت نیست.
برای آشنایی بیشتر با ال ای دی و انواع آن این مقاله را مطالعه کنید.
ماژول ESP32 دارای پین هدرهایی است که میتواند روی بردبورد قرار بگیرد. پس با استفاده از فضای خالی وسط برد بورد، ماژول را روی بردبورد قرار داده و LED را نیز روی بردبورد قرار دهید. پایه مثبت ال ای دی را به پین شماره 2 ماژول ESP32 و پایه منفی آن را به زمین (GND) ماژول ESP32 وصل کنید.
چون ولتاژ کاری ماژول ESP32، 3.3 ولت است، دیگر نیازی به استفاده از مقاومت برای ال ای دی نیست; زیرا این مقدار ولتاژ توانایی سوزاندن ال ای دی را ندارد.
ابتدا وارد نرمافزار Arduino IDE شوید. میتوانید این نرم افزار را از وبسایت آردوینو دانلود و نصب کنید.
برای برنامه نویسی بوردهای 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 استفاده شده است.
هماکنون، کتابخانههای مورد نیاز این پروژه را نصب کنید:
برای اطلاعات بیشتر در رابطه با ArduinoJson میتوانید به مستندات آن در سایت arduinojson مراجعه کنید.
(میتوانید تمامی کدهای زیر را از گیتهاب تینگزپاد دانلود کنید.)
در ابتدا کتابخانهها را فراخوانی میکنیم.
توجه: کتابخانه AruinoJson و PubSubClient در کتابخانه تینگزپاد فراخوانی شدهاند، به همین دلیل شما آنها را در این قسمت مشاهده نمیکنید. در صورت نصب نبودن این دو کتابخانه، کد با ارور مواجه خواهد شد.
نام و رمز شبکه وای فای مورد نظر را مینویسیم.
در پلتفرم اینترنت اشیا تینگزپاد، هر دستگاه توکن (Access Token) مربوط به خودش را دارد که از آن به عنوان یک شناسه برای ارتباط بین پلتفرم و دستگاه استفاده میشود.
این توکن را در این قسمت از کد وارد میکنیم (راهنمای ایجاد دستگاه و کپی کردن توکن). سپس، سرور تینگزپاد و پورت MQTT آن را نیز تعریف میکنیم.
یک object از کتابخانه WiFiClient به نام wifiClient برای استفاده از تابعهای آن ایجاد میکنیم. همچنین، برای ایجاد شی MQTT هم از کتابخانه PubSubClient استفاده کرده و Object وای-فای را برای ارتباط با اینترنت به آن پاس میدهیم. سپس، یک object از تینگزپاد با نام thingspod ایجاد کرده و object وای فای و MQTT را به آن پاس میدهیم.
متغیرهای پروژه را تعریف میکنیم و پین شماره 2 ماژول ESP32 را به ledPin اختصاص میدهیم.
در تابع ()setup، تابع راه انداز وای فای را مینویسیم. این تابع را بعد از تابع ()setup به گونهای تعریف میکنیم که تا زمان اتصال موفق به وای فای، عبارت «.» در سریال مانیتور پرینت شود. سپس، با استفاده از دستور mqttClient.setServer سرور را راه اندازی میکنیم. چون قرار است در این پروژه ال ای دی را از راه دور و از طریق پلتفرم تینگزپاد روشن و خاموش (کنترل) کنیم، باید از روش RPC استفاده کنیم (روش RPC همان فراخوانی رویه از راه دور است.). وقتی درخواست RPC از سمت سرور به دستگاه ارسال میشود، تابع mqttCallback که در دستور mqttClient.setCallback(mqttCallback) استفاده شده است، فراخوانی میشود. در ادامه راجع به تابع فراخوانی MQTT توضیح خواهیم داد. در اینجا، پین ال ای دی را نیز به صورت خروجی تعریف میکنیم.
تابع راه انداز وای فای به این صورت است:
در این تابع، درخواستهای MQTT دریافت شده توسط دستگاه را به کتابخانه تینگزپاد ارجاع میدهیم. ورودیهای این تابع عبارت اند از:
در ادامه، تابعهای فراخوانی RPC را داریم. بدنه درخواست RPC نیاز به دو مقدار دارد:
در اینجا، ورودی شی setLedState که برابر با رشته "setLedState" است به عنوان Method درخواست RPC در نظر گرفته میشود که باید با رشته قرار داده شده در داشبورد تینگزپاد برابر باشد. وقتی درخواست RPC با این Method صورت گیرد، تابع ledStateCallback با مقادیر Params که به عنوان شی RPCData تعریف شده است، فراخوانی میشود. در اینجا چون مقادیر Params به صورت Boolean مقداردهی میشود، شی RPCData مقدار true یا false را اتخاذ میکند. در این تابع، این مقدار را به ال ای دی اختصاص میدهیم. همچنین، این مقدار را به عنوان Attribute ارسال میکنیم. (جهت آشنایی با مفهوم attribute در پلتفرم تینگزپاد، این مقاله را مطالعه کنید.)
در تابع حلقه ابتدا اتصال به وای فای صورت میگیرد و سپس ارتباط با سرور تینگزپاد برقرار میشود. پس از برقراری ارتباط، تابع mqttClientLoop از کتابخانه تینگزپاد فراخوانی میشود. این تابع دریافت داده از طریق پروتکل MQTT را بررسی میکند.
همچنین، برای دریافت درخواست RPC تعریف شده در قبل، تابع RPCSubscribe از کتابخانه تینگزپاد را با مقدار شی setLEDState فراخوانی میکنیم.
برای جزییات بیشتر این تابعها میتوانید کتابخانه تینگزپاد را مطالعه کنید.
تابع reconnectWifi() به این صورت است:
کد با موفقیت کامپایل شد. حالا برنامه را روی بورد ESP32 آپلود میکنیم.
(کد کامل برنامه را میتوانید در اینجا مشاهده و کپی کنید.)
حل مشکلات احتمالی: دقت داشته باشید که اگر کد با موفقیت کامپایل شد، اما هنگام آپلود شدن کد با خطا مواجه شدید، باید یک بار بورد ESP32 را بوت (Boot) کنید و سپس برنامه را مجددا روی بورد آپلود کنید. برای بوت کردن ماژول ESP32 کافی است ابتدا پوش باتن بوت (Boot Push Button) و سپس پوش باتن ریست (Reset Push Button) را روی بورد ESP32 فشار دهید و نگه دارید. سپس، ابتدا پوش باتن ریست و بعد از آن پوش باتن بوت را رها کنید. با این کار بورد ESP32 شما بوت میشود. حالا دوباره برنامه را آپلود کنید.
همچنین، توجه داشته باشید که پنجرههای مربوط به سریال مانیتور حتما بسته باشند چون در غیر این صورت ممکن است همچنان با همین خطا مواجه شوید.
اکنون به سراغ پلتفرم تینگزپاد میرویم تا از طریق پلتفرم، ال ای دی را روشن و خاموش کنیم. برای این کار ابتدا وارد سایت تینگزپاد شوید. برای این کار ابتدا وارد وبسایت تینگزپاد شوید و اگر حساب کاربری ندارید، یک حساب کاربری رایگان بسازید که از 5 دستگاه و 1 میلیون دیتاپوینت ماهانه پشتیبانی میکند. سپس، وارد حساب کاربری خود شوید.
ایجاد دستگاه: اول باید یک دستگاه ایجاد کنیم. منظور از دستگاه همان ال ای دی است. برای این کار، وارد صفحه Device Groups شوید، یک گروه برای دستگاههای این پروژه ایجاد کرده و سپس، در این گروه یک دستگاه به نام LEDControl بسازید. در تینگزپاد، هر دستگاه توکن (Access Token) مربوط به خودش را دارد که به عنوان یک شناسه برای ارتباط بین پلتفرم و دستگاه استفاده میشود. روی اسم دستگاه یا همانLEDControl کلیک کرده و از منوی باز شده روی گزینه Copy access token کلیک کنید. همانطور که در بالا گفته شد، از این توکن در نرم افزار آردوینو استفاده میکنیم.
ایجاد داشبورد: برای ایجاد داشبورد در پلتفرم تینگزپاد، وارد صفحه گروه داشبوردها (Device Groups) میشویم، یک گروه داشبورد برای این پروژه ایجاد کرده و داخل آن یک داشبورد میسازیم. سپس، وارد صفحه این داشبورد میشویم و ویجت Round Switch را انتخاب میکنیم. یک مستعار (Alliance) برای دستگاه انتخاب کرده و این نام مستعار را به ویجت اضافه میکنیم. سپس در تب Advanced ویجت، گزینه don’t retrieve را انتخاب کرده و در قسمت setValue هم همان متدی که در نرم افزار آردوینو وارد کرده بودیم را قرار میدهیم.
اکنون مشاهده میکنید که با یک کردن کلید از طریق پلتفرم، ال ای دی روشن شده و در سریال مانیتور آردوینو هم عبارت true برگردانده میشود. همچنین با صفر کردن کلید، ال ای دی خاموش میشود. اگر روی دستگاه LEDControl کلیک کرده و به قسمت Attributes بروید، مشاهده میکنید که وضعیت ال ای دی یا همان ledState معادل false میباشد و با یک کردن کلید، ledState به true تبدیل میشود.
البته شما میتوانید وضعیت ال ای دی را از طریق یک ویجت در پلتفرم تینگزپاد نیز نمایش دهید. به این منظور از قسمت ویجتهای کنترلی، LEDControl را انتخاب کرده و نام مستعار را در ویجت قرار دهید. سپس، در تب Advanced تیک گزینه perform rpc device status check را برداشته و در قسمت Value هم نام مشخصهای (attribute) که در آردوینو وارد کردید را وارد کنید. (منظور همان ledState است.) حالا مشاهده میکنید که با یک کردن کلید، نشانگر روشن و با صفر کردن کلید، نشانگر خاموش میشود.
از زندگی روزمره گرفته تا صنایع مختلف، کنترل کردن وسایل و تجهیزات از راه دور به امری نه تنها کاربردی بلکه ضروری تبدیل شده است. به طور مثال، فرض کنید از خانه خارج شدید اما فراموش کردید که سیستم روشنایی را خاموش کنید یا سشوار خود را از برق بکشید؛ با اتصال این تجهیزات به اینترنت میتوانید به راحتی از طریق تلفن همراهتان از هرجایی آنها را خاموش یا روشن کنید. یا یک جلسه مهم را تصور کنید که قرار است صبح اول وقت در دفتر کار شما برگزار شود؛ میتوانید قبل از رسیدن به دفتر با روشن کردن سیستم تهویه فضای دفتر را برای جلسه حرفهای خود آماده کنید. احتمالا چندین مثال دیگر از صنایع مختلف به ذهن خودتان رسیده باشد. و حالا شما میتوانید این مثالها را به حقیقت تبدیل کنید.
البته، ال ای دی (LED) به عنوان یک مثال ساده در این پروژه استفاده شده است و شما میتوانید همین پروژه را با قطعات مختلف مانند موتور، فن و لامپ نیز انجام دهید و آنها را از طریق اینترنت در پلتفرم اینترنت اشیا تینگزپاد کنترل کنید. اگر به دنبال ایده هستید، نمونه داشبوردهای ساخته شده توسط تینگزپاد را در صفحه کاربردها مشاهده کنید.
در نتیجه، با یادگیری اصول کلی کار با سختافزارهای اینترنت اشیا، پلتفرم اینترنت اشیا تینگزپاد، درک صحیح نیاز مشتری و چاشنی خلاقیت خود میتوانید پروژهها و محصولات هوشمندی را برای بازارهای مختلف توسعه داده و درآمدزایی کنید!
تمرکز اصلی آکادمی تینگزپاد بر آموزش مفهوم اینترنت اشیا و انجام پروژههای هوشمندسازی مرتبط با این فناوری است. اما قدم اول در یادگیری این مفهوم، شناخت نسبتا خوب از دنیای الکترونیک و کار با سرورهای ابری است. بنابراین، پیشنهاد میکنیم خود را به چالش بکشید و سایر پروژههای آکادمی تینگزپاد را نیز انجام دهید. همچنین، خودتان را محدود نکنید و با جایگزینی قطعات و تغییر در برنامه، پروژههای خلاقانه جدید ایجاد کنید.
اگر به مباحث هوشمندسازی و اتوماسیون علاقهمند هستید، مقالات مرتبط با این حوزه را در وبلاگ مطالعه کنید و ویدیوهای آموزشی ما را در یوتیوب و آپارات مشاهده کنید.