در این آموزش یاد میگیریم که چطور با پروتکل ESP-NOW کار کنیم و در واقع بین برد های ESP32 که در اختیار یک مکالمه بر قرار کنیم و اطلاعات را بین برد ها مبادله کنیم تا ارتباطی موثر بوجود بیاوریم. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
لینک اجرای این پروژه در لایو اینستاگرام
پروتکل ESP-Now
ESP-NOW یک پروتکل ارتباطی بی سیم است که توسط Espressif ساخته شده و دارای قابلیت انتقال پکت است. این پروتکل چندین دستگاه را قادر می سازد تا به روشی آسان با یکدیگر صحبت کنند و اطلاعات را بصورت بهینه بین یکدیگر انتقال دهند. این پروتکل مشابه اتصال بی سیم ۲٫۴GHz است، که اغلب در ماوس های بی سیم استفاده می شود. بنابراین، جفت شدن دستگاه ها قبل از برقراری ارتباط لازم است. این به این معنی است که پس از جفت شدن دستگاه ها با یکدیگر، اتصال پایدار است. به عبارت دیگر، اگر بطور ناگهانی یکی از ESP های شما قطع شود یا ریست شود، هنگام راه اندازی مجدد بطور خودکار اتصال برقرار می شود.
مزیت های پروتکل ESP-NOW
- انتقال داده تا ۲۵۰ بایت.
- بهره مندی از ارتباط رمزگذاره شده.
-
استفاده از Call Back برای اطلاع رسانی به لایه های مختلف در صورت موفقیت یا عدم موفقیت در انتقال داده.
محدودیت های پروتکل ESP-NOW:
- حدکثر محدوده ۲۵۰payload بایت.
- حداکثر پشتیبانی از ۱۰عدد SoftAP رمزگذاری شده.
- حداکثر تعداد پشتیباتی در حالت رمزگذاری نشده ۲۰ عدد.
برد ESP32
ESP32 نسل پیشرفته ESP8266 است. یکی از تفاوتهای آن بلوتوث داخلیاش میباشد. همچنین دارای هسته وایفای ۲,۴ گیگا هرتزی و بلوتوث داخلی تولید شده با تکنولوژی ۴۰ نانومتری شرکت TSMC میباشد. این ماژول دارای بهترین پرفورمنس در مصرف انرژی میباشد یعنی با کمترین مصرف انرژی بهترین نتیجه را برای ما به همراه دارد. اگر بخواهیم دقیقتر به این برد نگاه کنیم باید بگوییم که این یک chip است که پلتفرم NodeMCU در اون پیاده سازی شده که به این نوع چیپ ها System on a chip microcontrollers هم گفته میشود.
سناریو های مختلف پروتکل ESP-NOW
- ارتباط یک طرفه: در این سناریو یکی از برد های ESP32 اقدام به ارسال اطلاعات به برد دیگر می کند به این صورت که برای مثال با خواندن مقدار سنسور در ESP دوم یک GPIO فعال/غیر فعال می شود.
- یک Master و چند Slave: در این مورد یک ESP فرمان های مختلف یا یکسانی را برای دیگر ESP ها ارسال می کند، ایده به این صورت است که با این سناریو شما می توانید چند وسیله مختلف که در آن ESP وجود دارد را با یک ESP32 کنترل کنید.
- یک Slave و چند Master: در این سناریو یک ESP دیتا و اطلاعات را از دیگر ESP ها جمع آوری می کند، برای مثال فرض کنید در خانه خود چند ESP با سنسور دما نصب کرده اید در این محیط یک ESP به عنوان نود اصلی، اطلاعات سنسور ها را جمع آوری میکند و برای ما ارسال میکند برای مثال می توانیم تمام اطلاعات را در یک وب سرور به نمایش در بیاوریم.
- ارتباط دو طرفه: در این مورد هر دو برد می توانند در هر لحظه دریافت کننده یا ارسال کننده باشند.
در این سناریو می توانیم اگر تعداد برد های ESP32 را افزایش دهیم با تصویر زیر موجه می شویم که در نهایت تمام برد ها با هم تعامل خواهند داشت. در این مورد تمام نود ها با یکدیگر تعامل دارند مانند شبکه.
پیش نیاز ها
در این آموزش از برد ESP32 استفاده می کنیم، در ادامه مراحل را برای نصب این برد در نرم افزار آردوینو دنبال کنید:
- ابتدا در نرم افزار Arduino IDE به مسیر File> Preferences بروید.
- لینک زیر را در بخش مشخص شده قرار دهید.
https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json
- سپس به مسیر Tools > Board > Boards Manager بروید.
- در بخش board manager کلمه ESP32 را سرچ کنید و بر روی install کلیک کنید.
نصب کتابخانه مرجع
در صورت دریافت هرگونه ارور مبنی بر عدم وجود کتابخانه espnow.h طبق مراحل زیر پیش بروید.
- این مسیر را دنبال کنید Sketch > Include Library > Manage Libraries
- کلمه espnow را جستجو کنید.
- کتابخانه را نصب کنید.
بدست آوردن مک آدرس ESP32
قبل از اینکه یاد بگیریم چطور این مک آدرس ها را بدست بیاوریم، بهتر است معنی و مفهوم مک آدرس را یاد بگیریم و در کل اصلا چرا وجود دارند! خب اگر قرار باشد دستگاهی به شبکه اینترنت متصل شود در کل دو آدرس به آن اختصاص داده خواهد، اول ip، که در مقام یک آدرس منطقی قرار دارد و در ادامه MAC address که در مقام آدرس فیزیکی برای دستگاه ما می باشد و عملا اثر انگشت دیوایس های هوشمند امروزی می باشد. در ضمن حروف MAC مخفف شده جمله Media Access Control می باشند. مک آدرس ها از ۴۸ بیت با ارقام هگزادسیمال تشکیل شده اند و با ساختاری به این شکل یافت می شوند xx:xx:xx:xx:xx:xx و هر xx معادل ۸بیت یا یک بایت می باشد. به تصویر زیر توجه کنید! ۲۴ بیت اول توسط شرکت سازنده کارت سبکه مشخص می شود و در ادامه ۲۴ بیت دوم تعداد دستگاه های قابل شماره گذاری را نشان می دهد.
برای برقراری ارتباط بین برد های ESP32 باید مک آدرس آن ها را بدانیم، زیرا در پروسه انتقال اطلاعات و یا جفت شدن هر برد اقدام بررسی هویت برد دیگر می کند. و هر ESP32 دارای مک آدرس خاص خود می باشد تا با این صورت تایید هویت شود. برای بدست آوردن این مک آدرس کد زیر را در ESP32 خود آپلود کنید.
#include "WiFi.h" void setup(){ Serial.begin(115200); WiFi.mode(WIFI_MODE_STA); Serial.println(WiFi.macAddress()); } void loop(){ }
پس از آپلود کد، در سریال مانیتور Arduino IDE می توانید مک آدرس خود را مشاهده کنید. مک آدرس را ذخیره کنید زیرا در پروژه اصلی به آن نیاز داریم.
راه اندازی ارتباط یک طرفه ESP-NOW
ابتدا در یک ساختار متغیر هایی را در انواع char, int, float, String و 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 می پردازیم.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام هنگام کامپایل ارور کتابخانه 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 است داخل گیت هاب یا خود آردوینو سرچ کنید مواردی زیادی موجود است.
بله این امکان وجود دارد.