آردوینو اینترنت اشیا IOT برد Esp32 برد ESP8266 برد Nodemcu

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

شروع کار با ESP-NOW (تبادل داده بین برد های ESP32)
نوشته شده توسط CiferTech

در این آموزش یاد میگیریم که چطور با پروتکل ESP-NOW کار کنیم و در واقع بین برد های ESP32 که در اختیار یک مکالمه بر قرار کنیم و اطلاعات را بین برد ها مبادله کنیم تا ارتباطی موثر بوجود بیاوریم. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

آشنایی با ESP Now اتصال چند برد ESP به یکدیگر - دیجی اسپارک

 

لینک اجرای این پروژه در لایو اینستاگرام

 


پروتکل ESP-Now


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

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

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

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

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

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

 


برد ESP32


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

برد NodeMCU برپایه تراشه ESP32 - دیجی اسپارک

 


سناریو های مختلف پروتکل ESP-NOW


  • ارتباط یک طرفه: در این سناریو یکی از برد های ESP32 اقدام به ارسال اطلاعات به برد دیگر می کند به این صورت که برای مثال با خواندن مقدار سنسور در ESP دوم یک GPIO فعال/غیر فعال می شود.

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

 

  • یک Master و چند Slave: در این مورد یک ESP فرمان های مختلف یا یکسانی را برای دیگر ESP ها ارسال می کند، ایده به این صورت است که با این سناریو شما می توانید چند وسیله مختلف که در آن ESP وجود دارد را با یک ESP32 کنترل کنید.

مدیریت چندین برد ESP32 با یک برد ESP در پروتکل ESP-NOW - دیجی اسپارک

 

  • یک Slave و چند Master: در این سناریو یک ESP دیتا و اطلاعات را از دیگر ESP ها جمع آوری می کند، برای مثال فرض کنید در خانه خود چند ESP با سنسور دما نصب کرده اید در این محیط یک ESP به عنوان نود اصلی، اطلاعات سنسور ها را جمع آوری میکند و برای ما ارسال میکند برای مثال می توانیم تمام اطلاعات را در یک وب سرور به نمایش در بیاوریم.

دریافت اطلاعات چندین برد ESP توسط یک برد ESP32 در پروتکل ESP-NOW - دیجی اسپارک

 

  • ارتباط دو طرفه: در این مورد هر دو برد می توانند در هر لحظه دریافت کننده یا ارسال کننده باشند.

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

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

ارتباط چندین برد ESP در پروتکل ESP-NOW - دیچی اسپارک

 


پیش نیاز ها


در این آموزش از برد ESP32 استفاده می کنیم، در ادامه مراحل را برای نصب این برد در نرم افزار آردوینو دنبال کنید:

  • ابتدا در نرم افزار Arduino IDE به مسیر FilePreferences بروید.

تنظیمات نرم افزار آردوینو در راه اندازی پروتکل ESP-NOW - دیجی اسپارک

  • لینک زیر را در بخش مشخص شده قرار دهید.
https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json

 

تنظیمات نرم افزار Arduino IDE در راه اندازی پروتکل ESP-NOW - دیجی اسپارک

  • سپس به مسیر Tools > Board > Boards Manager بروید.

تنظیم نرم افزار آردوینو برای راه اندازی پروتکل ESP-NOW - دیجی اسپارک

  • در بخش board manager  کلمه ESP32  را سرچ کنید و بر روی install  کلیک کنید.

نصب برد ESP32 در نرم افزار آردوینو برای راه اندازی پروتکل ESP-NOW - دیجی اسپارک


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


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

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

روش نصب کتابخانه در Arduino IDE

 


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


