آموزش, توصیه شده, مقاله

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها

قبل از اینکه قسمت بشه با ماژول +NRF24L01  کار کنم، خیلی از دوستان را دیده بودم که با این ماژول درگیر بودند و توی راه‌­اندازیش مشکل داشتند و مثل یک اپیدمی شده توی گروه­های تلگرامی و فروم­ها. همان­طور که حدس می‌­زنید وقتی که به ماژول +NRF24L01 نیاز پیدا کردم تا راهش بندازم و ازش استفاده کنم دقیقا همین بلا سر خودم هم اومد.

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

پس وقت را تلف نکنیم و بریم سراغ راه‌اندازی … با سیسوگ همراه باشید.

ترتیب پایه های ماژول +NRF24L01

نکات

  • در این کتابخانه از پین IRQ استفاده نمی­‌شود.
  • CSN همان SS در ارتباط SPI است و CE یک پین اضافه کنترلی برای ماژول +NRF24L01 می­‌باشد.
  • نحوه اتصال پایه­‌ها به میکروکنترلر در فایل c تعریف می‌شود که متعاقباً مفصل توضیح داده خواهد شد.
  • همان­طور که می­‌دانید تغذیه ماژول 3 ولت هست اما بقیه پایه‌­های ارتباطی ماژول (5v tolerant) هستند. یعنی سطح لاجیک 5 ولت رو تحمل می­کنه و می‌­تونیم مستقیم به میکروکنترلر­های 5 ولتی، مثل بعضی از مدل­های avr متصل کنیم.

توضیحات در مورد کتابخانه

این کتابخانه شاید بهینه­‌ترین نباشه اما احتمالاً portable ترین هست. (نمی­‌دونم فارسیش چیه) یعنی شما می‌­توانید با تغییرات کوچکی این کتابخانه را متناسب با میکروکنترلر خودتان شخصی‌­سازی کنید. علت این صحبت هم این هست که شما با تغییر دادن چند تا تابع (که به قسمت GPIO هر میکروکنترلر مربوط میشه) در فایل radioPinFunctions.c، می‌توانید کتابخانه موردنظر را شخصی‌سازی کنید و  هر پایه­‌ای از میکروکنترلر را به هر کدام از پایه‌­های ماژول +NRF24L01 که خواستید وصل کنید و از این بابت جای هیچ نگرانی نیست. این قسمت فقط یکم دانش زبان C می­‌خواد و آشنایی با GPIO میکروکنترلر مربوطه.

در این کتابخانه حالت­‌های Auto Acknowledgement و Auto Retransmission فعال شده است و تعداد دیتا باید یک اندازه ثابت باشه (static length payload mode).

دو ویژگی ذکر شده از مهم­ترین قابلیت­های +NRF24L01 هستند که با آن‌ها می­‌توانیم بفهمیم دیتا درست رسیده یا نه!

همچنین اگر دیتا در مرحله ارسال از دست رفت و درست به مقصد نرسید این چیپ می‌تواند خودش کار ارسال دوباره (Retransmision) رو انجام بدهد، که می­‌توانیم این قسمت را هم خودمان تنظیم کنیم که چه تعداد تلاش دوباره انجام بدهد و بین هر کدام از این تلاش‌ها چه تاخیری ایجاد شود.

البته تعداد تلاش دوباره روی 15 بار و تاخیر 1000 میکرو­ثانیه به صورت خودکار تنظیم شده است، اما با تابع nrf24_RetransmissionConfig می‌توانیم این مقادیر را تغییر بدهیم.

برای راه‌­اندازی ماژول باید چهار فایل زیر در مسیر پروژه قرار بگیرد:

  • nrf24.c
  • nrf24.h
  • nRF24L01.h
  • radioPinFunctions.c

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

ممکن است کامپایلر یک سری Warning هم بدهد، آنقدر مهم نیستند، آن‌ها را نادیده بگیرید.

