الکترونیک اینترنت اشیا

ایجاد یک شبکه زیگبی ساده با ماژول ProBee ZE10

مقدمه

هر شبکه‌ی زیگبی دارای تعدادی عنصر ارتباطی است. به هر یک از این عناصر ارتباطی که می‌توانند داده‌ها را ارسال یا دریافت کنند، گره (Node) گفته می‌شود. در شبکه‌ی زیگبی گره‌ها که هر کدام در واقع یک ماژول زیگبی هستند به سه نوع تقسیم می‌شوند که عبارتند از: پایان‌افزار (End Device)، مسیریاب (Router) و هماهنگ‌کننده (Coordinator).

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

یک شبکه‌ی زیگبی نمونه

پایان‌افزار (End Device)

پایان‌افزارها همواره در نقاطی قرار می‌گیرند که یا می‌خواهیم کمیتی را اندازه‌گیری کنیم و یا دستگاهی را کنترل کنیم. در مثال فوق باید در هر اتاق یک گره از نوع End Device قرار دهیم تا خروجی سنسور دما را دریافت کرده و به مرکز کنترل ارسال کند.

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

مسیریاب (Router)

مسیریاب‌ها دقیقاً همان کاری را می‌کنند که پایان‌افزارها انجام می‌دهند با این تفاوت که از مزیت توان مصرفی پایین بی‌بهره‌اند. شاید این سوال را بپرسید که چه لزومی دارد که از این نوع گره زیگبی استفاده کنیم؟!

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

اما خبر خوش این است که گره‌های مسیریاب علاوه بر این که قابلیت اندازه‌گیری دارند می‌توانند مانند تقویت کننده‌ی سیگنال عمل کنند. کافی‌ است در هر نقطه که می‌دانیم سیگنال زیگبی تضعیف خواهد شد (مثلاً در همان فواصل 100 متری) یک عدد گره مسیریاب قرار دهیم.

هماهنگ‌کننده (Coordinator)

مهم‌ترین گره در هر شبکه‌ی زیگبی که وظیفه‌ی شکل دادن شبکه و مدیریت ارتباطات را بر عهده دارد هماهنگ‌کننده (Coordinator) نام دارد. در واقع بدون وجود هماهنگ‌کننده، شبکه‌ی زیگبی شکل نمی‌گیرد.

در مثال فوق باید در مرکز کنترل یک عدد گره هماهنگ‌کننده وجود داشته باشد.

باید توجه داشت که در هر شبکه‌ی زیگبی، یک و فقط یک عدد گره هماهنگ‌کننده (Coordinator) باید وجود داشته باشد. این موضوع هم کاملاً بدیهی است چون هیچ وقت «دو پادشاه در یک اقلیم نگنجند!»

شبکه‌ای که قصد داریم در این مقاله پیاده‌سازی کنیم شامل یک Router و یک Coordinator است که Coordinator به یک کامپیوتر و Router به یک برد آردوینو وصل شده است. توجه کنید که در این مثال می‌توانید به جای گره Router از End Device استفاده کنید ولی به دلیل اینکه ماژول‌های زیگبی ساخت بعضی از شرکت‌ها فاقد نوع End Device هستند ترجیح دادیم تا عمومیت را حفظ کنیم و از Router استفاده کنیم.

نمای کلی شبکه‌ی زیگبی مورد نظر

تنظیمات اولیه‌ی ماژول Coordinator

ماژول‌های ZE10 بر خلاف اکثر ماژول‌های زیگبی این قابلیت را دارند که از طریق تنظیمات به عنوان End Device، Router یا Coordinator عمل کنند.

قبل از اینکه ادامه‌ی این مقاله را بخوانید اکیداً توصیه می‌کنم که مقاله‌ی راه‌اندازی ماژول ارتباط بی‏‌سیم زیگبی ProBee ZE10 را مطالعه کنید.

برای تنظیم هر ماژول ZE10 بهتر است از نرم‌افزار ProBee Manager استفاده کنید. هر چند که می‌توان از طریق ترمینال و به کمک دستورات AT-Command نیز این کار را انجام داد.

ماژول هماهنگ‌کننده (Coordinator)

ماژول هماهنگ‌کننده (Coordinator)

قبل از هر چیز ماژول زیگبی را از طریق یک ماژول USB به سریال  مثل CP2102 یا PL2303 یا FT232 به کامپیوتر وصل کنید. خوشبختانه اکثر ماژول‌های USB به سریال دارای خروجی تغذیه‌ی 3.3 ولتی هستند در غیر این صورت تغذیه‌ی ماژول را از طریق یک رگولاتور ولتاژ 3.3 ولتی تأمین کنید.

اتصال ZE10 به کامپیوتر از طریق ماژول USB به سریال

اتصال ZE10 به کامپیوتر از طریق ماژول USB به سریال

پس از اتصال ماژول به کامپیوتر باید پس از برقراری ارتباط میان نرم افزار ProBee Manager با پورت سریالی که به ماژول ZE10 متصل است پنجره‌ای مطابق شکل زیر ببینیم.

پنجره‌ی نرم‌افزار ProBee Manager پس از برقراری ارتباط با ZE10

پنجره‌ی نرم‌افزار ProBee Manager پس از برقراری ارتباط با ZE10

همانطور که مشاهده می‌کنید عبارتی که در قسمت EUI address نوشته شده است همان عبارتی است که روی خود ماژول دیده می‌شود (البته با صرف نظر کردن از 6 رقم اول). این عبارت یک کد هگزادسیمال (در مبنای شانزده) است که مثل اثر انگشت برای ماژول‌های زیگبی عمل می‌کند و برای هر ماژول عددی منحصربفرد است.

برای اینکه گره زیگبی را به عنوان Coordinator تعیین کنید باید از قسمت Network Settings گزینه‌ی Node Type را انتخاب کنید. سپس در کادر سمت راست گزینه‌ی ZC (Zigbee Coordinator) را انتخاب کرده و روی Save کلیک کنید.

تعیین گره Coordinator

تعیین گره Coordinator

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

هر شبکه‌ی زیگبی دارای یک مشخصه به نام PAN-ID است که موجب می‌شود از سایر شبکه‌های زیگبی که در حوزه‌ی دسترسی آن قرار دارند متمایز گردد. بنابر این تمام گره‌های موجود در شبکه باید PAN-ID یکسانی داشته باشند. PAN-ID یک عدد هگزادسیمال 4 رقمی است.

برای تنظیم PAN-ID از قسمت Network Settings گزینه‌ی PAN ID را انتخاب کنید و کد مورد نظر خود را وارد کنید. این کد می‌تواند هر عدد 4 رقمی هگزادسیمالی باشد ولی باید حواستان باشد که اگر می‌خواهید شبکه‌ی زیگبی دیگری برای یک مقصود دیگر در نزدیکی شبکه‌ی مورد نظرتان  بسازید باید حتماً PAN-IDهای متفاوتی داشته باشند.

