در دو قسمت پیشین در رابطه با راه اندازی مش ساختار آن صحبت کردیم. همانطور که از قسمت های پیشین به یاد داریم، شبکه مش، شبکه ایست که در آن هر گره می تواند به عنوان ارسال کننده و دریافت کننده ظاهر شود. این بر خلاف شبکه معمول است که در آن یک گره مرکزی(نقطه دسترسی یا AP) وظیفه انتقال پیام ها را بر عهده دارد. در این شبکه کارایی افزایش می یابد. چراکه با خرابی یک گره کل شبکه از بین نخواهد رفت. در کنار این، برد شبکه هم افزایش خواهد یافت؛ چراکه بر خلاف شبکه معمول(Infrastructure) یک گره مرکزی به عنوان مودم در شبکه وجود نداشته که برد آن تاثیر گذار باشد، هر کدام از گره های حاضر در شبکه می توانند به عنوان یک نقطه دسترسی برای سایر گره ها عمل کنند.
در قسمت دوم این سلسله آموزش به نحوه راه اندازی و کار با این شبکه روی چیپ های ESP، به طور مختصر پرداختیم. در این قسمت کتابخانه مخصوص راه اندازی و کار با فناوری مش روی تراشه های ESP تشریح گردید. در این قسمت اما قصد داریم تا به صورت دقیق و عمیق تر این کتابخانه را مورد بررسی قرار دهیم. راه اندازی و کار با این کتابخانه دارای نکات مخصوص به خود است. در این آموزش قصد داریم تا به این نکات و مفاهیم برنامه نویسی آن به صورت قدم به قدم بپردازیم. در ادامه آموزش برنامه نویسی و راه اندازی مش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
نام، رمز عبور و پورت شبکه Mesh
همانطور که در قسمت اول گفته شد، شبکه به تعدادی از کامپیوترهای متصل به یکدیگر گفته می شود. شبکه مش هم در این تعریف، تعدادی از ESP ها بوده که با یکدیگر به تبادل داده مشغول هستند. یک شبکه مش به صورت کلی دارای یک نام(Prefix) و رمز عبور(Password) است. بنابراین هرگره جهت ورود به شبکه، باید نام و علاوه بر آن رمز عبور شبکه را دانسته تا بتواند به آن وارد شود.
مطابق تصویر فوق، برای احراز هویت در شبکه مش باید نام و رمز عبور شبکه توسط گره به شبکه ارایه شود. پس از ورود گره به شبکه، داده ها برای تبادل نیاز به تعیین شماره پورت دارند؛ چراکه داده ها در این شبکه تحت پروتکل TCP جا به جا می شوند. به عبارت دیگر مدل کلاینت/سرور درون گره های شبکه برای تبادل داده ها جاری است. برای تعیین نام، رمز عبور و شماره پورت در شبکه، از تابع init استفاده می گردد. این تابع با ورودی ها به صورت زیر تعریف می گردد.
محدودیت در دسترسی کامل به این مجموعه آموزش
دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندسهای دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید. |
زمانبندی به کمک کتابخانه Scheduler
در قسمت قبل بخش تابع init، یکی از ورودی ها به زمانبندی اشاره می کرد. طبق سناریو ایی که در پیش رو داریم، قصد به ارسال داده ها در بازه های زمانی متناوب در برنامه نویسی و راه اندازی مش وجود دارد. به عبارت دیگر می خواهیم داده هایی را از یک گره در شبکه، هر چند ثانیه یکبار ارسال کنیم. برای زمانبندی می توانیم از تابع delay استفاده کنیم، اما این تابع به دلیل ماهیت در تعریف، اجرای برنامه را متوقف می کند. این موضوع سبب می شود تا اجرای شبکه مش دچار اشکال گردد. به همین علت، از کلاس کتابخانه Scheduler استفاده می کنیم. به کمک این کتابخانه می توانیم اجرای توابع(TASK) ها را به صورت زمانبندی شده تعریف کنیم. به عنوان مثال یک تابع را می توانیم هر N ثانیه یکبار اجرا نماییم. برای این مورد، ابتدا مطابق دستور زیر یک شی از کلاس کتابخانه تعریف می کنیم.
Task taskSendMessage( TASK_SECOND * 1 , TASK_FOREVER, &sendMessage );
مطابق دستور فوق، یک شی به نام taskSendMessage ایجاد کرده ایم. از آنجاییکه کلاس دارای تابع سازنده است؛ لذا پارامترهایی در ورودی شی قرار می گیرد. این ورودی ها از چپ به راست عبارتند از.
- بازه زمانی اجرا که مطابق ورودی فوق هر یک ثانیه یکبار است.
- تعداد دفعات اجرا که مطابق ورودی دوم برای همیشه تعیین شده است.
- تابعی که در بازه زمانی تعیین شده و برای دفعات مشخص شده باید اجرا گردد.
پس از این قسمت نوبت به تشریح توابع مربوط به ارسال و دریافت داده در شبکه مش می رسد. قسمت بعد را به این موضوع اختصاص می دهیم.
توابع کنترل شبکه مش Mesh
پس از آشنایی با زمانبندی اجرای توابع، نوبت به توابع کنترل مش در برنامه نویسی و راه اندازی مش می رسد. جهت اجرای شبکه مش، توابعی جهت اجرا باید حتما تعریف گردند. این توابع و وظیفه آن ها را در جدول زیر لیست می کنیم.
وظیفه | تابع |
دریافت و نمایش پیام دریافتی از سوی سایر گره ها | onReceive |
نمایش ID گره جدیدی که به شبکه اضافه شده | onNewConnection |
نمایش تغییرات ایجاد شده در شبکه(اضافه یا حذف شدن گره از شبکه) | onChangedConnections |
نمایش زمان شبکه
این تابع پس از اینکه تمام گره ها وارد شبکه شدند، اجرا خواهد شد. |
onNodeTimeAdjusted |
پس از آشنایی با توابع و دستورات مش، نوبت به اجرای یک نمونه برنامه می رسد. قسمت بعد به این موضوع اختصاص دارد.
اجرای نمونه برنامه شبکه Mesh
پس از آشنایی با توابع و دستورات، نوبت به اجرای یک نمونه برنامه می رسد. این برنامه داده های دریافتی را نمایش می دهد. سپس داده ای را هر یک الی پنج ثانیه یکبار در شبکه منتشر می کند. در کنار وضعیت شبکه، حالتی که گره ای به شبکه متصل شود یا از آن جدا شود را گزارش می نماید.
محدودیت در دسترسی کامل به این مجموعه آموزش
دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندسهای دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید. |
لوازم مورد نیاز
جمع بندی
در سلسله آموزش های شبکه مش، قسمت سوم به اجرای کدهای مربوط به برقراری ارتباط تحت شبکه مش پرداختیم. در قسمت قبل کتابخانه مربوط به ارتباط مش دانلود و نصب گردید. در این قسمت به کدها و دستورات کلیدی و کاربردی شبکه مش پرداختیم. در این آموزش به صورت قدم به قدم، با کدها و دستورات هر قسمت آشنا شدیم. پس از آشنایی مرحله به مرحله با قسمت های مختلف، به اجرای یک نمونه پرداختیم.
چنانچه مطالب ابن آموزش را گنگ یافتید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. تاکنون ده ها هزار نظر و پاسخ در دیجی اسپارک درج شده است؛ پس نظرات شما ارزشمند بوده و سوالات بی پاسخ نمی مانند.
سلام من کتابخانه های مورد نظر را نصب کردم ولی موقع پروگرام کردن ی دنیا اررو میاره ،چگونه ارور ها رو براتون ارسال کنم تا راهنمایی نمایید؟
سلام
بله لطفا پیغام ها را ارسال کنید در کامنت بعدی تا مورد بررسی گردد.
سلام خوبین. من کد را رویesp8266 12e
اپلود میکنم. اما وقتی ماژول میخواد به شبکه متصل بشه esp کرش میشود و بعدش هم ریست میشه اینقد اینطوری میشه تا بعضی موقع ها به شبکه وصل بشه. لطفا اگه میتونید کمکم کنید ممنونتون میشم. ولی پقیقا کد روی چند برد esp32 تست کردیم جواب داده ولی esp8266 اینطوری میشه با چنتا esp8266 هم تست شده باز همینطوریه. تشکر
سلام و متشکرم
در قسمت اتصال به شبکه، یک delay برای ۵۰۰ میلی ثانیه قرار دهید و مورد را تست کنید.
سلام وقت بخیر
اگر بخواهم بین ۳ نود پیام بفرستم بدون برادکست کردن یعنی ۲ نود دیگه متوجه ارسال پیام نشن باید چی کار کنم ؟
تنها موردی که به ذهنم می رسد این است که میام را رمز نگاری کنید و فقط نودی که باید میام را دریافت کند بتواند آن را رمزگشایی کند
لطفا توی این مباحثی که سلسه جلساتی هستن لینک جلسات قبل رو هم به مطلب اضافه کنید.
خیلی کار روتینیه که سایت ها انجام میدن و برای بازدید بیشتر دائم توی متن لینک مطالب مختلف رو میذارن.اما توی سایت شما این موضوع خیلی کم دیده میشه.
لطفا مد نظر داشته باشید
با سلام
ضمن تشکر از همراهی شما، چشم اطلاع رسانی میکنم به همکارانم.