۱۸ بهمن ۱۴۰۲
   
آکادمی

کنترل ال ای دی از طریق اینترنت و ماژول ESP32 | پروژه اینترنت اشیا

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

در پروژه روشن و خاموش کردن ال ای دی از طریق اینترنت، از مفهوم اینترنت اشیا و معماری اینترنت اشیا استفاده شده است. برای همین بهتر است ابتدا درک مقدماتی از مفهوم اینترنت اشیا داشته باشید؛ اینترنت اشیا مجموعه‌ای از اشیای مختلف است که با مجهز شدن به سنسورها می‌توانند اطلاعات محیط اطراف خود را دریافت کنند و آن اطلاعات را از طریق شبکه (اینترنت یا اینترانت) با انسان‌ها یا سایر اشیا به اشتراک بگذارند. با بکارگیری اینترنت اشیا، انسان‌ها می‌توانند از طریق نرم‌افزارهای موبایل یا وب، از راه دور و در هر لحظه از وضعیت اشیا مطلع شوند و آن‌ها را کنترل کنند.

در این مقاله قرار است با بکارگیری ماژول NodeMCU ESP32، ال ای دی و پلتفرم اینترنت اشیا تینگزپاد یک پروژه بسیار کاربردی در زمینه اینترنت اشیا انجام دهیم. به جای ال ای دی در این پروژه می‌توان از انوواع موتور، لامپ یا فن نیز استفاده کرد.

 

راه اندازی پروژه

در این پروژه ابتدا وضعیت ال ای دی را در بستر اینترنت نمایش می‌دهیم و با استفاده از ویجت‌های کنترلی پلتفرم اینترنت اشیا تینگزپاد، این ال ای دی را از راه دور خاموش و روشن می‌کنیم. مراحل انجام و نتیجه نهایی را می‌توانید در ویدیوی آموزشی این پروژه نیز مشاهده کنید.

 

برای راه اندازی این پروژه به قطعات زیر احتیاج دارید:

  • ماژول NodeMCU ESP32
  • ال ای دی- (رنگ آن مهم نیست)
  • برد بورد (Breadboard)- (نوع آن مهم نیست)
  • سیم جامپر نری به نری

قبل از شروع پروژه، بهتر است با این قطعات و دلیل انتخاب آن‌ها برای این پروژه بهتر آشنا شوید.

 

ماژول NodeMCU ESP32 چیست؟

برای ارسال اطلاعات در بستر اینترنت نیاز است از بوردی استفاده کنید که دارای هسته وای-فای باشد. به همین دلیل است که بر خلاف پروژه‌های قبلی، نمی‌توان از بورد آردوینو اونو (Arduino Uno) در این پروژه استفاده کرد. اما، ESP32 تراشه‌­ای است که قابلیت اتصال به شبکه وای-فای را دارد و می­‌توان از آن برای راه‌اندازی پروژه‌­های اینترنت اشیا استفاده کرد. ماژول NodeMCU ESP32 یک بورد توسعه مخصوص ماژول وای فای ESP32 است. این ماژول شامل تراشه ESP32، پین­‌های ورودی و خروجی دیجیتال، تغذیه، دکمه بوت (Boot) و ریست (Reset) است. ولتاژ کاری این ماژول ۳.۳ ولت می‌باشد.

تصویر این ماژول و پایه‌های آن را می‌توانید در زیر مشاهده کنید.

 

ال ای دی (LED) چیست؟

ال ای دی (LED) یک قطعه الکترونیکی است که نسبت به شدت جریانی که از آن عبور دهیم، شدت خاصی از نور را بازتاب می‌کند. ال ای دی در دستگاه‌های مختلف برای نمایش وضعیت خاموش و روشن بودن دستگاه استفاده می‌شود.

LED دارای دو پایه است:

  • پایه منفی (کاتد): این پایه نسبت به پایه مثبت کوتاه‌تر است و هنگام بستن مدار، به زمین (GND) وصل می‌شود.
  • پایه مثبت (آند): این پایه نسبت به پایه منفی بلندتر است و حالت LED را کنترل می‌کند.