(علت اینکه فایل­های c. رو داریم ضمیمه می‌­کنیم این هست که یه سری از توابعی که داخل فایل nrf24.c وجود دارند داخل فایل nrf24.h موجود نیست. حال اگر فایل h. رو ضمیمه کنیم، احتمالا کامپایلر کلی ارور خواهد داد؛ اگرچه در عمل فایل­های h. و c. فرقی باهم ندارند و فقط فایل h. یک نامگذاری دیگر است که تفاوت بین فایل­های کتابخانه و کد پروژه مشخص باشد)

قبل از اینکه برویم سراغ کد­نویسی یه نکته رو بگم،

حتی­‌الامکان اگر از هر تابعی داخل پروژه استفاده می‌کنید آن را دستی ننویسید و بروید از هدر nrf24.h کپی و استفاده کنید، چون حروف کوچک و بزرگ داخل این توابع زیاد هست و ممکن است اشتباهات ناخواسته‌ای رخ بدهد.

خب شروع کنیم به یاد گرفتن توابع که ماشالله کم هم نیستن، ولی دست ما رو تقریباً واسه هر کاری باز می­‌گذارند.

نحوه شخصی­‌سازی فایل radioPinFunctions.c برای میکروکنترلر موردنظر

ابتدا ببینیم اصلا هدف و کاربرد این فایل چی هست؟!

قرار است ما در این فایل به کتابخانه بفهمانیم که چه پایه‌­ای از ماژول به چه پایه‌­ای از میکروکنترلر وصل است، سپس بیایم ورودی-خروجی بودن اون پایه­‌ها رو تعیین کنیم و در نهایت نحوه صفر و یک کردن اون پایه رو به کتابخانه یاد بدهیم. علت این کار هم این هست که کتابخونه بتونه با spi نرم­‌افزاری با ماژول صحبت کند. (یعنی یه spi که ما خودمون با gpio ها ساختیم و دیگه محدودیت کتابخونه به یک میکروکنترلر رو برداشتیم و می‌توانیم با هر میکروکنترلری کار کنیم)

در این قسمت همه مثال‌­ها و کد­ها بر اساس میکروکنترلر atmega8 ،avr است چراکه یک چیز عام باشد و همه بتوانند درکش کنند و ازش استفاده کنند. و شما باتوجه به فهمی که از avr دارید و توضیحاتی که داده شده، باید کد های مربوط به میکروکنترلر خودتان را جایگزین کنید.

بریم سراغ کدنویسی …

در خطوط اول فایل باید هدر میکروکنترلر مربوطه رو ضمیمه کنید تا برنامه رجیستر­های GPIO را بشناسد.

مثال

در ادامه سه تا define خواهید دید که کارشان مثل یک تابع هست که دو تا ورودی می‌­گیرد و اونا رو توی یک عملیات جای­گذاری می­‌کند. (این قسمت برای کوتاه شدن کد استفاده شده است و شما ممکن است اصلا بهش نیازی نداشته باشید و بستگی به میکروکنترلرتون داره …)

