یکی از دغدغه های جدید بشر استفاده راحت از اشیا است، در همین راستا کنترل لامپ با ESP8266 از پروژه های ساده اما کاربردی شناخته می شود.

آیا شما هم مایل هستید لامپ های اتاق را با استفاده از یک ماژول کوچک و کامپیوتر خودتان کنترل کنید؟

در این مقاله ویدیویی به زبان فارسی همراه با توضیحات کامل روند اجرای پروژه آورده ایم تا شما به بهترین نحو آن را پیاده کنید.

پروژه کنترل لامپ با ESP8266

دانلود pdf مقاله

کد نوشته شده برای کنترل لامپ با ESP8266

در محیط نرم افزار Atom کتابخانه ESP8266WiFi.h را اضافه کرده و
در بخش setup ارتباط سریال را با baud rate مساوی 115200 راه اندازی می کنیم.

کنترل لامپ با نرم افزار atom برای ESP8266

سپس ماژول ESP را به WiFi مورد نظر متصل می کنیم، برای این کار از دستور (WiFi.begin(SSID, pass استفاده می کنیم و
برای نمایش برقراری اتصال از دستور ()Serial.print استفاده کرده و Connecting را چاپ می کنیم.

در ادامه بررسی می کنیم که آیا مقدار ()WiFi.status مساوی مقدار از پیش تعریف شده WL_CONNECTED شده است یا نه؟ و
تا مادامی که این شرط برقرار نشده باشد با تاخیر 500 میلی ثانیه ای، یک نقطه چاپ می کنیم و
به محض برقرار شدن شرط، عبارت Connected را به همراه آدرس IP محلی اختصاص داده شده به آن نمایش می دهیم.

یک متغیر host که از نوع *const char مساوی مقدار IP کامپیوتر است و متغیر دیگری از نوع const uint_16 به اسم port و مقدار 3000 تعریف می کنیم.

پیدا کردن IP کامپیوتر

برای این که متوجه شویم IP کامپیوتر چند است در محیط cmd از دستور ipconfig استفاده می کنیم.

محیط cmd برای کنترل لامپ با ESP8266

تعریف داده host از نوع *const char به این دلیل است که آن را یک string مخصوص ++C تعریف کرده باشیم.

در ابتدای بخش loop، در ترمینال سریال نمایش می دهیم که
ماژول ESP به کدام host و با چه مقدار port متصل شده است.

کلاس WiFiClient در کد کنترل لامپ با ESP8266

در ادامه از کلاس WiFiClient استفاده می کنیم و یک object از آن با نام Client تعریف می کنیم.

توجه داشته باشید که اسامی مورد استفاده برای objectها دلخواه هستند و لزومی در استفاده از یک اسم خاص نیست.

یکی از ابزارهایی که این کلاس در اختیار ما قرار می دهد، دستور وصل شدن به WiFi است که
به صورت زیر نوشته می شود:

(client.connect(host, port

نوع ورودی های این تابع، string برای host و uint_16 برای port است.

این تابع بعد از صدا زده شدن مقدار true یا false برمی گرداند به این معنی که اتصال برقرار شده یا نشده است.

برای بررسی برقراری اتصال، نقیض این تابع را با دستور شرطی if بررسی می کنیم و
در صورت عدم برقراری اتصال عبارت “connection failed” و “…waiting 5 sec” را نمایش داده و
سپس تاخیر 5000 میلی ثانیه ای اعمال می کنیم تا زمان برای امتحان دوباره اتصال فراهم باشد.

در انتهای این بخش از دستور return استفاده می کنیم.

کاربرد دستور return

هرجایی از تابع return را بنویسیم، به محض رسیدن کامپایلر به آن، به خط اول تابع میرود و
هرچیزی پایین آن نوشته شود اجرا نخواهد شد.

این را هم ببینید
نقش کامپایلر در برنامه نویسی

ادامه کد

در بیرون از if عبارت “connected to host” را نمایش می دهیم چون خروج از حلقه if به معنی برقراری اتصال است.

بعد از متصل شدن روی سرور عبارت های مدنظرمان را می نویسیم برای این منظور از دستور client.println استفاده می کنیم.

این دستور عینا مشابه Serial.println عمل می کند و به جای نمایش داده ها روی ترمینال سریال،
عبارت نوشته شده را روی TCP می فرستد.

استفاده از نرم افزار SocketTest

بر روی کامپیوتر نرم افزار SocketTest را باز کرده و
IP Address را روی مقدار 0.0.0.0 و Port را روی مقدار 3000 تنظیم می کنیم و سپس start listening می کنیم.

نرم افزار Socket

در حین اجرای برنامه درون حلقه ممکن است هر از چندگاهی با مشکل اتصال رو به رو شده و
پیغام connection failed نمایش داده شود.

این مشکل به این دلیل پیش آمده است که بعد از هربار ارسال دیتا، ارتباط را غیرفعال نکرده ایم و
به همین دلیل گاهی اوقات در وقفه 5 ثانیه ای نوشته شده دوباره درخواست برقراری می دهد و
باعث می شود که خط مشغول به نظر رسیده و ارتباط failed شود.

برای رفع این مشکل کافی است در خط نهایی از دستور client.stop استفاده کنیم و بعد از آن 5 ثانیه تاخیر قرار می دهیم.

دریافت داده از کامپیوتر برای کنترل لامپ با ESP8266

دستور client.connected نمایش می دهد که آیا اتصالی برقرار است یا نه؟

دستور client.available برای این منظور استفاده می شود که نشان دهد آیا عبارتی برای خواندن در بافر وجود دارد یا خیر؟

در ادامه کد می خواهیم بررسی کنیم که آیا چیزی برای خواندن در بافر TCP موجود است؟
برای این منظور یک حلقه while روی OR دو شرط client.available و client.connected می نویسیم.

درون این while می خواهیم به حرفی که سرور (کامپیوتر) می زند، گوش دهیم.

در ابتدا با دستور if بررسی می کنیم که داده ای برای خواندن هست یا نه؟

دستور readStringUntil برای خواندن داده تا یک جای مشخص از یک بافر استفاده می شود.

یک متغیر از نوع string با اسم line تعریف می کنیم و مساوی مقدار readStringUntil با ورودی ‘r’ قرار می دهیم و
در ترمینال سریال آن را نمایش می دهیم.

برای تست کردن این قسمت از کد کافیست در بخش message نرم افزار Socket، یک عبارت را نوشته و ارسال کنیم.

مشکل ایجاد شده در روند اجرای کد و رفع آن

در این حالت با یک مشکل برخورد می کنیم که بین هر عبارت نوشته شده و بعدی آن دو خط فاصله می افتد.

علت این اتفاق این است که دکمه send را که می زنیم عبارت نوشته شده با rn ارسال می شود و
ما هم تا r آن را خواندیم و n درون بافر باقی مانده و
بعد از سپری شدن یک زمان مشخصی آن هم ارسال می شود.

برای رفع این مساله یک client.read بعد از تعریف مقدار line می نویسیم ولی با آن هیچ کاری نمی کنیم.

روشن و خاموش کردن لامپ با استفاده از ESP8266

با مقدار متغیر line کارهای مختلفی میتوان انجام داد،
برای مثال اگر مقدار این متغیر ON بود عبارت turning on the lamp را نمایش داده و
یا شرط مقدار OFF را بررسی کرد.

قطعات مورد نیاز مدار

  • ترانزیستور BC338
  • رله
  • مقاومت 1K
  • لامپ
  • ماژول ESP8266 ماژول ESP8266

بستن مدار لامپ و ESP8266

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

بیس با یک مقاومت 1k به یکی از پایه های GPIO مثل D0 و امیتر را هم به GND وصل می کنیم.

ادامه کد نوشته شده برای کنترل لامپ

در setup با استفاده از دستور digitalWrite، پین D0 را خروجی تعریف کرده و
مقدار آن را هنگام بررسی شرط ON متغیر، HIGH کرده و در بررسی شرط OFF مقدار LOW به آن می دهیم.

در نهایت با پروگرم کردن کد، با نوشتن مقدار ON در کادر message لامپ را روشن کرده و با نوشتن OFF آن را خاموش کنیم.

به راحتی می توان این کد را تعمیم داد و به جای یک لامپ تعداد زیادی لامپ را فعال کرد.

در این پروژه برقراری ارتباط کاملا از طریق WiFi بوده و هیچ ارتباطی بین مدار بسته شده و
کامپیوتر از طریق سیم کشی ها وجود ندارد.

برای اطمینان می توانید به جای اتصال برد به پورت USB لپتاپ از یک پاور بانک استفاده کنید.

درباره نویسنده : حانیه برمایون

حانیه برمایون
کارشناسی برق الکترونیک از دانشگاه علم و صنعت، علاقه مند به کار تولید محتوا هستم و همراه سایر اعضای تیم نماتک، برای رشد و پیشرفت صنعت و رسیدن شما به علاقه مندی هایتان، تلاش می کنم.

نظرتون درباره این مقاله چیه؟
ما رو راهنمایی کنید تا اون رو کامل تر کنیم و نواقصش رو رفع کنیم.
توی بخش دیدگاه ها منتظر پیشنهادهای فوق العاده شما هستیم.

۱۷ دیدگاه

  1. Avatar
    نیما اهن ساز ۱۴۰۳/۰۲/۲۷ در ۲۱:۰۷ - پاسخ

    سلام من برای ساخت دانگل با esp8266 وکابل و usb بهserial ودسکتاپ برای این پروژه به کمک نیاز دارم چون اموزش خوبی پیدانمیکنم؟

    • حانیه برمایون
      حانیه برمایون ۱۴۰۳/۰۲/۲۹ در ۰۹:۲۷ - پاسخ

      سلام جناب اهن ساز
      از همراهی شما با سایت نماتک متشکریم.
      با عرض پوزش ما یک مجموعه آموزشی هستیم و در زمینه های فنی ارائه خدمات و مشاوره و دانش مرتبط برای پاسخگویی به سوالات تخصصی عزیزان رو در بخش کامنت های سایت نداریم.
      تنها راه پیشنهادی ما این هست که از فضای فروم نماتک برای دریافت راهنمایی استفاده بفرمایید تا عزیزانی که در این زمینه دانش و شناخت کافی دارند، پاسخگوی سوالات شما باشند.
      آدرس فروم نماتک: https://katibeha.com/
      موفق باشید.

  2. Avatar
    ریحانه ۱۳۹۹/۱۲/۱۵ در ۱۷:۳۸ - پاسخ

    سلام این کد رو میشه تو اندروید استودیو نوشت و خروجی apk بگیریم و به عنوان اپلیکیشن ازش استفاده کنیم؟

    • حانیه برمایون
      حانیه برمایون ۱۳۹۹/۱۲/۱۶ در ۰۹:۴۵ - پاسخ

      سلام
      دوست عزیز ممنون میشم پرسش های تخصصی تون رو در بخش پرسش و پاسخ سایت مطرح بفرمایید تا عزیزان دارای تجربه و سابقه بیشتر در این زمینه شما رو راهنمایی کنن.
      موفق باشید
      katibeha.com

  3. Avatar
    sana ۱۳۹۹/۰۱/۲۸ در ۲۲:۳۸ - پاسخ

    سلام
    نمیتونم با نت ایرانسل یا هر نتی به این ماژول دسترسی داشته باشم
    مشکل از چیه؟

    • حانیه برمایون
      حانیه برمایون ۱۳۹۹/۰۱/۳۰ در ۱۰:۲۱ - پاسخ

      سلام
      سوالات فنی و علمی خودتون رو میتونید داخل فروم نماتک مطرح کنید.
      katibeha.com

      • Avatar
        علی نظام ابادی ۱۳۹۹/۱۱/۰۷ در ۱۹:۵۸ - پاسخ

        سلام ممنون از مقاله جامع وخوبتون

        • حانیه برمایون
          حانیه برمایون ۱۳۹۹/۱۱/۰۸ در ۱۶:۴۲ - پاسخ

          سلام جناب مهندس نظام آبادی
          سپاس بابت محبت تون
          موفق و پیروز باشید

  4. Avatar
    سجاد ۱۳۹۸/۰۷/۲۹ در ۰۶:۴۶ - پاسخ

    سلام. بسیار مقاله عالی بود. سپاسگزارم

    • حانیه برمایون
      حانیه برمایون ۱۳۹۸/۰۷/۲۹ در ۱۰:۱۱ - پاسخ

      سلام
      از لطف شما ممنونیم

  5. Avatar
    حمید ۱۳۹۸/۰۵/۰۸ در ۰۹:۲۱ - پاسخ

    برای برنامه نویسی از چه ide استفاده شده است؟

    • حانیه برمایون
      حانیه برمایون ۱۳۹۸/۰۵/۰۸ در ۱۱:۲۰ - پاسخ

      سلام
      این برنامه در محیط نرم افزار Atom نوشته شده.

  6. Avatar
    Mostafa ۱۳۹۸/۰۵/۰۷ در ۱۴:۱۲ - پاسخ

    ماژول ecp8266 رو هز کجا بگیریم؟
    تو ایران هست؟

    • حانیه برمایون
      حانیه برمایون ۱۳۹۸/۰۵/۰۷ در ۱۴:۴۲ - پاسخ

      سلام جناب مهندس بله این ماژول رو از سایت های فروش آنلاین قطعات الکترونیکی و یا پاساژ های فروش مثل پاساژ امجد توی تهران میتونید تهیه بفرمایید.

  7. Avatar
    محمدحسین حاجی محمدی ۱۳۹۸/۰۳/۳۱ در ۲۱:۳۵ - پاسخ

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

    • حانیه برمایون
      حانیه برمایون ۱۳۹۸/۰۴/۰۱ در ۱۰:۱۷ - پاسخ

      سلام.
      ماژول وای فای ESP8622 ورژن ۱۲ هست و بردی که توی آموزش استفاده شده همونطور که میبینید از نوع بردهای توسعه یافته هست که با اسم Node MCU معرفی میشه.
      توی سرچ این عنوان رو بزنید براتون مدلش رو میاره “برد توسعه وای فای Node MCU به همراه ماژول ESP8266-12E”
      موفق باشید

  8. Avatar
    erfan ۱۳۹۸/۰۳/۱۰ در ۱۵:۳۴ - پاسخ

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

ارسال دیدگاه