تنظیم PAN-ID برای گره Coordinator

تنظیم PAN-ID برای گره Coordinator

تا اینجا حداقل تنظیمات مورد نیاز برای گره Coordinator انجام شد. حالا بد نیست ببینیم اگر می‌خواستیم با دستورات AT-Command همین کارها را انجام دهیم از چه باید دستوراتی استفاده می‌کردیم.

برای وارد کردن دستورات AT-Command شما به یک ترمینال برای پورت سریال نیاز دارید. نرم‌افزار ProBee Manager بخشی به نام Terminal برای همین کار دارد ولی اگر نمی‌خواهید از این نرم‌افزار استفاده کنید می‌توانید از ترمینال‌های PuTTY یا TeraTerm استفاده کنید.

عملکرددستور
تغییر نوع گره به CoordinatorAT-NODETYPE=1
تنظیم PAN-ID به عدد 0241AT-PANID=0241
ذخیره‌ی تمام تغییرات (معادل با انتخاب گزینه‌ی Reboot)ATZ

 

توجه کنید که بعد از نوشتن هر دستور AT-Command باید کلید Enter را فشار دهید.

دستورات AT-Command برای تنظیم ماژول Coordinator

دستورات AT-Command برای تنظیم ماژول Coordinator

تنظیمات اولیه‌ی ماژول Router

برای تنظیم ماژول Router باید ابتدا آن را مانند ماژول Coordinator از طریق پورت سریال به کامپیوتر وصل کنید.

عوض کردن جای ماژول Coordinator با Router

عوض کردن جای ماژول Coordinator با Router

حالا در نرم افزار ProBee Manager اگر هنوز اتصال با ماژول Coordinator را قطع نکرده‌اید روی Close کلیک کنید تا اتصال قطع شود. پس از اتصال ماژول Router روی Open کلیک کنید.

این بار برای اینکه گره زیگبی را به عنوان Router تعیین کنید باید از قسمت Network Settings مجدداً گزینه‌ی Node Type را انتخاب کنید. سپس در کادر سمت راست گزینه‌ی ZR (Zigbee Router) را انتخاب کرده و روی Save کلیک کنید.

تعیین گره Router

تعیین گره Router

PAN-ID را نیز مانند ماژول Coordinator روی عدد 0241 تنظیم کنید.

در نهایت روی Reboot کلیک کنید تا تنظیمات در داخل ماژول ذخیره شود. دستورات معادل AT-Command برای تنظیم ماژول Router در جدول زیر آورده شده است.

عملکرددستور
تغییر نوع گره به RouterAT-NODETYPE=2
تنظیم PAN-ID به عدد 0241AT-PANID=0241
ذخیره‌ی تمام تغییرات (معادل با انتخاب گزینه‌ی Reboot)ATZ

 

تنظیم PAN-ID برای گره Router

تنظیم PAN-ID برای گره Router

دستورات AT-Command برای تنظیم ماژول Router

دستورات AT-Command برای تنظیم ماژول Router

پس از انجام تنظیمات ماژول Router باید آن را به پورت سریال (پایه‌های RX و TX) روی برد آردوینو وصل کنیم.

برد آردوینو Uno

برد آردوینو Uno

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

مدار تقسیم ولتاژ برای تبدیل خروجی 5 ولت به 3.3 ولت

مدار تقسیم ولتاژ برای تبدیل خروجی 5 ولت به 3.3 ولت

استفاده از مقاومت‌های 3.3 کیلواهم و 2.2 کیلواهم برای تقسیم ولتاژ

استفاده از مقاومت‌های 3.3 کیلواهم و 2.2 کیلواهم برای تقسیم ولتاژ

روی برد آردوینو یک خروجی تغذیه 3.3 ولتی وجود دارد که باید آن را به تغذیه‌ی ماژول وصل کنید. همچنین GNDها را نیز به هم وصل کنید.

اتصال نهایی برد آردوینو و ماژول ZE10

اتصال نهایی برد آردوینو و ماژول ZE10

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

void setup() {
    Serial.begin(9600);
}

void loop() {
    //Serial.println("AT+BC=Hello World!");
    //Serial.println("AT+MC=0000,Hello World!");
    Serial.println("AT+UC=0001950000004D4E,Hello World!");
    delay(2000);
}

این کد هر 2 ثانیه یک بار عبارت Hello World! را به گره Coordinator ارسال می‌کند. در اینجا عبارت 0001950000004D4E همان EPID مربوط به گره Coordinator است.

مدهای دستوری ارسال داده

برای تبادل اطلاعات بین گره‌های زیگبی سه مد دستوری وجود دارد که عبارتند از:

Unicast

در این مد یک گره می‌تواند به یک گره دیگر در شبکه‌ی زیگبی داده ارسال کند. در شبکه‌ی زیگبی هر گره از دو راه شناخته می‌شود: (1) از طریق EPID (آدرس بلند 64 بیتی یا 16 رقمی) که ثابت است. (2) یک آدرس کوتاه 16 بیتی یا 4 رقمی که یک عدد تصادفی است که هنگام شکل‌گیری شبکه به طور خودکار به هر گره اختصاص داده می‌شود. آدرس کوتاه 0000 همواره به Coordinator اختصاص دارد.

AT+UC=0001950000004D4E,Hello World!

دقت کنید که بعد از هر دستور باید کلید Enter زده شود. تابع println در آردوینو این کار را انجام می‌دهد.

در زبان C نیز عبارت /r/n نقش کلید Enter را ایفا می‌کند:

printf("AT+UC=0001950000004D4E,Hello World!/r/n");

Multicast

می‌توان تعدادی از گره‌های موجود در شبکه را در یک گروه قرار داد تا بتوان اطلاعات خاصی را فقط به اعضای این گروه ارسال کرد. برای ایجاد یک گروه باید یک کد مشخص 16 بیتی یا 4 رقمی به نام Group-ID به تمام گره‌های گروه اختصاص دهیم.

فرض کنید یک گروه با Group-ID یکسان 04F0 ساخته‌ایم می‌توانیم از طریق دستور زیر به تمام گره‌های موجود در گروه عبارت Hello World! را ارسال کنیم:

AT+MC=04F0,Hello World!

Broadcast

در شبکه‌ی زیگبی می‌توان اطلاعات را به تمام گره‌های موجود در شبکه ارسال کرد. مثلاً برای ارسال پیام Hello World! به تمام اعضای شبکه از دستور زیر استفاده می‌کنیم:

AT+BC=Hello World!

دریافت داده‌ها