قبل از اینکه یاد بگیریم چطور این مک آدرس ها را بدست بیاوریم، بهتر است معنی و مفهوم مک آدرس را یاد بگیریم و در کل اصلا چرا وجود دارند! خب اگر قرار باشد دستگاهی به شبکه اینترنت متصل شود در کل دو آدرس به آن اختصاص داده خواهد، اول ip، که در مقام یک آدرس منطقی قرار دارد و در ادامه MAC address که در مقام آدرس فیزیکی برای دستگاه ما می باشد و عملا اثر انگشت دیوایس های هوشمند امروزی می باشد. در ضمن حروف MAC مخفف شده جمله Media Access Control می باشند. مک آدرس ها از ۴۸ بیت با ارقام هگزادسیمال تشکیل شده اند و با ساختاری به این شکل یافت می شوند xx:xx:xx:xx:xx:xx و هر xx معادل ۸بیت یا یک بایت می باشد. به تصویر زیر توجه کنید! ۲۴ بیت اول توسط شرکت سازنده کارت سبکه مشخص می شود و در  ادامه ۲۴ بیت دوم تعداد دستگاه های قابل شماره گذاری را نشان می دهد.

بدست آوردن مک آدرس برد ESP32 - دیجی اسپارک

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

#include "WiFi.h"
 
void setup(){
  Serial.begin(115200);
  WiFi.mode(WIFI_MODE_STA);
  Serial.println(WiFi.macAddress());
}
 
void loop(){

}

 پس از آپلود کد، در سریال مانیتور Arduino IDE می توانید مک آدرس خود را مشاهده کنید. مک آدرس را ذخیره کنید زیرا در پروژه اصلی به آن نیاز داریم.

مک آدرس برد ESP32 در آموزش پروتکل ESP-NOW - دیجی اسپارک

 


راه اندازی ارتباط یک طرفه ESP-NOW


ابتدا در یک ساختار متغیر هایی را در انواع charintfloatString و boolean ارسال می کنیم و سپس اقدام به پردازش و تشخیص داده در دومین ESP میکینم.

مشخصه هایی که باید در ESP ارسال کننده وجود داشته باشد:

  • مقدار دهی اولیه ESP-NOW.
  • ارسال اطلاعات به دریافت کننده.
  • اضافه کردن دستگاه دریافت کننده با استفاده از مک آدرس.
  • استفاده از تابع callback که به ما اطلاع می دهد پیام ارسال شده یا مشکلی در مسیر ارسال پیش آمده.

 

مشخصه هایی که باید در ESP دریافت کننده وجود داشته باشد:

  • مقدار دهی اولیه ESP-NOW.
  • ذخیره پیام های دریافتی با تابع callback.
  • استفاده تابع callback برای ثبت پیام های دریافتی.

 


کد مرجع برای ESP ارسال کننده


از کتابخانه های زیر در کد استفاده شده است، که برای اضافه کردن پروتکل ESP-NOW از esp_now.h استفاده می کنیم.

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

 

در این قسمت مک آدرس دستگاه دریافت کننده را وارد میکنیم.

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

 

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

 

 


کد مرجع برای ESP دریافت کننده


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

 

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

 

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

 

 


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


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

 


 جمع بندی


در نهایت پس از آپلود کد پروتکل ESP-Now داخل دو ESP مورد نظر، یکی از آن ها به عنوان ارسال کننده و دیگری به عنوان دریافت کننده عمل می کند و ذر نهایت می توانید نتیجه را در Serial Monitor نرم افزار آردوینو مشاهده کنید. در آموزش های بعدی به توضیح بیشتر و همچنین انجام پروژه مختلف برای سناریو های ESP-NOW می پردازیم.

 

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

 

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

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

CiferTech

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

۹ دیدگاه

  • سلام هنگام کامپایل ارور کتابخانه iesp_now.h رو به من میده و با کلی سرچ تو گوگل موفق نشدم که این کتابخانه رو به اردوینو اضافه کنم
    ارور:
    Arduino: 1.8.13 (Windows 7), Board: “NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200”
    #include
    ^
    compilation terminated.
    exit status 1
    esp_now.h: No such file or directory
    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

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

    • با سلام، این امکان وجود دارد. برای پشتیبانی و همچنین درخواست پروژه می توانید در بخش تیکت های سایت دانشجوکیت درخواست خود را مطرح کنید.

  • سلام
    ممنونم از این مدیران سایت
    نام کتابخانه های مربوط پروتکل esp – nowرو لازم دارم
    همچنین در حالت یک مستر و چند اسلیو میشه از برد های همسان استفاده کنم؟

    • سلام، اسم کتابخانه espnow و esp_now است داخل گیت هاب یا خود آردوینو سرچ کنید مواردی زیادی موجود است.
      بله این امکان وجود دارد.