برد ESP8266 برد Nodemcu

شبکه مش Mesh در بردهای ESP قسمت سوم: برنامه نویسی و راه اندازی

getting-started-with-mesh-network-esp8266-part-three-running-and-programming-digispark
نوشته شده توسط معین صابری

در دو قسمت پیشین در رابطه با راه اندازی مش ساختار آن صحبت کردیم. همانطور که از قسمت های پیشین به یاد داریم، شبکه مش، شبکه ایست که در آن هر گره می تواند به عنوان ارسال کننده و دریافت کننده ظاهر شود. این بر خلاف شبکه معمول است که در آن یک گره مرکزی(نقطه دسترسی یا AP) وظیفه انتقال پیام ها را بر عهده دارد. در این شبکه کارایی افزایش می یابد. چراکه با خرابی یک گره کل شبکه از بین نخواهد رفت. در کنار این، برد شبکه هم افزایش خواهد یافت؛ چراکه بر خلاف شبکه معمول(Infrastructure) یک گره مرکزی به عنوان مودم در شبکه وجود نداشته که برد آن تاثیر گذار باشد، هر کدام از گره های حاضر در شبکه می توانند به عنوان یک نقطه دسترسی برای سایر گره ها عمل کنند.

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

 


نام، رمز عبور و پورت شبکه Mesh


همانطور که در قسمت اول گفته شد، شبکه به تعدادی از کامپیوترهای متصل به یکدیگر گفته می شود. شبکه مش هم در این تعریف، تعدادی از ESP ها بوده که با یکدیگر به تبادل داده مشغول هستند. یک شبکه مش به صورت کلی دارای یک نام(Prefix) و رمز عبور(Password) است. بنابراین هرگره جهت ورود به شبکه، باید نام و علاوه بر آن رمز عبور شبکه را دانسته تا بتواند به آن وارد شود.

برنامه نویسی و راه اندازی شبکه مش Mesh - دیجی اسپارک

 

مطابق تصویر فوق، برای احراز هویت در شبکه مش باید نام و رمز عبور شبکه توسط گره به شبکه ارایه شود. پس از ورود گره به شبکه، داده ها برای تبادل نیاز به تعیین شماره پورت دارند؛ چراکه داده ها در این شبکه تحت پروتکل TCP جا به جا می شوند. به عبارت دیگر مدل کلاینت/سرور درون گره های شبکه برای تبادل داده ها جاری است. برای تعیین نام، رمز عبور و شماره پورت در شبکه، از تابع   init استفاده می گردد. این تابع با ورودی ها به صورت زیر تعریف می گردد.

 

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

 

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

 


زمانبندی به کمک کتابخانه Scheduler


در قسمت قبل بخش تابع init، یکی از ورودی ها به زمانبندی اشاره می کرد. طبق سناریو ایی که در پیش رو داریم، قصد به ارسال داده ها در بازه های زمانی متناوب در برنامه نویسی و راه اندازی مش وجود دارد. به عبارت دیگر می خواهیم داده هایی را از یک گره در شبکه، هر چند ثانیه یکبار ارسال کنیم. برای زمانبندی می توانیم از تابع delay استفاده کنیم، اما این تابع به دلیل ماهیت در تعریف، اجرای برنامه را متوقف می کند. این موضوع سبب می شود تا اجرای شبکه مش دچار اشکال گردد. به همین علت، از کلاس کتابخانه Scheduler استفاده می کنیم. به کمک این کتابخانه می توانیم اجرای توابع(TASK) ها را به صورت زمانبندی شده تعریف کنیم. به عنوان مثال یک تابع را می توانیم هر N ثانیه یکبار اجرا نماییم. برای این مورد، ابتدا مطابق دستور زیر یک شی از کلاس کتابخانه تعریف می کنیم.

Task taskSendMessage( TASK_SECOND * 1 , TASK_FOREVER, &sendMessage );

 

 مطابق دستور فوق، یک شی به نام taskSendMessage ایجاد کرده ایم. از آنجاییکه کلاس دارای تابع سازنده است؛ لذا پارامترهایی در ورودی شی قرار می گیرد. این ورودی ها از چپ به راست عبارتند از.

  • بازه زمانی اجرا که مطابق ورودی فوق هر یک ثانیه یکبار است.
  • تعداد دفعات اجرا که مطابق ورودی دوم برای همیشه تعیین شده است.
  • تابعی که در بازه زمانی تعیین شده و برای دفعات مشخص شده باید اجرا گردد.

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

 


توابع کنترل شبکه مش Mesh


پس از آشنایی با زمانبندی اجرای توابع، نوبت به توابع کنترل مش در برنامه نویسی و راه اندازی مش می رسد. جهت اجرای شبکه مش، توابعی جهت اجرا باید حتما تعریف گردند. این توابع و وظیفه آن ها را در جدول زیر لیست می کنیم.

وظیفه تابع
دریافت و نمایش پیام دریافتی از سوی سایر گره ها onReceive
نمایش ID گره جدیدی که به شبکه اضافه شده onNewConnection
نمایش تغییرات ایجاد شده در شبکه(اضافه یا حذف شدن گره از شبکه) onChangedConnections
نمایش زمان شبکه

این تابع پس از اینکه تمام گره ها وارد شبکه شدند، اجرا خواهد شد.

onNodeTimeAdjusted

 

 پس از آشنایی با توابع و دستورات مش، نوبت به اجرای یک نمونه برنامه می رسد. قسمت بعد به این موضوع اختصاص دارد.

 


اجرای نمونه برنامه شبکه Mesh


پس از آشنایی با توابع و دستورات، نوبت به اجرای یک نمونه برنامه می رسد. این برنامه داده های دریافتی را نمایش می دهد. سپس داده ای را هر یک الی پنج ثانیه یکبار در شبکه منتشر می کند. در کنار وضعیت شبکه، حالتی که گره ای به شبکه متصل شود یا از آن جدا شود را گزارش می نماید.

 

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

 

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

 


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


برد NODEMCU به تعداد کافی!

 


جمع بندی


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

 

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

 

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

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

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

۶ دیدگاه

  • سلام من کتابخانه های مورد نظر را نصب کردم ولی موقع پروگرام کردن ی دنیا اررو میاره ،چگونه ارور ها رو براتون ارسال کنم تا راهنمایی نمایید؟

  • سلام خوبین. من کد را رویesp8266 12e
    اپلود میکنم. اما وقتی ماژول میخواد به شبکه متصل بشه esp کرش میشود و بعدش هم ریست میشه اینقد اینطوری میشه تا بعضی موقع ها به شبکه وصل بشه. لطفا اگه میتونید کمکم کنید ممنونتون میشم. ولی پقیقا کد روی چند برد esp32 تست کردیم جواب داده ولی esp8266 اینطوری میشه با چنتا esp8266 هم تست شده باز همینطوریه. تشکر

    • سلام و متشکرم
      در قسمت اتصال به شبکه، یک delay برای ۵۰۰ میلی ثانیه قرار دهید و مورد را تست کنید.

  • سلام وقت بخیر
    اگر بخواهم بین ۳ نود پیام بفرستم بدون برادکست کردن یعنی ۲ نود دیگه متوجه ارسال پیام نشن باید چی کار کنم ؟

    • تنها موردی که به ذهنم می رسد این است که میام را رمز نگاری کنید و فقط نودی که باید میام را دریافت کند بتواند آن را رمزگشایی کند