(set_bit(reg,bit: یک بیت از یک رجیستر رو 1 می­کند.

(clr_bit(reg,bit: یک بیت از یک رجیستر رو 0 می­کند.

(check_bit(reg,bit: مقدار یک بیت بخصوص از یک رجیستر را بر‌می‌گرداند.

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

()nrf24_setupPins: نقش این تابع تعیین ورودی-خروجی بودن پایه‌­های متصل به میکروکنترلر از ماژول می­‌باشد.

مثال

می‌خواهیم پایه x از یک پورت میکرکنترلر مورد نظر را که به ce ماژول متصل است خروجی کنیم:

که Register همان رجیستر مربوط به تعیین خروجی میکروکنترلر مورد نظر است.

مثال

پایه ce ماژول به پین 1 از پورت B میکروکنترلر mega8 متصل است که باید خروجی شود، پس:

مابقی را نیز به همین شکل انجام می­‌دهیم.

نکته: توجه داشته باشید چه در سمت فرستنده چه در سمت گیرنده میکروکنترلر ما در حالت Master قرار دارد و ماژول Slave است، پس باید تمام پایه­‌های متصل به ماژول +NRF24L01، به جز پایه MISO، در هر دو طرف خروجی شوند.

تابع (nrf24_ce_digitalWrite(state

برای مثال در این قسمت ما پایه ce را به پایه 1 پورت B میکروکنترلر atmega8 متصل کرده‌­ایم و تغییر آن به شکل زیر می­‌شود:

همان­طور که مشاهده می­‌کنید کار این تابع این است که از ورودی 0 یا 1 می­‌گیرد و اگر 1 بود دستور set_bit و اگر 0 بود دستور clr_bit را اجرا می­‌کند. اما این‌­بار ورودی دستورات define شده، رجیستری است که مستقیماً سطح لاجیکی ( Logic Level ) پایه­‌ها را کنترل می­‌کند.

برای مابقی توابع همین عملیات تکرار می­‌شود.

برای تابع آخر هم باید مانند این مثال تغییر را اعمال کنیم.

برای مثال اگر پایه miso ماژول به پین 4 پورت B متصل باشد، کد مربوطه به شکل زیر خواهد شد:

خب کار شخصی­‌سازی این فایل تمام شد، فایل را ذخیره می­‌کنیم و دیگه کاری با فایل­‌های کتابخانه نداریم و می‌رویم سراغ یادگیری توابع و بکارگیری­شون داخل کد اصلی برنامه.

توابع شامل چند دسته میشن که به ترتیب توضیح داده میشه :

پیکربندی (Configuration) ماژول +NRF24L01

برای پیکربندی اولیه ماژول +NRF24L01 سه تابع زیر تعریف می‌­شود :

1- ()nrf24_init

این تابع باید اول از همه در تابع main فراخوانی شود و کارش تعیین ورودی-خروجی پایه­‌های انتخاب شده از قبل و در کل، تخصیص پایه­‌های میکروکنترلر به پایه­‌های ماژول است.

2- (nrf24_config(channel , payload_length , data_rate

داخل این تابع کارهای زیادی انجام می‌شود، اما کارهایی که ما می­‌‎توانیم با ورودی تغییرشان بدهیم دو متغیر است، یکی انتخاب کانال فرکانسی هست؛ که می­‌توانیم به جای channel از 0 تا 83 قرار بدهیم و دیگری تعداد بایت‌­هایی که می­‌خواهیم در هر ارسال فرستاده شود؛ که می­‌توانیم به جای payload_length از 0 تا 32 قرار بدهیم.

به جای data_rate باید یکی از سه عدد زیر قرار گیرد:

0 ->  1Mbit/s

1 -> 2Mbit/s

2 -> 250Kbit/s

توجه: این سه متغیر باید در هر دو طرف فرستنده و گیرنده یکی باشند.

مثال

در این مثال کانال 1 انتخاب شده است، یعنی فرکانس 2.401Ghz تعداد بایت­های ارسالی 4 عدد و سرعت ارسال 2Mbit/s می­‌باشد.

نکته: بعد از فراخوانی این تابع ماژول به صورت خودکار به حالت گیرنده می­‌رود.

3- (nrf24_RetransmissionConfig( delay_us , trial

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

در این تابع مقدار تاخیر، به جای delay_us فقط ضرایب خاصی از 250 می­تواند قرار گیرد. در غیر این­صورت رفتار ماژول قابل پیش‌­بینی نیست.

این مقادیر تاخیر از طریق فرمول زیر به دست می­‌آیند:

delay = (250*n)+250

که n از 0 تا 15 مقدار می­‌پذیرد . یعنی ضرایب 250 تا حداکثر عدد 4000 قابل فهم و کار کردن برای ماژول است. پس می­توانیم اعداد 250، 500، 750، 1000، …، 4000 را در ورودی تابع قرار دهیم.

این تاخیر بر حسب میکرو ثانیه می‌­باشد.

تعداد تلاش دوباره برای ارسال 0 تا 15 بار می‌باشد و به جای  trial قرار می‌گیرد.

این تابع را خودم به کتابخونه اضافه کردم و دیدم به درد می­‌خورد!

آدرس دهی

هر ماژول یک مک آدرس 5 بایتی مختص به خود را دارد که ما آن­‌ را به دلخواه انتخاب می­‌کنیم و به ماژول اعلام می‌­کنیم.

یک چیز دیگر که باید به ماژول اعلام شود، این است که طرف مقابل چه مک آدرسی دارد. که این­‌ها از طریق دو تابع زیر انجام می‌شود:

این توابع باید در تابع main، بعد از توابع پیکربندی نوشته شوند.

اما چرا نوشتن این دو تابع مهم است؟ لطفا به مثال زیر دقت کنید تا اشتباه من رو مرتکب نشوید و مثل من یک هفته وقتتان گرفته نشود…

مثال

کد در قسمت فرستنده
کد در قسمت گیرنده
می­‌بینید که [rx_mac[5 در قسمت فرستنده با [tx_mac[5 در قسمت گیرنده برابر است و [tx_mac[5 در قسمت فرستنده با [rx_mac[5 در قسمت گیرنده برابر است و مک آدرس­‌ها به صورت ضربدری عوض شده‌­اند.

تنظیم فرستنده یا گیرنده

برای این کار از دو تابع زیر استفاده می‌­شود که نیازی به توضیح ندارند.

()nrf24_powerUpRx: تنظیم به عنوان گیرنده.

()nrf24_powerUpTx: تنظیم به عنوان فرستنده.

بردن ماژول +NRF24L01 به حالت خواب (Sleep Mode)

با استفاده از تابع زیر در زمان­‌هایی که به ماژول نیاز نداریم می­‌تو‌انیم مصرف توان ماژول را به حداقل برسانیم.

ارسال داده (Transmit)

برای ارسال داده از تابع زیر استفاده می­‌شود:

متغیر ورودی تابع در اینجا، برای مثال ما data_array می­‌باشد.

در این تابع، برای فرستادن دیتا ابتدا ماژول به صورت خودکار در حالت فرستنده قرار می­‌گیرد (کد داخل این تابع به این شکل هست) و برای برقراری ارتباط باید ماژول دیگر در حالت گیرنده قرار گرفته باشد و قسمت ( ….  ,  …. , …. )nrf_config باید یکی باشند.

برای مثال متغیر data_array  هم به شکل زیر تعریف می شود ( با فرض اینکه payload_length در تابع nrf_config برابر با 4 باشد):

بعد از هر ارسال نباید دیتای دیگری را ارسال کرد و باید ابتدا از ارسال کامل دیتای قبلی اطمینان حاصل نمود برای این کار از تابع زیر استفاده می­‌شود:

()nrf24_isSending

این تابع ورودی نمی‌­گیرد و تا وقتی که دیتا در حال ارسال است، 1 را برمی‌گرداند و وقتی که ارسال تمام شد، 0 را برمی‌گرداند. و معمولا قبل از هر ارسال کد زیر قرار می‌گیرد:

بعد از هر ارسال پیشنهاد می­‌شود از درست ارسال شدن آخرین دیتا اطمینان حاصل کنیم و روی آخرین ارسال پردازش انجام دهیم که با دو تابع زیر انجام پذیر است:

()nrf24_lastMessageStatus

این تابع ورودی نمی­‌گیرد و اگر 0 را برگرداند یعنی دیتا درست ارسال شده و اگر 1 را برگرداند یعنی ارسال دیتا به مشکل بر­خورده است.

()nrf24_retransmissionCount

این تابع نیز ورودی نمی‌­گیرد و تعداد تلاش دوباره برای فرستادن آخرین دیتا را برمی­‌گرداند.

دریافت داده (Recieve)

چون در این کتابخانه از پین IRQ استفاده نمی­‌شود، بنابراین برای دریافت داده باید پیوسته تابع زیر را بخوانیم تا از رسیدن دیتا مطلع شویم:

()nrf24_dataReady

این تابع ورودی نمی‌­گیرد و هر وقت عدد 1 را برگرداند یعنی در FIFO ماژول حداقل یک دیتا رسیده و باید خوانده شود.

نکته:‌ اگر یک عملکرد بهینه در دریافت مدنظرتان است کمی در مورد پین IRQ مطالعه کنید و به کمک اینتراپت­ خارجی میکروکنترلر می­‌توانید کارهای جالبی انجام بدهید.

برای دریافت دیتا باید تابع روبرو فراخوانی شود:

چون در زبان C قابلیت return یک آرایه قرار داده نشده است ما از این ترفند و ورودی قرار دادن آرایه در تابع استفاده کردیم.

که متغیر data_array باید به شکل زیر تعریف شود (فرض بر این است که payload_length در تابع nrf_config  برابر 4 تنظیم شده است):

که دیتای اول در [data_array[0، دیتای دوم در [data_array[1 و … قرار می­‌گیرند.

با این توضیحات و توابعی که ذکر شد می­‌توانید کاملا ماژول را راه‌­اندازی کنید.

توابعی که در پایین‌ ­تر ذکر می­‌شود توابع دیگری هستند که در کتابخانه موجود است و ممکن است برحسب پروژه خود، به آنها نیاز پیدا کنید.

nrf24_rxFifoEmpty: ورودی نمی­‌گیرد و اگر FIFO دریافت خالی باشد 1 را برمی­‌گرداند.

nrf24_payloadLength: ورودی نمی­‌گیرد و تعداد بایت منتظر در FIFO را برمی­‌گرداند.

nrf24_getStatus: رجیستر Status در NRF را برمی­‌گرداند.

nrf24_configRegister: فقط یک بایت داده را در رجیستر مورد نظر می­‌نویسد.

nrf24_readRegister: رجیستر مورد نظر را از NRF را می­‌خواند.

nrf24_writeRegister: هر تعداد بایت داده به دلخواه در رجیستر مورد نظر می­‌نویسد.

نکات کلی

برای استفاده از این ماژول ابتدا از میکروکنترلر mega 8 استفاده کردم با کلاک 8 مگاهرتز. و سپس قرار شد که میکروکنترلر عوض شود و LPC1768 استفاده شود با کلاک 100 مگاهرتز، پس من به این فکر افتادم که سرعت Software spi رو چک کنم تا از حد پشتیبانی nrf بیشتر نشود.

تست من طبق شرایط زیر است:

میکرو mega8 کلاک 8 مگاهرتز.

کلاک تایمر-کانتر را بر 8 تقسیم کردم تا محاسبات ساده‌تر شود و هر عدد کانتر نماینده یک میکروثانیه باشد. با یک کد ساده محاسبه شد که ارسال یک بایت داده با spi نرم افزاری 150 میکروثانیه طول می‌کشد. با یک محاسبه می‌توان فهمید سرعت ارسال داده 53.333Kbit/s است پس با 10 برابر شدن کلاک GPIO باز هم از مرز 10Mbit/s رد نمی­‌شویم و این خبر خوبیست.

خبر بد این است که برای جاهایی که سرعت ارسال داده (data rate) بالا نیاز است، خوب نیست و به درد نمی‌خورد.

پس بهترین کار این است که تابع spi_transfer در فایل nrf24.c را برای میکروکنترلر خودمان به spi سخت‌افزاری تغییر بدیم تا دیگه این کتابخانه هیچ مشکلی نداشته باشد. (اینو دیگه میذارم به عهده خودتون)

فقط تنظیمات spi باید به شکل زیر باشد:

Sck idle state :High

Sampling edge :idle to active

Bit order :MSB First

یک تست خاص هم برای بُرد ماژول انجام دادم گفتم بذارم شاید به درد کسی بخورد.

شرایط تست: فرستنده از نوع دارای pa+lna مشکی­ رنگ می‌باشد و گیرنده از نوع معمولی +NRF24L01 .

میکروکنترلر: مگا 8

در محیط بسته تا 3 لایه دیوار ارتباط برقرار است .(تا صد متر فاصله)

اگر هر دو از نوع pa+lna باشد تا 10 لایه دیوار نیز ارتباط برقرار است.

خب خسته نباشید امیدوارم ماژول +NRF24L01 را راه انداخته باشید و ازش به خوبی استفاده کنید.

اگر سوالی داشتید حتما کامنت بگذارید سعی می‌­کنم همه سوالات را جواب بدهم.

سورس کامل را هم میتوانید از منبع ( گیت هاب) و هم‌چنین در زیر رایگان دانلود و استفاده نمایید.  

NRF24L01 Library-Example Sisoog (150 دانلود ها)

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

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

 
رسول خواجوی بجستانی

درباره رسول خواجوی بجستانی

الکترونیک هواپیمایی خوندم حدود سه سال با چیپ های حوزه iot از قبیل esp8266 و nrf24l01 کار کردم علاقه زیادی به طراحی چیزای جدید ، ارز های دیجیتال ، گیمینگ و فیلم و سریال دارم.

یک دیدگاه در “25”

  1. Avatar mahdi گفت:

    سلام
    من از این ماژول برای ارتباط بین چند ماژول nodemcu استفاده میکنم ،
    مشکلی که برام پیش اومده اینه که ، داده ای که میخوام ارسال کنم یه استراکچر هست و سایزش حدود 80 بایت هست ولی همونجور که خودتون هم گفته بودین بیشتر از 32 بایت نمیشه ارسال کرد ، توی نت راه حل قابل فهمی براش پیدا نکردم ، هر روشی هم که به ذهنم رسید تست کردم ولی جواب نداد .
    چیکار میتونم بکنم که این مشکل برطرف بشه ؟
    تشکر

    1. زئوس Zeus زئوس Zeus گفت:

      خوب ساده ترین راه اینه که در سه پارت داده هاتون رو منتقل کنید 🙂 دقیقا مثل حالتی که متن sms از 160 کارکتر بزرگتر میشه و گوشی اونو برای ارسال به پارت های 160 تایی میشکنه !
      برای این کار لازمه که یه هدر اول داده ارسالی بذارید که به گیرنده بگه این بسته داده پارت مثلا پارت 1 از پارت 3 داده هست تا گیرنده بتونه داده ها رو به هم بچسبونه !
      اگر میخواید کار دقیق تر باشه توی هدر یه عدد یونیک قرار بدید که گیرنده بتونه بفهمه کدوم بسته ها به هم مربوط هستند (برای وقت هایی که چند فرستنده و یک گیرنده دارید).

  2. Avatar حسین ثنایی گفت:

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

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

  3. Avatar احسان گفت:

    فایل که در لینک زیر هست شامل سه پروژه پورت شده این کتابخونه هست
    یکی برای محیط آردوینو
    یکی هم STM32Duino
    یکی هم برای میکروی STM در محیط KEIL
    همگی با هم ارتباط دارن
    http://uupload.ir/view/icbo_nrf_plus.rar/

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

    1. زئوس Zeus زئوس Zeus گفت:

      متشکر برای به اشتراک گذاری کتابخونه تون

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

  4. Avatar احسان گفت:

    با این کتابخونه امکان شبکه بندی ماژول ها هست ؟ یعنی یک مستر داشته باشیم و چند فرستنده گیرنده

    1. زئوس Zeus زئوس Zeus گفت:

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

  5. Avatar محمد گفت:

    سلام به این ماژول آنتن با چه مشخصاتی باید وصل کرد؟حداکثر آنتنی که میتونه ساپورت کنه.

    1. زئوس Zeus زئوس Zeus گفت:

      با توجه به فرکانس کاری 2.4 این ماژول ها شما میتونید از آنتن های وایفای استفاده کنید و هرچه گین انتن بالاتر باشه نتیجه بهتری خواهید گرفت 🙂

  6. Avatar امیر گفت:

    سلام جناب مهندس.من راجع به nrf24l01 کار کردم برنامه هایی که ما دادید رو تغییر دادم اما نتونسم با زدن کلید تو فرستنده حتی یه ال ای دی را تو گیرنده روشن کنم…میشه شما راهنماییم کنید یا یه برنامه مختصر بنویسید.من حاظرم هزینشم بدم..دوماهه گیرم.

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

      خیلی از دوستان مشکل داشتن ولی علت ۹۹.۹ درصد مشکلات بی دقتی هست و کمبود تجربه توی زبان C
      چند بار این مقاله رو بخونید و ریز به ریز همه چی رو چک کنید
      و همچنین روی زبان C تون کار کنید

  7. Avatar سعید گفت:

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

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      ممنون برای به اشتراک گذاری تجربیاتتون
      منم واقعا با کیفیت ماژول های موجود توی بازار مشکل داشتم و البته دارم هنوز 😐

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

    2. سلام
      خواهش میکنم
      خوشحالم که نتیجه گرفتید
      پس مشکل از ماژول بوده …
      اگه میشه نوع ماژول و مرجعی که ازش ماژول های خوب رو خریدید به اشتراک بذارید تا بقیه دوستان هم بتونن استفاده کنن

    3. سلام
      خواهش میکنم
      خوشحالم که نتیجه گرفتید
      پس مشکل از ماژول بوده …
      اگه میشه نوع ماژول و مرجعی که ازش ماژول های خوب رو خریدید به اشتراک بذارید تا بقیه دوستان هم بتونن استفاده کنن

  8. Avatar امیر گفت:

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

    1. سلام دوست عزیز
      خواهش میکنم
      شما باید کد مثال ها رو بردارید و به کمک اونها مثلاً شش تا led میخواید روشن کنید اعداد ۱ تا ۶ رو بفرستید و اونطرف تو گیرنده چک کنید که آیا کدوم عدد اومده و led متناسب رو روشن کنید

  9. Avatar منصوری گفت:

    سلام. من دو سه سال پیش با این ماژول کار کردم. مشکل بزرگی داره که کلا بیخیالش شدم. ظاهراً در هوای سرد ماژول از کار میوفته. علتش و نفهمیدم

    1. سلام . چه جالب من تجربه کار تو هوای سرد رو نداشتم … حالا اگه شد تست میکنم و همین پست رو آپدیت میکنم ، اگه تونستید بهم بگید که تا چند درجه دما به پایین کار نمیکرد .

  10. Avatar سعید گفت:

    سلام و عرض ادب! در رابطه با این ماژول احتیاج به مشورت یک دوست و همکار خبره در این زمینه دارم. ممنون میشم راهنمایی بفرمایید.
    من این ماژول را راه اندازی کردم و ارسال دریافت به خوبی انجام میشه.
    تنها مشکلی که دارم با برد این ماژول هست. در فضایی مثل سالن (حدود 50 متر) نیاز به کارکرد دارم به قابلیت اطمینان خوب.
    ابتدا نوع معمولی را تهیه کردم که در فضای یک اتاق در حدود 6-7 متر خوب جواب میداد. بعد یک مدل آنتن دار چینی استفاده کردم که برد حدود 15 متر بیشتر شد. اما همیشه این برد را ندارم و برد کاهش پیدا کرد. بعد از اون برای فرستنده مدل PA اصلی را استفاده کردم که با کمال تعجب برد این ماژول از مدل بدون آنتن هم برای من کمتره.
    الان با وجود یک ماژول معمولی در فرستنده و گیرنده های آنتن دار چینی بردی حدود 10 متر را دارم.
    به کلی گیج شدم که آیا سیستم من اشکالی دارد یا قطعات…
    پیشاپیش از توجه و همفکری شما سپاسگزارم.

    1. سلام ممنون . یکی از دلایل کم بودن برد میتونه در اثر کد شما باشه . علتش هم این هست که در ماژول یک پارامتر قابل تنظیم برای توان ارسالی وجود داره اگه براتون مقدوره با این کتابخونه کد رو بزنین و نتیجه رو اعلام کنید( در کتابخونه توان ارسالی رو ماکزیمم مقدار تنظیم شده ) چون همونجور که نوشتم من با مدل چینی که مشکی هم هست برد بسیار بالاتری گرفتم .

      یک سوال دیگه که دارم اینه که آیا در اون سالنی که هستید دیوار بین دو ماژول قرار میگیره یا نه و یا اینکه پوشش فلزی بین دو ماژول میوفته ؟ چون هر گونه پوشش فلزی میتونه تقریبا ارتباط رو قطع کنه

    2. Avatar منصوری گفت:

      سرعت انتقال رو کاهش بدین

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *