ESP-MESH یک پروتکل شبکه است که در سطحی بالاتر از پروتکل Wi-Fi ساخته شده است. ESP-MESH اجازه می دهد تا دستگاه های بیشماری با عنوان گره یا node، پخش شده در یک منطقه بزرگ فیزیکی چه در داخل و چه در فضای باز تحت یک WLAN یا همان شبکه محلی بی سیم به هم متصل شوند. ESP-MESH خود سازماندهی و خود ترمیم کننده است به این معنی که شبکه می تواند به صورت مستقل ساخته و کانکشن بین دستگاه ها نگهداری شود. ESP-WIFI-MESH یک شبکه ارتباطی بی سیم با node هایی است که در یک توپولوژی Mesh با استفاده از ویژگی همزمان AP-STA در Espressif طراحی شدهاند. این یک شبکه خودساخته و خود ترمیم است. توپولوژی شبکه ESP-WIFI-MESH می تواند تا ۱۰۰۰ node را در مناطق وسیع و بدون نیاز به پشتیبانی زیرساخت Wi-Fi خاص، گسترش دهد. همچنین می توان از ESP-WIFI-MESH برای پوشاندن نقاط کور Wi-Fi در سناریوهای استقرار در منزل که امکان دسترسی به سیگنال Wi-Fi را ندارد استفاده کرد.در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
شناخت ESP-MESH
تفاوت ESP-MESH با زیرساخت های شبکه های Wi-Fi سنتی از این جهت است که برای اتصال node ها نیازی به node مرکزی نیست. در عوض، node ها مجاز به اتصال با node های همسایه هستند. node ها متقابلا مسئول انتقال مجدد یکدیگر هستند. این مورد اجازه می دهد تا یک شبکه ESP-MESH منطقه تحت پوشش بیشتری داشته باشد زیرا node ها هنوز می توانند بدون نیاز به قرار گرفتن در node مرکزی به هم اتصال متصل شوند. به همین ترتیب، ESP-MESH نیز کمتر مستعد بارگیری می شود زیرا تعداد node های مجاز در شبکه دیگر توسط یک node مرکزی محدود نمی شود.
ESP-MESH در سطحی بالاتر از پروتکل Wi-Fi زیرساخت شده است و می توان آن را به عنوان یک پروتکل شبکه در نظر گرفت که بسیاری از شبکه های Wi-Fi را در یک WLAN واحد ترکیب می کند. در Wi-Fi، ایستگاه ها یا STA ها در هر زمان به یک اتصال واحد با یک AP محدود می شوند، در حالی که یک AP می تواند به طور همزمان به چندین STA متصل شود. با این وجود ESP-MESH به node ها اجازه می دهد تا همزمان به عنوان ایستگاه و AP عمل کنند. بنابراین یک node در ESP-MESH می تواند با استفاده از رابط softAP خود چندین اتصال پایین دست داشته باشد، در حالی که همزمان با استفاده از رابط STA خود یک اتصال بالادستی واحد دارد. این به طور طبیعی منجر به یک توپولوژی شبکه درختی با سلسله مراتب والدین و کودکان متشکل از چند لایه می شود.
برد ESP32
ESP32 نسل پیشرفته ESP8266 است. یکی از تفاوتهای آن بلوتوث داخلیاش میباشد. همچنین دارای هسته وایفای ۲,۴ گیگا هرتزی و بلوتوث داخلی تولید شده با تکنولوژی ۴۰ نانومتری شرکت TSMC میباشد. این ماژول دارای بهترین پرفورمنس در مصرف انرژی میباشد یعنی با کمترین مصرف انرژی بهترین نتیجه را برای ما به همراه دارد. اگر بخواهیم دقیقتر به این برد نگاه کنیم باید بگوییم که این یک chip است که پلتفرم NodeMCU در اون پیاده سازی شده که به این نوع چیپ ها System on a chip microcontrollers هم گفته میشود.
برد Wemos ویموس
برد Wemos یکی از پرطرافدار ترین برد هایی است که در زمینه iot مورد استفاده قرار میگیرد، یکی از مزیت های این برد نسبت به برد هایی مانند Node MCU اندازه کوچک آن می باشد تراشه وای فای مورد استفاده در این برد ESP8266 می باشد. از دیگر مزیت های این برد وجود شیلد های مختلفی برای این برد می باشد، که انجام هر پروژه ای را برای کاربر بسیار آسان و لذت بخش می کند، شیلد هایی از جمله شیلد باتری، multi sensor ، DHT22 ، رله ، oled تعداد بسیار زیادی شیلد برای این برد توسعه داده شده که در نتیجه تجربه خوبی از iot برای شما به جا خواهد گذاشت.
روش کار پروژه
در این پروژه این ارتباط ESP-MESH ساده با یک ESP32 و یک برد Wemos که بر پایه برد ESP8266 است راهاندازی خواهیم کرد، و ارتباط بین این دو ماژول را بررسی میکنیم. در این پروژه با آپلود یک کد در هر دو برد ESP32 و ESP8266 قادر خواهیم بود، پیام مدنظر را ارسال و دریافت کنیم، که در مقابل ESP-NOW کار ما آسان تر شده و روند پروژه بسیار سریع تر شده. در این پروژه از یک مثال ساده استفاده خواهد شد و تنها یک متن بین دو برد وایفای ما رد و بدل میشود.
وسایل مورد نیاز
نصب و راهاندازی کتابخانه
painlessMesh یک شبکه موقت و تک کاره است، به این معنی که کنترل کننده یا node مرکزی یا روتر مورد نیاز نیست. هر سیستمی از ۱ یا چند گره خود به خود، در شبکه ای کاملا کاربردی سازمان می یابد. حداکثر اندازه مش با توجه به مقدار حافظه موجود در انبوهی که می توان به بافر فرعی اختصاص داد، محدود است. برای نصب کتابخانه مطابق مراحل زیر پیش بروید.
- این مسیر را دنبال کنید Sketch > Include Library > Manage Libraries
- کلمه painlessMesh را جستجو کنید.
- کتابخانه را نصب کنید.
این کتابخانه به تعدادی موارد پیفرض نیاز دارد که از وابستگی های کتابخانه است. هنگام نصب کتابخانه یک پنجره جدید ظاهر می شود که از شما می خواهد موارد مورد نیاز را نصب کنید. در این پنجره گزینه “install all” را انتخاب کنید.
کد و راهاندازی مدار
در این پروژه اقدام به آپلود کدی که در پایین معرفی شده خواهیم کرد، در هر دو برد ESP32 و ESP8266، در واقع در این پروژه نیازی به تغییر مقادیر و آپلود کدی متافوت در برد های مختلف نیست و شما تنها با همین کد قادر خواهیم بود بین یک یا چند برد با ورژن های مختلف ارتباط mesh برقرار کنید. این مورد به شما امکان این را خواهد داد تا بتوانید شبکه وسیع تری بدون نیاز به این فکر که نیاز دارید برای هربرد کدی متفاوت با مقادیر متفاوت آپلود کنید را نداشته باشید. در این کد برای شبکه mesh یک نام و رمز مشخص میکنید تا این شبکه امن تر باشد و این مورد باید برای همه node های داخل mesh یکسان باشد.
#define MESH_PREFIX "whateverYouLike" #define MESH_PASSWORD "somethingSneaky" #define MESH_PORT 5555
برای شروع کار با ESP-MESH ابتدا مثال پایه را از کتابخانه آزمایش خواهیم کرد. این مثال یک شبکه مش ایجاد می کند که در آن همه برد ها پیام ها را به سایر برد های درون شبکه ارسال می کنند.
#include "painlessMesh.h" //فراخوانی کتابخانه #define MESH_PREFIX "whateverYouLike" مش//نام شبکه #define MESH_PASSWORD "somethingSneaky" // پسووردمناسب برای شبکه مش #define MESH_PORT 5555 Scheduler userScheduler; //استفاده از تسک painlessMesh mesh; //مقدار دهی اولیه void sendMessage() ; Task taskSendMessage( TASK_SECOND * 1 , TASK_FOREVER, &sendMessage ); void sendMessage() { String msg = "Hello from node "; //پیام ارسال شده msg += mesh.getNodeId(); //دریافت ایدی node mesh.sendBroadcast( msg ); taskSendMessage.setInterval( random( TASK_SECOND * 1, TASK_SECOND * 5 )); } // موارد پیشفرض همراه با کتابخانه استفاده شده void receivedCallback( uint32_t from, String &msg ) { Serial.printf("startHere: Received from %u msg=%s\n", from, msg.c_str()); } void newConnectionCallback(uint32_t nodeId) { Serial.printf("--> startHere: New Connection, nodeId = %u\n", nodeId); } void changedConnectionCallback() { Serial.printf("Changed connections\n"); } void nodeTimeAdjustedCallback(int32_t offset) { Serial.printf("Adjusted time %u. Offset = %d\n", mesh.getNodeTime(),offset); } void setup() { Serial.begin(115200); //mesh.setDebugMsgTypes( ERROR | MESH_STATUS | CONNECTION | SYNC | COMMUNICATION | GENERAL | MSG_TYPES | REMOTE ); mesh.setDebugMsgTypes( ERROR | STARTUP ); // نوع پیام ارسالی mesh.init( MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT ); mesh.onReceive(&receivedCallback); mesh.onNewConnection(&newConnectionCallback); mesh.onChangedConnections(&changedConnectionCallback); mesh.onNodeTimeAdjusted(&nodeTimeAdjustedCallback); userScheduler.addTask( taskSendMessage ); taskSendMessage.enable(); } void loop() { mesh.update(); }
جمع بندی
در چند ماه گذشته آموزش هایی با عنوان ESP-NOW منتشر کردم، با تست این نوع ارتباط گیری ESP-MESH میتوان بگویم که ESP-MESH نسل پیشرفته ESP-NOW است البته هردو مورد عیب هایی دارند که در مقایسه بهم پوشش داده شدهاند، اما کار با ESP-MESH میتواند بسیار جال تر و لذت بخش از مورد قبلی باشد، این نوع ارتباط گیری یعنی شبکه های Mesh در آموزش های آینده گسترش خواهیم داد و سناریو های مختلفی را تست خواهیم کرد.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام
ممنون بابت مطلب مفیدی که گذاشتین
ولی من یه مشکلی در پروگرام کردن دارم
این ارور رو موقع پروگرام کردن بهم میده
Arduino: 1.8.14 (Windows 10), 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”
In file included from C:\Users\asakrobo\Documents\Arduino\libraries\Painless_Mesh\src/painlessMesh.h:10:0,
from C:\Users\asakrobo\Documents\Arduino\libraries\Painless_Mesh\examples\namedMesh\namedMesh.h:3,
from C:\Users\asakrobo\Documents\Arduino\libraries\Painless_Mesh\examples\namedMesh\namedMesh.ino:7:
C:\Users\asakrobo\Documents\Arduino\libraries\Painless_Mesh\src/painlessmesh/configuration.hpp:35:25: fatal error: ESPAsyncTCP.h: No such file or directory
#include
^
compilation terminated.
exit status 1
Error compiling for board NodeMCU 1.0 (ESP-12E Module).
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
وقتی هم میخوام کتابخانه ESPAsyncTCP.h رو نصب کنم ارور no protocol میده
البته کدی که من آپلود میکنم نمونه مثال خود کتابخانه هست و تغییری توی کد نمیدم
ممنون میشم راهنمایی کنید
با سلام، ممنون از توجه شما. با توجه به ارور مشکل فایل های کتابخانه را دارید. پیشنهاد میکنم با سیستم دیگری کد را چک کنید.
سلام در موقع پروگرم خطا میزنه میگه
Not used: C:\Users\Dr-Laptop\Documents\Arduino\libraries\libraries\ArduinoJson-6.x
exit status 1
Error compiling for board NodeMCU 1.0 (ESP-12E Module).
دلبل؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
با سلام، بنظر دو کتابخانه یکسان با ورژن های متفاوت دارید. یک مورد را حذف کنید و دوباره امتحان کنید، اگر باز هم مشکلی بود، اقدام به نصب دوباره یا آپدیت کتابخانه ها کنید.
سلام وقتتون بخیر
اگر فرض کنیم ۵۰۰ عدد esp به طور یک نواخت در یک محیط سر پوشیده ، با فاصله حداکثر ۶ متر از یک دیگر توزیع شده اند.
با احتساب این تعداد نود و همچین پذیرش تاخیر انتقال اطلاعات تا ۲۰ ثانیه ایا امکان ایجاد یک شبکه مش پایدار وجود دارد؟
با سلام
اطلاعی نسبت به این مورد نداریم. داکیومنتهای مربوط به شبکه مش ESP را بررسی کنید.
با سلام خدمت شما جناب مهندس سایفر و با تشکر ازشما .
این پروژه را میشه فقط برای چند تا برد ESP8266 استفاده کرد ؟ یعنی بدون ESP32
با سلام، ممنونم.
خیر امکانش هست که از برد های ESP32 و ESP8266 در کنار هم استفاده کنید.
سلام سایفرجان وقت بخیر. بسیار عالی بود.
چجوری میتونیم با همین روش مش کردن ESP ها، چندین ماژول ۸۲۶۶ رو به هم وصل کنیم، طوریکه وقتی به هر کدوم وصل میشیم، به شبکه جهانی اینترنت دسترسی داشته باشیم…؟
سلام جناب رضائیان
آموزش های قدم به قدم ESP Mesh توی دیجی اسپارک منتشر شده، اونها را بررسی کنید.
سلام اقا سایفر خیلی ممنون این سری هم مثل سری ها قبل خیلی مطالب عالی و مفید بود اما برای من و چند تا از دوستا این مشکل:
(((Error compiling for board NodeMCU 1.0 (Esp3212E Module )))))
پیش میاد من کل کتابخانه هایی که داشتم رو پا کردم و دوباره دانلود کردم نشد و بصورت zip از سایت githab هم دالود کردم و نصب کردم روی سیستم های مختلف هم امتحان کردم و کد رو هم تغییر نداد رو esp 32 های مختلفی هم اپ لود کردم باز هم بهم جواب نداد چیکار کنم !؟
خیلی ممنون میشم جواب بدین ⚘️⚘️
با سلام و تشکر از شما
برای این منظور بررسی کنید که هنگام آپلود کدها روی برد Nodemcu از کتابخانههایی که مرتبط با این برد نیستند، استفاده نکرده باشید.
با سلام ممنون بابت آموزش خوبتان سوالی که دارم حداکثر مساحتی که در این شبکه می شود پوشش داد چقدر است اگر به طور مثال ما ۱۰۰ node داشته باشیم؟
مسافت تحت پوشش یک شبکه ESP-Mesh به عوامل متعددی بستگی دارد، از جمله قدرت فرستنده و گیرنده، محیط فیزیکی، موانع موجود، تنظیمات شبکه و شرایط محیطی. بردهای ESP32 از آنتن داخلی Wi-Fi برای ارتباط استفاده میکنند موثرتر هستند. همچنین دقت داشته باشید که حداکثر تعداد گرههایی که میتوانید در یک شبکه ESP-Mesh داشته باشید، به عوامل مختلفی مانند قدرت پردازشی و ظرفیت حافظه بردهای ESP32، شرایط محیطی و تنظیمات شبکه بستگی دارد. به طور کلی، توصیه میشود که تعداد گرهها در یک شبکه ESP-Mesh حداکثر تا ۵۰ تا ۱۰۰ گره باشد.
در نظر داشته باشید که با افزایش تعداد گرهها، پهنای باند و تاخیر شبکه ممکن است تحت تأثیر قرار بگیرد و بهینهسازی شبکه ممکن است نیازمند انجام تنظیمات و بهبودهای مختلف باشد. همچنین، معمولاً توصیه میشود که در شبکههای بزرگتر از ۲۰ گره، از روترهای جانبی برای تقویت سیگنال و افزایش پوشش شبکه استفاده شود.