همانطور که گفتیم ال ای دی نسبت به جریان عبوری از آن، میزان نوری را بازتاب یا ساطع می‌کند. اما باید دقت کنیم که جریان زیادتر از حد نامی ال ای دی را از آن عبور ندهیم؛ چون جریان بیش از حد باعث سوختن ال ای دی می‌شود. برای کنترل جریان عبوری در مدار از یک قطعه الکترونیکی دیگر به نام مقاومت استفاده می‌کنیم و مقاومت را سر راه ال ای دی و منبع تغذیه قرار می‌دهیم. مقاومت بین پایه آند (+) و VCC، یا بین پایه کاتد و GND متصل می‌شود. مقدار مقاومت مورد استفاده به مشخصات روی LED بستگی دارد. بالطبع هر چقدر مقدار این مقاومت بیشتر باشد، نور ساطع شده از ال ای دی کمتر خواهد بود.

در برخی از LEDها که دارای مقاومت داخلی هستند، دیگر نیازی به استفاده مجدد از مقاومت نیست.

برای آشنایی بیشتر با ال ای دی و انواع آن این مقاله را مطالعه کنید.

 

بستن مدار و اتصال به ماژول NodeMCU ESP32

ماژول ESP32 دارای پین هدرهایی است که می‌­تواند روی بردبورد قرار بگیرد. پس با استفاده از فضای خالی وسط برد بورد، ماژول را روی بردبورد قرار داده و LED را نیز روی بردبورد قرار دهید. پایه مثبت ال ای دی را به پین شماره 2 ماژول ESP32 و پایه منفی آن را به زمین (GND) ماژول ESP32 وصل کنید.

چون ولتاژ کاری ماژول ESP32،  3.3 ولت است، دیگر نیازی به استفاده از مقاومت برای ال ای دی نیست; زیرا این مقدار ولتاژ توانایی سوزاندن ال ای دی را ندارد. 

 

برنامه نویسی در محیط آردوینو IDE

ابتدا وارد نرم‌افزار 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 استفاده شده است.

هم‌اکنون، کتابخانه‌­های مورد نیاز این پروژه را نصب کنید:

  • کتابخانه WiFi: این کتابخانه برای اتصال به شبکه وای فای و اسکن شبکه‌­های وای-فای می­باشد. این کتابخانه هنگام نصب افزونه­ ESP32 به طور خودکار برای شما نصب می‌­شود.
  • کتابخانه Thingspod: از این کتابخانه برای سادگی کار با پلتفرم تینگزپاد استفاده می­شود. برای نصب این کتابخانه به گیت­هاب تینگزپاد مراجعه کرده و کتابخانه را دانلود کنید. سپس از منوی 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 در کتابخانه تینگزپاد فراخوانی شده­اند، به همین دلیل شما آن­ها را در این قسمت مشاهده نمی­کنید. در صورت نصب نبودن این دو کتابخانه، کد با ارور مواجه خواهد شد. 

نام و رمز شبکه وای فای مورد نظر را می‌­نویسیم.

در پلتفرم اینترنت اشیا تینگزپاد، هر دستگاه توکن (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 دریافت شده توسط دستگاه را به کتابخانه تینگزپاد ارجاع می­‌دهیم. ورودی‌­های این تابع عبارت اند از:

  • topic: نام تاپیک MQTT که سرور بر روی آن داده ارسال می‌­کند.
  • payload: داده ارسال شده توسط سرور
  • length: طول داده ارسال شده توسط سرور

 

 

در ادامه، تابع­‌های فراخوانی RPC را داریم. بدنه درخواست RPC نیاز به دو مقدار دارد: 

  1. Method: نامی برای تشخیص فراخوانی­‌های RPC
  2. Params: پارامترهای مورد استفاده برای پردازش درخواست

 

در اینجا،  ورودی شی 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) به عنوان یک مثال ساده در این پروژه استفاده شده است و شما می‌توانید همین پروژه را با قطعات مختلف مانند موتور، فن و لامپ نیز انجام دهید و آن‌ها را از طریق اینترنت در پلتفرم اینترنت اشیا تینگزپاد کنترل کنید. اگر به دنبال ایده هستید، نمونه داشبوردهای ساخته شده توسط تینگزپاد را در صفحه کاربردها مشاهده کنید.

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

 

بعد از این پروژه چکار کنم؟

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

اگر به مباحث هوشمندسازی و اتوماسیون علاقه‌مند هستید، مقالات مرتبط با این حوزه را در وبلاگ مطالعه کنید و ویدیوهای آموزشی ما را در یوتیوب و آپارات مشاهده کنید.

راجع به این موضوع بیشتر می‌دانید؟ محتوای خود را برای ما ارسال کنید تا آن را با نام خودتان منتشر کنیم.

سریع‌تر از دیگران از اتفاقات با خبر شوید

در کمتر از یک دقیقه ثبت نام کرده و سریع‌تر از دیگران با جریان اطلاعات همراه شوید.