در این مثال برای اینکه بتوانیم داده‌های ارسالی در سمت گیرنده را مشاهده و روی آن‌ها پردازش انجام دهیم باید گزینه‌ی Display Mode را در تنظیمات ماژول گیرنده فعال کنیم. بنابر این مجدداً وارد تنظیمات ماژول Coordinator می‌شویم و در بخش Data Mode Settings گزینه‌ی Display Mode را انتخاب کرده و آن را روی Enabled قرار داده و آن را Save می‌کنیم. در نهایت نیز دکمه‌ی Reboot را می‌زنیم. دستورات معادل AT-Command در جدول زیر آورده شده است:

عملکرددستور
فعال‌سازی Display ModeATS11=1
ذخیره‌ی تمام تغییرات (معادل با انتخاب گزینه‌ی Reboot)ATZ

 

فعال‌سازی Display Mode

فعال‌سازی Display Mode

پس انجام تنظیمات فوق هر دو ماژول را خاموش و روشن کنید. یعنی تغذیه‌ی ماژول‌ها را یک بار قطع و وصل کنید. حالا مجدداً در حالی که ماژول Coordinator به کامپیوتر وصل است در بخش Terminal نرم‌افزار ProBee Manager یا در هر ترمینال دیگری پس از اتصال به پورت سریال مورد نظر باید چیزی شبیه به شکل زیر را ببینید.

همانطور که ملاحظه می‌کنید در ابتدای پیام دریافتی، EPID مربوط به گره فرستنده‌ی پیام نوشته شده است تا مشخص شود منبع پیام کدام گره است.

در صورتی که هیچ پیامی دریافت نکردید. در سمت Coordinator دستور زیر را تایپ کرده و Enter را بزنید:

AT+DS

این دستور تمام گره‌های موجود در شبکه را اسکن کرده و فهرستی از آن‌ها نشان می‌دهد.

دریافت پیام Hello World! در سمت گره Coordinator

دریافت پیام Hello World! در سمت گره Coordinator

خروجی دستور AT+DS

خروجی دستور AT+DS

بیشتر بخوانید
gswpzm_f

آموزش راه‌اندازی اولیه‌ی ماژول ارتباط بی‌سیم زیگبی ProBee ZE10 برای تازه‌کارها

