اینترنت اشیا IOT برد Esp32 برد Nodemcu برد ویموس Wemos خانه هوشمند

کنترل وسایل برقی از راه دور با پروتکل ESP-NOW و برد ESP32

نوشته شده توسط CiferTech

همواره در پروژه های مختلف یکی از موادری که نظر ما را جلب میکند و مفید واقع می‌شود کنترل ماژول رله به روش های مختلف است که در نتیجه آن قادر خواهیم بود هر واسیله برقی را کنترل کنیم، در این آموزش بوسیله پروتکل ESP-NOW قصد از راه دور یک رله را کنترل و به آن فرمان دهی کنیم. به عبارتی اقدام به کنترل وسایل برقی با ESP-Now میکنیم. لازم به ذکر در فضای باز می‌توانیم تا ۱۵۰ متر فاصله بین فرستنده و گیرنده ایجاد کنیم و همچنان رله قابل کنترل باشد. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 

کنترل وسایل برقی با پروتکل ESP-Now - دیجی اسپارک

 


پروتکل ESP-Now


ESP-NOW یک پروتکل ارتباطی بی سیم است که توسط Espressif ساخته شده و دارای قابلیت انتقال پکت است. این پروتکل چندین دستگاه را قادر می سازد تا به روشی آسان با یکدیگر صحبت کنند و اطلاعات را بصورت بهینه بین یکدیگر انتقال دهند. این  پروتکل مشابه اتصال بی سیم ۲٫۴GHz است، که اغلب در ماوس های بی سیم استفاده می شود. بنابراین، جفت شدن دستگاه ها قبل از برقراری ارتباط لازم است. این به این معنی است که پس از جفت شدن دستگاه ها با یکدیگر، اتصال پایدار است. به عبارت دیگر، اگر بطور ناگهانی یکی از ESP های شما قطع شود یا ریست شود، هنگام راه اندازی مجدد بطور خودکار اتصال برقرار می شود.

کنترل وسایل برقی با پروتکل ESP-Now و برد ESP8266 - دیجی اسپارک

مزیت های پروتکل ESP-NOW

  • انتقال داده تا ۲۵۰ بایت.
  • بهره مندی از ارتباط رمزگذاره شده.
  • استفاده از Call Back برای اطلاع رسانی به لایه های مختلف در صورت موفقیت یا عدم موفقیت در انتقال داده.

 

محدودیت های پروتکل ESP-NOW

  • حدکثر محدوده ۲۵۰payload بایت.
  • حداکثر پشتیبانی از ۱۰عدد SoftAP رمزگذاری شده.
  • حداکثر تعداد پشتیباتی در حالت رمزگذاری نشده ۲۰ عدد.

 


نقش فرستنده و گیرنده


در این پروژه برد فرستنده که برد nodemcu با تراشه ESP32 در نظر گرفته شده، وظیفه تحلیل موقعیت یک میکروسویییچ را دارد. در طرف دیگر سناریو برد Wemos D1 MINI قرار دارد که وظیفه دریافت این تغییرات و در نتیجه فعال و غیرفعال کردن ماژول رله را دارد.

 


 برد Wemos


برد Wemos یکی از پرطرافدار ترین برد هایی است که در زمینه iot مورد استفاده قرار میگیرد، یکی از مزیت های این برد نسبت به برد هایی مانند Node MCU اندازه کوچک آن می باشد تراشه وای فای مورد استفاده در این برد ESP8266 می باشد. از دیگر مزیت های این برد وجود شیلد های مختلفی برای این برد می باشد، که انجام هر پروژه ای را برای کاربر بسیار آسان و لذت بخش می کند، شیلد هایی از جمله شیلد باتری، multi sensor ، DHT22 ، رله ، oled تعداد بسیار زیادی شیلد برای این برد توسعه داده شده که در نتیجه تجربه خوبی از iot برای شما به جا خواهد گذاشت. در این آموزش از برد ویموس به عنوان گیرنده در کنترل وسایل برقی با ESP-Now از راه دور استفاده می‌کنیم.

 


برد ESP32


ESP32 نسل پیشرفته ESP8266 است. یکی از تفاوت‌های آن بلوتوث داخلی‌اش می‌باشد. همچنین دارای هسته وایفای ۲,۴ گیگا هرتزی و بلوتوث داخلی تولید شده با تکنولوژی ۴۰ نانومتری شرکت TSMC می‌باشد. این ماژول دارای بهترین پرفورمنس در مصرف انرژی می‌باشد یعنی با کمترین مصرف انرژی بهترین نتیجه را برای ما به همراه دارد. اگر بخواهیم دقیق‌تر به این برد نگاه کنیم باید بگوییم که این یک chip است که پلتفرم NodeMCU در اون پیاده سازی شده که به این نوع چیپ ها System on a chip microcontrollers هم گفته می‌شود.

 


روش کار این پروژه


در این پروژه از دو برد ESP32 و Wemos استفاده کردیم که یکی از برد ها در این سناریو در حالت Master قرار خواهد گرفت تا دیتای مد نظر را تحلیل و به برد دوم یعنی بردی که در حالت Slave قرار دارد ارسال کند برد دوم ما وظیفه دریافت این دیتا، تحلیل موارد دریافتی و فعال کردن ماژول رله را بر اساس دیتای دریافتی دارد. از آنجایی که از دو برد ESP استفاده می‌کنیم، قادر هستیم این دیتا را تا ۱۰۰ متر نیز ارسال و دریافت کنیم.

کنترل رله توسط پروتکل ESP-Now - دیجی اسپارک

 


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


برد wemos

برد ESP برپایه تراشه ESP8266 یا ESP32

ماژول رله Relay

میکرو سوویچ

مقاومت ۱K

کابل جامپر مخصوص اتصالات سنسور و بردها

وسایل لازم برای کنترل وسایل برقی با پروتکل ESP-Now - دیجی اسپارک

 


نصب کتابخانه مرجع


در این بخش اقدام به نصب کتابخانه مرجع ESP-NOW خواهیم کرد تا در نتیجه این امکان فراهم شود که از توابع و دستورات مورد نیاز در کد پروژه استفاده کنیم. در صورت دریافت هرگونه ارور مبنی بر عدم وجود کتابخانه espnow.h طبق مراحل زیر پیش بروید.

  1. این مسیر را دنبال کنید Sketch Include Library > Manage Libraries
  2. کلمه espnow را جستجو کنید.
  3. کتابخانه را نصب کنید.

 


بدست آوردن مک آدرس ESP32


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

 


کد و شماتیک ESP32 ارسال کننده


در اولین مرحله اتصالات برد ارسال کننده که شامل برد ESP32 و میکروسوویچ و همچنین یک مقاومت است را برقرار خواهیم کرد، اتصالات را مطابق شماتیک و جدول زیر برقرار کنید.

اتصال میکروسوئیچ به برد ESP32 - دیجی اسپارک

  • شماتیک بخش فرستنده پروژه کنترل رله از راه دور بوسیله پروتکل ESP-NOW.

شماتیک اتصال میکروسوئیچ به برد ESP32 - دیجی اسپارک

 

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

#include <esp_now.h>
#include <WiFi.h>

 

در این بخش Mac Address های بدست آمده از ESP های دریافت کننده را وارد می کنیم.

uint8_t broadcastAddress1[] = {0xBC,0xDD,0xC2,0xB3,0xC4,0xC2}; // محل قرارگیری مک آدرس 

 

در این مرحله ساختار دیتای ارسالی را مشخص می‌کنیم. که در این سناریو ۰ یا ۱ میباشد، من از int استفاده کردم در صورت نیاز میتوانید از boolean استفاده کنید.

typedef struct test_struct {  // ساختار دیتا مدنظر ما
  int x;
} test_struct;

 

این متغیر ها مربوط به فانکشن های میکروسوییچ هستتند تا بدرستی کار کند.

int buttonPushCounter = 0;   
int buttonState = 0;        
int lastButtonState = 0;

 

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

 if (buttonState != lastButtonState) {
    
    if (buttonState == HIGH) {
      
      buttonPushCounter++;
      Serial.println("on");
      Serial.print("number of button pushes: ");
      Serial.println(buttonPushCounter);
    } else {
      
      Serial.println("off");
    }
    
    //delay(50);
  }

 

کد کامل بخش فرستنده پروژه کنترل رله از راه دور بوسیله پروتکل ESP-NOW

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

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

 

 


کد و شماتیک Wemos دریافت کننده


در بخش پایانی این آموزش نوبت به راه‌اندازی ماژول دریافت کننده دیتا از برد ESP32 می‌رسد. همانطور که در بخش های قبلی اشاره کردیم این برد که Wemos نام دارد با تراشه ESP8266 وظیفه دریافت یک دیتا بین ۰ و ۱ از ارسال کننده است تا به این وسیله یک ماژول رله در مقصد کنترل شود. ابتدا اتصالات را طبق جدوا و شماتیک زیر برقرار کنید.

اتصالت ماژول رله به برد ویموس Wemos کنترل وسایل برقی با ESP-Now - دیجی اسپارک

 

  • شماتیک بخش گیرنده و فرمان دهی به ماژول رله

شماتیک کنترل وسایل برقی با پروتکل ESP-Now - دیجی اسپارک

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

void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) {
  memcpy(&myData, incomingData, sizeof(myData));
  Serial.print("Bytes received: ");
  Serial.println(len);
  Serial.print("X= ");
  Serial.println(myData.x);
  Serial.println();
}

 

در این قسمت دیتای ذخیره شده در myData ذخیره می‌کنیم.

temp_struct myData;

 

در این قسمت شرط برای فعال و غیر فعال کردن رله را بر اساس دیتای ذخیره شده در mydata.x مشخص می‌کنیم.

if(myData.x == 1)
    {
      pinMode(relay, HIGH);     
    }else
   {
      pinMode(relay, LOW);
   }

 

کد کامل بخش گیرنده پروژه کنترل رله از راه دور بوسیله پروتکل ESP-NOW

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

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

 

 


 جمع بندی


در این آموزش با استفاده از پروتکل ESP-NOW دیتای مدنظر را برای کنترل یک ماژول رله از برد ESP32 مقصد به یک برد Wemos که وظیفه کنترل ماژول رله داشت، ارسال کردیم با استفاده از این آموزش میتوانید وسایل اکترونیکی مختلفی را کنترل کنید و آن هارا بوسیله رله خاموش یا روشن کنید.

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

 

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

 

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

 

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

CiferTech

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

۱۲ دیدگاه

  • سلام مهندس.پروزه کنترل وسایل برقی برای کنترل روشنایی هم می توان استفاده کرد ممنون میشم راهنمایی کنید چون برای پروزه دانشگاهم میخام و خیلی عجله دارم وبرای خرید وسایل و موارد نیاز این پروزه راهنمایی کنید.۰۹۱۵۳۱۲۹۶۳۸

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

  • درود و عرض ادب
    من تمامی تنظیمات رو مطابق فرمایشات انجام دادم، ولی کامپایل نمیشه! ارور دارم و میگه Error compiling for board WeMos D1 R2 & mini.
    متوجه نمیشم دلیلش چی میتونه باشه
    لطفا کمک بفرمایید

    • سلام، خیلی ممنونم. در بخش انتخاب برد برای برد Wemos یک گزینه دیگر هم وجود دارد با نام Wemos mini pro، با این مورد فرایند را چک کنید.

  • سلام . چرا وقتی کلید رو میزنید چراغ با تاخیر روشن میشه؟ نمیشه سرعت روشن کردنش رو بیشتر کرد؟

  • عرض سلام و خداقوت
    آموزش ارتباط دو طرفه همین مدار رو هم بذارید لطفا
    یعنی در برد اولی دکمه فشرده شد led در برد دومی روشن بشه و دکمه برد دومی فشرده شد led برد اول روشن بشه
    ممنون

  • سلام ببخشید یک سوال بسیار فوری دارم من میخوام یک ماژول esp32 بخرم مشکل اینه میخوام بهترینش باشه و انتن خارجی داشته باشه اسمشو میدید؟

  • سلام ممنونم از مطلب مفیدی که به اشتراک گذاشتید
    من یه مشکل دارم . وقتی wifi.begin انجام میدم espnow از کار میوفته یعنی دیگه master نمیتونه پیامی به slave دلیور کنه. چطوری میتونم هم مستر رو به اینترنت وصل کنم هم به espnow ??
    پیشاپیش از راهنماییتون ممنونم

    • با سلام
      با توجه به سوال شما، به نظر می‌رسد که با مشکل تداخل بین اتصال به اینترنت و استفاده از ESP-NOW روبرو هستید. برخی از مدل‌های ESP8266 و ESP32 ممکن است مشکلاتی در هنگام استفاده همزمان از WiFi و ESP-NOW داشته باشند. برای حل این مشکل، می‌توانید از راهکارهای زیر استفاده کنید:

      استفاده از دو ماژول ESP باهم:
      از دو ماژول ESP8266 یا ESP32 جداگانه برای اتصال به اینترنت و برقراری ارتباط با ESP-NOW استفاده کنید.
      یکی از ESP مستر بشود و به اینترنت متصل شود.
      دیگری به عنوان اسلیو به ماستر متصل شود تا از طریق ESP-NOW ارتباط برقرار کنید.

      استفاده از MultiWiFi:
      اگر از کتابخانه‌های مدیریت وای-فای متعدد مانند “WiFiManager” یا “MultiWiFi” استفاده کنید، ممکن است بتوانید مشکل تداخل را حل کنید.
      با استفاده از این کتابخانه‌ها، می‌توانید به طور جداگانه تنظیمات اتصال به اینترنت و ESP-NOW را انجام دهید.

      تنظیمات اتصال به اینترنت:
      ممکن است مشکل از تداخل تنظیمات اتصال به اینترنت باشد. مطمئن شوید که تنظیمات WiFi شما به درستی انجام شده باشد و همچنین IP ثابت یا DHCP را به درستی تنظیم کنید.

      آپدیت به آخرین نسخه کتابخانه:
      اطمینان حاصل کنید که از آخرین نسخه کتابخانه ESP-NOW و کتابخانه وای-فای برای ESP استفاده می‌کنید. به‌روزرسانی به نسخه جدید ممکن است مشکل شما را حل کند.

      شاد و پیروز باشید.