دیدگاه‌های شما (۸۳ دیدگاه)
  1. با سلام و تشکر از مقاله خوب شما
    یک سوال: آیا می توان از این ماژول جهت ارسال و دریافت صوت استفاده کرد؟ نحوه ارسال و دریافت بصورت فول داپلکس است؟
    با تشکر

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

  2. با سلام و تشکر از مطالب ارزنده و مفیدتون
    من می خوام ماژول رو به میکرو کنترلر pic وصل کنم و کد ارسال و دریافت اطلاعات تو کامپایلر c رو ندارم میتونین منو راهنمایی بکنین؟؟

    • سلام، لطفاً بفرمایید که از کدوم نرم افزار برای برنامه نویسی PIC استفاده می‌کنید؟ یا اسم کامپایلرتون رو بگید.
      چون هر کامپایلری توابع مخصوص به خودش رو داره.

      • من از کامپایلر ccs استفاده می کنم

        • من از MPLAB برای برنامه نویسی PIC استفاده می کنم و تا به حال از CCS استفاده نکردم ولی معمولا در تمام کامپایلرها، دستور puts() عمل ارسال یک رشته به پورت سریال (UART) رو انجام میده. البته قبل از استفاده از این تابع باید پورت سریال میکروکنترلر رو فعال کرده باشید که فکر کنم در CCS از طریق تابع setup_uart() انجام میشه.

          به نظرم بهتره به بخش HELP خود نرم افزار مراجعه کنید.

  3. عالی بود ممنون

  4. آقا چرا همه جا پر شده از آردوینو؟ من دنبال همین آموزش اما برای ارتباط Zigbee ZE10S با ATMEGA32 هستم. اما هیچ کجا پیدا نکردم. امیدم به سایت شما بود که شما هم آردوینو قرار دادید. نمیشه همین آموزش را برای ATMEGA32 قرار بدید؟ کامپایلرش هم CodeVision باشه؟

    • اتفاقا من قبلا آموزش این ماژول رو بر اساس میکروکنترلر AVR و CodeVision نوشته بودم اما خب به هر حال آردوینو چیزیه که تقریبا بین اکثر علاقمندان الکترونیک جا افتاده و یادگیریش هم آسونه. تبدیل کدهای مبتنی بر آردوینو به سایر میکروکنترلرها به شرط تسلط شما بر آردوینو و همچنین تسلط بر میکروکنترلر مورد نظرتون کار چندان سختی نیست.

      همین طور که می بینید در کامنت های قبلی یکی از دوستان درباره میکروکنترلر PIC چنین درخواستی داشتند. شاید چند روز دیگه کسی همین درخواست رو برای میکروکنترلرهای ARM مطرح کنه.

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

      اما درباره میکروکنترلر ATMEGA32 یا هر میکروکنترلر AVR مشابه، کافیه شما مثلا به جای دستور زیر در آردوینو:

      printf("AT+UC=0001950000004D4E,Hello World!/r/n");

      دستور زیر رو در کدویژن جایگزین کنید:

      sprintf(str,"AT+UC=0001950000004D4E,Hello World!/r/n");
      puts(str);

      البته قبلا باید یک رشته به نام str به صورت زیر تعریف کرده باشید:

      char str[100];

      همچنین قابلیت USART میکروکنترلر باید فعال شده باشه و تنظیمات اون (به کمک CodeWizard) انجام شده باشه

      • خیلی ممنون از راهنمایی تون
        من تونستم با استفاده از مطالبی که گذاشتین دو تا زیگبی را کانفیگ کنم. یکی ZC ، یکی ZED
        با استفاده از راهنمایی شما می تونم متن ارسال کنم اما من میخوام یک متغیر int را ارسال کنم. در یک میکرو متغیر تعریف بشه ، توسط زیگبی ارسال بشه ، توسط یک زیگبی دیگه دریافت بشه ، و روی یک ال سی دی نمایش بده. میشه لطف کنید دستور زبان (C (codevision ارسال و دریافت متغیر را بهم بگین؟
        با تشکر

        • سلام،
          خوشحالم که مطالب برای شما مفید بوده. اما در مورد ارسال متغیر int باید عرض کنم که خیلی ساده است. مثلا تکه کد زیر یک متغیر int به نام a رو با دستور Unicast به گرهی به آدرس 0001950000004D4E ارسال میکنه:

          int a = 1234;
          sprintf(str,"AT+UC=0001950000004D4E,%d/r/n", a);
          puts(str);
          

          اما دریافت اعداد موجود در داخل یک رشته همواره پیچیدگی های خودشو داره و نیازمند روش های ابتکاری هست. اما کدی که من یکی دو سال پیش برای این کار نوشته بودم بر اساس وقفه RX میکرو بود. که برای شما میذارم. این کد با این فرض نوشته شده که فرستنده صرفا یک عدد رو بر اساس کد بالا بفرسته. در این حالت ماژول گیرنده،پس از دریافت پیام، رشته ی +000195000000584B|1234\r\n رو به خروجی سریالش که به یه میکروی AVR وصله ارسال میکنه.
          کی که من نوشتم میاد پیام دریافتی رو به دو قسمت تقسیم میکنه. یک قسمت آدرس فرستنده یعنی +000195000000584B و یک قسمت عدد دریافت شده یعنی 1234:

          char addr_flag=0;
          char msg_flag=0;
          char data=0;
          char addr[17];
          char msg[10];
          int recievedNumber;
          
          // USART Receiver interrupt service routine
          interrupt [USART_RXC] void usart_rx_isr(void)
          {
          	data=UDR;
          
          	// extract the transmitter 16-byte IEEE address from the message: +000195000000584B|MESSAGE\r\n
          	static unsigned char i=0;
          	static unsigned char j=0;
          
          	if (data=='+' && addr_flag==0) addr_flag=1;
          
          	if (addr_flag==1 && data!='+') {
          	   if (i==16)
          	   { 
          		  addr_flag=2;
          		  i=0;
          	   }
          	   else
          	   {
          		  addr[i]=data;
          		  i++;
          	   }
          	} 
          
          	if (data=='|' && msg_flag==0) msg_flag=1;
          
          	if (msg_flag==1 && data!='|') {
          	   if (data=='\r')
          	   { 
          		  msg_flag=2;
          		  j=0;
          		  
          		  recievedNumber = atoi(msg);  // convert msg to int
          		  
          		  memset(msg,0,sizeof(msg)); // reset msg
          	   }
          	   else
          	   {
          		  msg[j]=data;
          		  j++;
          	   }
          	}     
          }
          

          کتابخانه های زیر رو هم به کدتون اضافه کنید:

          #include <stdio.h>
          #include <stdlib.h>
          #include <string.h>
          

          recievedNumber همون عدد دریافتی است.
          البته باید بگم که این کد مربوط به خیلی وقت پیش هست و ممکنه در بار اول کار نکنه. ولی لطفا سعی کنید خودتون ایرادشو رفع کنید!

          • سلامی دوباره خدمت آقا میثم عزیز
            میثم جان وقتی از یک زیگبی برای زیگبیه دیگه اطلاعات ارسال می کنیم ، زیگبی دریافت کننده خود به خود اطلاعات دریافتی را روی پایه TX قرار می ده یا اینکه تنظیمات خاصی نیاز داره تا این کار را انجام بده؟

  5. من از drf1605-h zigbee استفاده میکنم.میشه در مورد تنظیماتش راهنماییم کنین؟
    EUID هم در موردش نمیدونم. چون برنامه کانفیگ مثل این برنامه نبود.
    ممنون میشم راهنماییم کنین

    • توصیه می کنم راهنمای کاربری ماژول DRF1605 رو مطالعه بفرمایید:
      http://s9.picofile.com/file/8276420434/DRF1600_ZigBee_Module_V4_0E.pdf.html

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

      • خیلی ممنون از کمکتون.من مشکلم الان اینه که توی برنامه ti sensor monitor وقتی زیگبی کوردیناتور رو وصل میکنم نشون میده.ولی وقتی زیگبی روتر رو روشن میکنم دیگه نشونش نمیده.
        من روتر رو به آردوینو وصل کردم.PAN ID هم واسه جفتشون یکی هست ولی باز جواب نمیده.فک کنم تو اتصال مشکل دارم.جز GND,V3.3 اتصال دیگه ای هم برای روتر باید داشته باشم؟

        • اگه صرفا به عنوان روتر استفاده می کنید نیازی نیست غیر از تغذیه (3.3V و GND) چیز دیگه ای وصل باشه.
          پایه RESET ماژول رو با یه مقاومت 1 کیلو pull-up کنید (به 3.3V وصل کنید) شاید مشکل از اونجا باشه. فعلا چیز دیگه ای به ذهنم نمیرسه ولی به احتمال زیاد مشکل از کانفیگ ماژولتونه.

          توصیه می کنم برای کانفیگ کردن ماژول های DRF از نرم افزار زیر استفاده کنید:

          http://www.dtkcn.com/download/DTKconfigure.v64.rar

          نصب نرم افزار به زبان چینی هست ولی بعد از نصب میتونید زبان نرم افزار رو به انگلیسی تغییر بدین.

          • خیلی ممنونم.ولی الان 1 مشکل دیگه هم دارم و اون اینه که این مدل ماژول انگار دستورات at command رو پشتیبانی نمیکنن.حالا مشکل برنامه نویسی هم دارم.نمیدونم چجوری برنامه فرستنده گیرنده رو بنویسم و خیلی هم عجله دارم چون 2روز بیشتر وقت ندارم.اگر ممکنه راهنماییم کنین خیلی ممنون میشم

            • البته ماژول های مبتنی بر CC2530 خیلی متنوع هستن و هر کدوم دستورات مخصوص خودشون رو دارند. ولی ماژول DRF1605H دستورات AT-COMMAND نداره ولی به جاش دستورات هگزادسیمال براش در نظر گرفته شده. مثلا اگر میخواهید بایت های 0x01 ,0x02 ,0x03 ,0x04 ,0x05 ,0x06 ,0x07 ,0x08 ,0x09 ,0x10 (به ترتیب از چپ به راست) رو به ماژولی به آدرس 143E بفرستید باید کدی شبیه به کد زیر در زبان C بنویسید (با فرض اینکه تابع puts() تابعی باشد که یک رشته را به پورت سریال ارسال کند):

              unsigned char command[14] = {0xFD ,0x0A ,0x14 ,0x3E ,0x01 ,0x02 ,0x03 ,0x04 ,0x05 ,0x06 ,0x07 ,0x08 ,0x09 ,0x10};
              puts(command);

              0x0A هم تعداد بایت های ارسالی به صورت هگزادسیمال است. چون 10 بایت میخواهیم بفرستیم پس عدد 0A که همان 10 در مبنای 16 (هگزادسیمال) است را می نویسیم.

              برای آشنایی با سایر دستورات به راهنمای ماژول، صفحات 18 تا 20 مراجعه کنید.

              http://s9.picofile.com/file/8276420434/DRF1600_ZigBee_Module_V4_0E.pdf.html

  6. با سلام دوباره.ببخشید که من انقدر سوال میپرسم.من بار اول هست که با این ماژولا کار میکنم و چون تجربه ندارم هی به مشکل بر میخورم.الان 3تا سوال دارم
    1-تو راهنمایی بالا منظور از بایتهای 0x01و… آدرس بایتهای رشته هست دیگه؟
    2-اینکه تو پروژه من یک ماژول جی پی اس و یک زیگبی که به آردوینو وصل میشن فرستنده هستن ویک زیگبی و یک آردوینو سمت گیرنده.من برای چی پی اس 2تا از پایه هام رو واسه ارتباط سریال تعریف کردم و rxوtx جی پی اس رو به txوrxآردوینو وصل کردم.برای زیگبی هم 2تا دیگه از پایه های آردوینو رو به عنوان txوrxتعریف کردم و اون رو هم مثل جی پی اس به آردوینو وصل کردم.(rxبهtxو برعکس).
    حالا میخوام ببینم این اتصالا واسه برقراری ارتباط کافیه؟یعنی وقتی به این طریق به هم وصل میشن با دادن اون دستور دیگه اطلاعات فرستاده میشه؟
    3-کتابخانه ای هست که بشه فراخوانی کرد واسه این ارتباط؟
    خیلی ممنون میشم راهنماییم کنید

    • سلام،
      1. منظور از بایت های 0x01 تا 0x10 محتوای دیتای ارسالی است. یعنی شما 10 بایت با محتویات هگزادسیمال 01 تا 10 را میخواهید ارسال کنید. آدرس بایت ها از روی ترتیب اونها مشخصه. با فرض شروع آدرس از عدد صفر، بایت 0x01 در خانه شماره 4 رشته قرار داره.
      2. بله اتصال درست RX ها و TX ها برای ارسال و دریافت اطلاعات کافیه.
      3. نه فعلا کتابخانه ای برای این ماژول ها وجود نداره. اما کدش هم پیچیدگی زیادی نداره که نیاز به کتابخانه داشته باشه.

      در آردوینو به جای puts(command) از Serial.write(command, 14) استفاده کنید که 14 همون طول رشته است که در صورت تغییر طول یا همون تعداد بایت های دستور باید عدد مناسب رو جایگزین کنید.

  7. سلام.من اینو امتحان کردم و نشد یعنی فکر کنم منظور از محتوای هگزادسیمال رو متوجه نشدم.ببینین من الان باید دایم اعدادی که gps به عنوان طول و عرض جغرافیایی میده رو با زیگبی بفرستم و از طرف دیگه هم با زیگبی دریافت کنم.من چجوری بفهمم هر بایت محتواش چی هست که به کد هگزا تبدیل کنم؟
    بعد تو دفترچه نوشته این روش برای ارتباطpoint to point هست.اگر از روش transparent استفاده کنم نحوه ارسال و دریافتش چجوری میشه؟

    • سلام،
      این ماژول داده ها رو به صورت بایت به بایت ارسال میکنه. فرض کنید شما یک عدد صحیح یک بایتی بدون علامت (0 تا 255) رو ارسال کنید. ما اسم این عدد رو a میذاریم و مقدار 132 رو داخل اون میریزیم و از طریق کد زیر هر 2 ثانیه به ماژول دستور میدیم تا اون رو به آدرس 143E ارسال کنه. با فرض اینکه RX و TX ماژول به ترتیب به TX و RX آردوینو (با لحاظ کردن مدار تبدیل ولتاژ 5 به 3.3) وصل باشه.

      void setup() {
        Serial.begin(38400);
      }
      
      void loop() {
        unsigned char a = 132;
        unsigned char command[100];
      
        command[0] = 0xFD;
        command[1] = 0x0A;
        command[2] = 0x14;
        command[3] = 0x3E;
        command[4] = 1; // number of bytes to be sent
        command[5] = a; // data to be sent
      
        Serial.write(command, 6);
      
        delay(2000); // wait for 2 seconds
      }
      

      ضمنا با وجود فقط دو ماژول استفاده از مد transparent بی معنیه. کدی که نوشته شده برای مد point-to-point هست.

      ضمنا باید عرض کنم که من با ماژول DRF1605H مستقیما کار نکردم. تمام چیزهایی که میگم از روی همون راهنمای ماژول و تجربیات مشابهم هست. پس زحمت مطالعه دیتاشیت و راهنمای ماژول رو خودتون بکشید.
      برای ارسال طول و عرض جغرافیایی اولا باید یک متغیر مناسب برای اون در نظر بگیرید. اگه مقدار طول و عرض جغرافیایی یک عدد اعشاری باشه باید از float استفاده کنید که یک عدد 4 بایتی هست ولی اگه عدد صحیح باشه متغیر signed char مناسبه که 1 بایت هست.

      اگه سوال دیگه ای دارید لطفا از طریق ایمیل ارسال کنید. این صفحه صرفا برای راهنمایی در مورد ماژول ZE10 هست.

  8. بله من تو برنامه نویسی خیلی بی تجربه هستم.بازم ممنون از راهنماییتون

  9. سلام
    با تشکر از مقاله ای که به نوشتاری زیبا و صمیمی زحمتش رو کشیده بودید
    یک سوال
    بهترین روش و ارزانترین روش برای ارسال ویدیو از یک دوربین کوچک که قابلیت sccb داشته باشه مثل ov7670 به صورت وای فای که بشه با موبایل دریافتش کرد چیه؟
    اگه اصول کلی کار رو هم بگید ممنون میشم منظورم اینه چه چیزهایی نیاز دارم، برنامه ای که مینویسم باید چکار کنه و …
    البته این ماژول هم هست که فکر میکنم کامل باشه اگر در مورد این هم اموزشی بزارید یا حداقل توضیحی بدید بسیار عالی میشه:
    http://shop.aftabrayaneh.com/Communications/WiFi/GSM_GPRS_WIFI_CAMERA_0.3MP_MODULE_A20.html
    البته من فقط صرفا نشان دادن تصویر زنده همون لحظه رو میخوام و بقیه امکاناتش کاری ندارم در واقع دنبال این هستم که یک دوربین وای فای درست کنم که با گوشی یا تبلت بشه اون رو دید بدون نیاز به اینترنت

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

  10. با سلام
    نمونه کد اردوینو برای این زیگ بی موجود هست که مثل یه کد رو بفرسته و هماهنگ کننده دریافت کننده ؟
    خیلی متشکرم

  11. با سلام وخسنه نباشید
    آقای پرویزی اگه امکانش هست یک نمونه کد آردوینو از همین ماژول ZE10 اینجا بزارید یا اگه امکانش هست ایمیل کنید!
    ماژول ها را خریداری کردم ولی با آردوینو نمیتونم ارتباط بدم.
    ممنون میشم کمک بفرمایین
    متشکرم

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

  12. سلام آقای پرویزی
    خواهشا کد زیر رابررسی کنید که آیا به درد کد زنی probee در آردوینو میخورد؟
    خیلی متشکرم
    http://wallfloweropen.com/?project=getting-started-with-simplezigbee-for-arduino-xbee-part-1

    • سلام
      لینکی که گذاشته بودید رو بررسی کردم. اون کد برای ماژول xbee هست که با وجود اینکه از نوع زیگبی است ولی از اساس با ماژول probee تفاوت داره. به همین دلیل کدهای xbee به درد probee نمیخورن.

  13. با عرض سلام و خسته نباشید و باتشکر از مطالب مفیدتون
    میخواستم بدونم چطور میشه یه شبکه حسگر بی سیم رو با استفاده از ماژول zigbee راه اندازی کرد ؟
    با تشکر

    • با سلام،
      اصولا برای راه اندازی یک شبکه حسگر، شما در کنار هر سنسور به یک میکروکنترلر نیاز دارید تا خروجی سنسور را تحلیل کرده و داده مناسب برای ارسال را در اختیار فرستنده بی سیم (مثلا ماژول زیگبی قرار دهد). البته اگر سنسورهای شما خروجی آنالوگ داشته باشند بد نیست بدانید که برخی از ماژول های زیگبی از جمله همین ماژول ProBee دارای مبدل آنالوگ به دیجیتال (ADC) هستند و بدون نیاز به میکروکنترلر میتوانند داده ی خروجی سنسورهای آنالوگ را مستقیما دریافت و ارسال کنند.
      البته باید توجه داشته باشید که استفاده از ماژول های زیگبی به دلیل قیمت بالا برای شبکه های کوچک (که امنیت داده ها در آن ها اهمیت زیادی ندارد) مقرون به صرفه نیست. در شبکه های کوچک می توان با صرف هزینه و زمان کمتر، از ماژول های ارتباط بی سیم ارزان تر و ساده تر استفاده کرد.
      برای کسب اطلاعات بیشتر در این باره می توانید به کتاب Building Wireless Sensor Networks نوشته ی Robert Faludi مراجعه کنید. (فایل PDF کتاب در اینترنت موجود است.)

  14. با سلام.
    ایا برای کانفیگ کردن این ماژول با اردوینو باید At command ها برای تعیین روتور و هماهنگ کننده و پایان افزار ها باید در کد قید شوند یا ابتدا با انجام تنظیمات توسط نرم افزار probee انجام می شود و سپس فقط کدهای دریافت و ارسال اطلاعات رو تو محیط اردوینو بنویسیم؟
    2) برای ارسال و دریافت از چه کدی برای اردوینو استفاده میشود؟
    خیلی ممنونم از اطلاعات مفید و خوب شما.
    متشکرم

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

  15. سلام
    بسیار عالی بود ممنون

  16. سلام
    آیا امکان پروگرام کردن این ماژول ها وجود دارد ؟ که دیگه از میکرو استفاده نکنیم ؟
    مانند ماژول esp8266

  17. دوست عزیز من نمیتونم بااین ماژول ها ارتباط بگیرم..اصلا نتونستم راه اندازیش کنم..نمیدونم ایراد کارم کجاست.من یه مبدل یو اس بی به سریال دارم و یه برد که رووش آی سی مکس دارم که ورودی این مکس به تقسیم مقاومتی که شما گفتین وصل کردم طبق همون و خروجی مکس رو دادم به مبدل یو اس بی به سریالم..تغذیه ماژولم رو 3.3 ولت دادم و تغذیه برد مکس هم 5 ولت جداگانه..که زمین این 5 ولت و 3.3 ولت رو بهم وصل کردم…حالا کجای کارم غلطه نمیدونم…میشه راهنماییم کنین..

    • سلام
      برای اینکه بتونم بهتون کمک کنم باید اطلاعات دقیق تری از نحوه اتصالاتتون و به خصوص نام و مدل مبدل USB به سریال رو بدونم.
      شما لطف کنید اطلاعات دقیق در مورد اتصالات و شماتیک مداری که استفاده کردید رو به ایمیل ما بفرستید: tabingroup [at] gmail.com

  18. سلام
    یک سئوال داشتم آیا ایجاد یک شبکه بی سیم با ماژول های zigbee باعث اختلال فرکانسی با دیوایس های دیگه مثلا یک مودم وای فای نمیشه؟ چون هر دو wlan 2.4 Ghz هستند و از یک استاندارد استفاده می کنند.
    اگر همچین احتمالی وجود داره آیا روشی هست که بشه این احتمال رو به صفر رسوند.
    در ضمن بابت سایت و مطالب عالی تون ازتون ممنونم

    • سلام، بله امکان تداخل وجود داره. فرکانس 2.4 گیگاهرتز در هر کدام از استانداردهای وای فای و زیگبی به کانال های مختلفی تقسیم شده است. برای جلوگیری از اختلال باید زیگبی و وای فای را در کانال های متفاوتی استفاده کنیم.

      https://support.metageek.com/hc/en-us/articles/203845040-ZigBee-and-WiFi-Coexistence

      • ممنون از توجه تون.
        آیا تغییر کانال ماژول zigbee از طریق برنامه ای که شرکت سازنده ارائه داده ( همین برنامه ای که در بالا عکسش هست) امکان پذیره؟
        اگر هست میشه راهنمایی کنید.
        با تشکر

        • شما می تونید یک یا چند کانال رو از میان تمام کانال های تعبیه شده برای زیگبی انتخاب کنید. در استاندارد اصلی زیگبی 16 کانال برای این کار انتخاب شده اما در این ماژول ZE10 تنها 14 کانال وجود داره که بازه فرکانسی 2.410 تا 2.475 گیگاهرتز رو پوشش میده که این کانال ها از 12 تا 25 شماره گذاری میشن (مجموعا 14 کانال). برای انتخاب کانال ها شما از یک ماسک بیتی با عنوان Channel Mask استفاده می کنید.
          برای کسب اطلاعات بیشتر به User Manual ماژول و به قسمت Network Specific Parameters بروید و دستور AT+CHMASK رو مطالعه کنید. (صفحه 67)
          همچنین در داخل نرم افزار ProBee Manager پس از شناسایی ماژول در قسمت Network Setting میتونید در بخش Channel Mask تنظیمات مورد نظر رو انجام بدید.

  19. با سلام و تشكر بابت مطالب خوبتون
    آيا ميتوان توسط coordinator چندتا نود زيگبي را تحت كنترل داشت؟ هم بشه ديتا بين آنها ارسال و هم دريافت شود؟
    لطفا توضيح دهيد
    متشكر

    • سلام
      بله اصلا ماهیت Coordinator این است که می تواند چندین نود زیگبی را تحت کنترل داشته باشد.
      همچنین ارتباط بین تمام نودهای زیگبی دوطرفه است و هر نود زیگبی فارغ از اینکه Coordinator، Router یا End-device باشد می تواند با هر نود زیگبی دیگری در داخل شبکه تبادل داده داشته باشد. یعنی هم می تواند فرشتنده باشد و هم گیرنده.

      • با سلام و تشكر بابت پاسخ سريع شما
        در ادامه سوال قبلي و پاسخ شما سوالي داشتم:
        اينكه حداكثر چندتا نود زيگبي با Coordinator مي تواند تعامل داشته باشد؟
        چطور ميتوان اين تنظيمات را انجام داد؟
        درصورت امكان مطلبي جهت مطالعه و آموزش بيشتر قرار دهيد و يا لينك آموزش
        با سپاس از پاسخ و راهنمايي شما

        • با توجه به نوع مازول زیگبی مورد استفاده ماکزیمم تعداد نودها می تواند بین 20 تا 250 نود باشد اما ظاهرا برای ماژول ZE10 چیزی در حدود 100 نود در هر شبکه قابل قبول است.
          در مورد آموزش متاسفانه فعلا فرصت کافی برای نوشتن مطلب آموزشی ندارم. اما شما میتوانید از اطلاعات موجود در راهنمای خود ماژول استفاده کنید. همچنین برای آشنایی با مفاهیم اولیه به لینک زیر مراجعه کنید:
          https://iotpoint.wordpress.com/zigbee-tutorial

  20. با سلام و خسته نباشيد
    در مورد ماژول زيگبي S2 سوال داشتم
    جايي نوشته بود اين ماژول همانند يك ميكروكنترلر است كه از پروتكل زيگبي استفاده مي كند.
    يعني مي توان سنسوري رو بهش وصل كرد و اطلاعاتي را براي يك coordinator ارسال كند؟
    نيازي به ميكرو ندارد؟ براي راه اندازي
    ممنون
    پاك كرديد پيام رو

    • سلام
      بله ماژول های زیگبی روی یک هسته ی میکروکنترلری پیاده شده اند اما در مقایسه با سایر میکروکنترلرهای رایج امکانات جانبی زیادی ندارند. اما به هر جهت اکثر ماژول های زیگیی دارای واحد adc هستند که میتوانید از آن برای اتصال به سنسورهای آنالوگ استفاده کنید.

  21. سلام ممنون از آموزش خوبتون
    مشکل من این هست که وقتی نرم افزار رو اجرا میکنم پیغام هشدار دیگه ای رو میده . و میگه نمیتونه فریم ور ورژن رو پیدا کنه.
    (?could not recognize firmware version. maybe this manager out of data. would you like to update this manager) که من no زدم البته AT کامند ها کار میکنن و شبکه ایجاد میشه و و با دستور AT+DS نشون میده کوردینیتور و روتر در شبکه هستن.و در شبکه وجود دارن اما دیتا انتقال پیدا نمیکنه.
    بنظرتون مشکل من فریم ور هست الان؟

    • سلام
      در هر صورت اگه firmware رو آپدیت کنید بهتره ولی نمیدونم مشکلتون از firmware هست یا نه.
      برای تمام ماژولهایی که استفاده میکنید firmware رو آپدیت کنید ببینید مشکل حل میشه

      • مرسی از پاسخ مشکل رفع شد.

        از فریم ور نبود مهندس من چون اون خط کد پرینت اف رو کپی کردم از رو اینجا به /r/n دقت نکرده بودم. اونا بجای اسلش باید بک اسلش نوشته بشه.

  22. سلام . مرسی از مطلبتون . من دو عدد برد اماده ze10 دارم . اگر امکان دارد طریق ارسال و دریافت رو با نرم افزار probee توضیح بیشتر دهید .

  23. ببخشید . این probee manger که من دارم محیطش مث شماس اما قسمت ترمینال را ندارد . چیکار کنم ؟

  24. سلام روز بخیر، من اطلاعات زیادی در مورد زیگبی ندارم اما میخواستم لطف کنین یه توضیحی بهم بدین که اگه من بخوام آبیاری هوشمند رو تو باغ پیاده کنم با زیگبی نیاز به سیم کشی ندارم؟ تمام سنسورهام باید به زیگبی وصل بشن؟ در مورد انتخاب ماژول ها هم راهنمایی کنین ممنون

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

      در مورد انتخاب ماژول شاید بشه گفت که شما انتخاب های زیادی ندارید و موجودی بازار ایران گزینه های محدودی رو در اختیار شما میذاره اما اگر تخصص زیادی در زمینه الکترونیک ندارید توصیه می کنم ماژول هایی که راه اندازی اونها نیازی به نوشتن firmware نداره مثل ماژول های ZE10 ، XBee، DRF1605H استفاده کنید که البته ماژول های XBee به دلیل سابقه زیادی که دارند، منابع آموزشی و نمونه کد های زیادی برای راه اندازی اونها وجود داره.

      در مورد ماژول های مبتنی به تراشه CC2530 که الان در بازار به وفور پیدا میشه باید بگم که اکثر این ماژول ها firmware ندارند و شما باید قبل از هر کاری برای اونها firmware بنویسید که کار چندان آسانی نیست و به تخصص و زمان زیادی نیاز داره. در بین ماژول های مبتنی بر CC2530 تقریبا فقط ماژول DRF1605H هست بر روی خودش firmware داره و شما فقط از چند دستور ساده که در اختیار شما قرار میگیره برای ایجاد ارتباطات و تبادل اطلاعات استفاده می کنید.

  25. سلام و خسته نباشید
    برای کنترل دما یه اتاق با استفاده از زیگبی میشه توضیح بدید چجوری این کار انجام می‌گیره؟؟

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

      1. حسگری که دمای محیط رو تشخیص بده و اون رو به صورت دیجیتال به یک ماژول زیگبی تحویل بده. مثل سنسور دما
      2. عملگری که مطابق با دستوراتی که سیستم کنترلی شما بهش میده دمای محیط رو تغییر میده. مثل هیتر یا کولر
      3. سیستم کنترلری که اطلاعات رو از یک ماژول زیگبی مرکزی [که اطلاعات رو از ماژول زیگبی متصل به سنسور به صورت بی سیم] دریافت کرده و بر اساس اطلاعات دریافتی دستور لازم رو به هیتر یا کولر میده. مثل میکروکنترلر یا کامپیوتر یا…
      4. ماژول های زیگبی که در نقاط مختلف اتاق به سنسورهای دمای مجزا متصل شدند و شبکه ای از سنسورها رو ایجاد کردند.

      لازم به ذکره که استفاده از زیگبی در مواردی که شما فقط از یک یا دو سنسور استفاده می کنید چندان مقرون به صرفه و منطقی نیست.

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

        • بله برای کاری که شما قصد دارید انجام بدید 2 تا ماژول کافیه.

          • ممنون،مدل ماژولی که کار باهاش برای ما راحت باشه و قیمتش زیاد نباشه رو پیشنهاد میدید؟
            بعد اینکه از چه طریقی میشه بیشتر در مورد اینکه چجوری زیگبی اطلاعات رو می‌گیره می‌فرسته و وقتی به ما رسید چجوری باید این اطلاعات رو دریافت کرد،توضیح بگیریم

            • فکر کنم ماژول DRF1605H برای کار شما مناسب باشه. در مورد نحوه کار باهاش هم در کامنت های قبلی توضیحات مختصری دادم. چون خودم با این ماژول کار نکردم نمیتونم دقیق راهنماییتون کنم. بهتره به دیتاشیت ماژول مراجعه کنید.

  26. خیلی متشکرم بابت توضیحاتتون
    بله دیتاشیت رو مطالعه کردم
    ببخشید گروه شما اینجور پروژه های دانشجویی رو انجام میدید؟؟
    که اگه ما نتونستیم پروژه رو به جواب برسونیم امید داشته باشیم به شما یا نه فکر دیگه ای باید کرد

  27. با سلام
    یه سوال در مورد drf1605h داشتم . تو این ماژول دقیقا ما باید به کدوم پایه سنسور رو وصل کنیم؟ و این که پایه ی p0.0 برای چه کاریه؟
    با سپاس

    • ضمن عرض سلام خدمت شما دوست عزیز، متاسفانه من با این ماژول کار نکردم. البته با ماژول های مشابه که مثل همین DRF1605H از آی سی CC2530 استفاده میکنند کار کردم.
      ماژول های زیگبی معمولا یک یا چند پایه با قابلیت خوندن ولتاژ آنالوگ (همون ADC) دارند که میتونید از اون برای خوندن ولتاژ خروجی سنسورهای آنالوگ مثل سنسور دمای LM35 و … استفاده کنید.
      پس وقتی در این گونه ماژول ها از سنسور صحبت میکنیم منظورمون فقط سنسورهای آنالوگ هست.

      علاوه بر این پایه های ماژول های زیگبی که معمولا با ولتاژ 3.3 ولت تغذیه میشن فقط تحمل ولتاژهای بین 0 تا 3.3 ولت رو دارند و اگه ولتاژ بیشتر بشه ممکنه اون پایه یا حتی کل ماژول بسوزه!

      پس با رعایت این نکات باید عرض کنم که پایه ی p0.0 یکی از پایه های ADC تراشه CC2530 هست (به طور کلی پایه های p0.0 تا p0.5 دارای قابلیت ADC هستند). ولی نمیدونم ماژول DRF1605H در مجموعه دستوراتش اصلا قابلیت خوندن ADC رو در اختیار شما قرار داده یا نه. تا جایی که من بررسی کردم همچین امکانی وجود نداره! مگر اینکه شما بخواهید firmware اون رو تغییر بدید. که اصلا برای افراد مبتدی این کار رو توصیه نمیکنم چون هزینه نسبتا زیادی رو روی دست شما خواهد گذاشت. چون هم باید پروگرامر تراشه CC2530 رو تهیه کنید و هم زمان بسیار زیادی رو صرف نوشتن یک firmware اختصاصی برای ماژول بکنید که اصلا کار آسونی نیست!!!

      شما میتونید سنسور خودتون رو به یه میکروکنترلر دارای ADC و پورت سریال وصل کنید و داده ی پردازش شده رو از طریق پایه های RX و TX و طبق دستورات تعریف شده برای ماژول DRF1605H بفرستید تا به ماژول های دیگه شبکه به صورت بیسیم ارسال بشه.

  28. سلام . ورژن نرم افزار شما چند است ؟

  29. سلام
    ببخشید من یکم گیج شدم، مگه ماژولهای CC2530 یک نوع از ماژولهای ZigBee نیستند؟
    پس منظورتون از ماژولهای ZigBee مبنی بر CC2530 چیه؟

    • سلام
      وقتی از Zigbee صحبت می کنیم منظورمون یک پروتکل ارتباط بی سیم هست. برای پیاده سازی این پروتکل نیاز به ساخت سخت افزار و نرم افزار خاصی هست. تمام سخت افزار مورد نیاز برای پیاده سازی این پروتکل در قالب یک آی سی خاص ساخته میشه. CC2530 نام یک آی سی هست که این سخت افزار رو روی خودش داره. در کنار این سخت افزار برای تکمیل پروتکل Zigbee نیاز هست تا نرم افزار خاصی روی این آی سی نوشته بشه که بهش firmware گفته میشه.
      ماژول های زیگبی هم بر اساس این تعریف به دو دسته تقسیم میشن:
      دسته اول که صرفا سخت افزار (آی سی) مورد نیاز رو روی خودش دارن و بخش نرم افزاری پروتکل زیگبی (firmware) در زمان تولید ماژول روی اون نوشته نشده (مثل اکثر ماژول های CC2530 که با این نام در بازار ایران موجود هستن).
      دسته دوم ماژول هایی هستن که علاوه بر سخت افزار (آی سی) بخش افزاری پروتکل زیگبی هم روی اونها نوشته شده (مثل ماژولهای XBee ، ProBe و DRF1605H).
      برای استفاده از دسته اول ماژول ها شما باید دانش کافی در زمینه جزئیات نرم افزاری پروتکل زیگبی داشته باشید و در واقع باید بتونید firmware بنویسید که نیاز به تخصص داره. اما برای استفاده از دسته دوم ماژول ها شما کافیه چند دستور مشخص که مثلا برای ارسال یا دریافت اطلاعات هست و سازنده ی ماژول اونها رو در firmware تعریف کرده رو بلد باشید.

  30. سلام
    ببخشید شما میگین که ماژول های زیگبی دو دسته اند: دسته اول مثل اکثر ماژولهای CC2530 و دسته ی دوم مثل ماژولهای XBee ، ProBe و DRF1605H. طبق این دسته بندی یعنی ماژول CC2530 و ماژول DRF1605H دو نوع ماژول مختلف هستند. اما از طرفی شما توی یکی از کامنتاتون نوشته بودین : “در بین ماژول های مبتنی بر CC2530 تقریبا فقط ماژول DRF1605H هست بر روی خودش firmware داره و شما فقط از چند دستور ساده که در اختیار شما قرار میگیره برای ایجاد ارتباطات و تبادل اطلاعات استفاده می کنید.” که این به این معنیه که ماژولهای CC2530 زیر بخش ماژول های DRF1605H هستند.
    بنا بر این، این دو حرف شما به نظر یکم متناقض میاد. ممنون میشم اگه یکم بیشتر توضیح بدین.

    • سلام.
      اصلا اون اسم CC2530 رو فراموش کنید.
      تفاوت دسته اول با دسته دوم فقط در اینه که firmware ندارن.
      وگرنه ماژول DRF1605H هم از اون آی سی CC2530 استفاده می کنه اما در کنارش firmware هم داره. اما سایر ماژول هایی که با نام CC2530 در بازار موجود هستن firmware ندارن.

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