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

آموزش قدم به قدم راه اندازی +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 :low Sampling rising edge :idle to active Bit order :MSB First شرایط بالا Mode=0، پروتکل spi را توصیف می‌کند. یک تست خاص هم برای بُرد ماژول انجام دادم گفتم بذارم شاید به درد کسی بخورد. شرایط تست: فرستنده از نوع دارای pa+lna مشکی­ رنگ می‌باشد و گیرنده از نوع معمولی +NRF24L01 . میکروکنترلر: مگا 8 در محیط بسته تا 3 لایه دیوار ارتباط برقرار است .(تا صد متر فاصله) اگر هر دو از نوع pa+lna باشد تا 10 لایه دیوار نیز ارتباط برقرار است. خب خسته نباشید امیدوارم ماژول +NRF24L01 را راه انداخته باشید و ازش به خوبی استفاده کنید. اگر سوالی داشتید حتما کامنت بگذارید سعی می‌­کنم همه سوالات را جواب بدهم. سورس کامل را هم میتوانید از منبع ( گیت هاب) و هم‌چنین در زیر رایگان دانلود و استفاده نمایید.     NRF24L01 Library-Example Sisoog
رسول خواجوی بجستانی

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

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

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

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

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

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

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

  1. وحید گفت:

    سلام وقت به خیر من میخواستم از این کتابخانه استفاده کنم برای راه اندازی stm32 برای ورودی و خروجی کردن از cube استفاده کردم پس تابع setup رو خالی کردم و برای نوشتن ۱ و۰ روی پایه ها از HAL_GPIO_Write استفاده کردم و بقیه کد را بدون تغییر استفاده کردم کد کامپایل میشود اما ارتباط برقرار نمی شود این هم کد radiofunction :
    void nrf24_setupPins()
    {

    }
    /* ————————————————————————- */
    void nrf24_ce_digitalWrite(unsigned char state)
    {
    if(state)
    {
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,1);
    }
    else
    {
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,0);
    }
    }
    /* ————————————————————————- */
    void nrf24_csn_digitalWrite(unsigned char state)
    {
    if(state)
    {
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,1);
    }
    else
    {
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,0);
    }
    }
    /* ————————————————————————- */
    void nrf24_sck_digitalWrite(unsigned char state)
    {
    if(state)
    {
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,1);
    }
    else
    {
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,0);
    }
    }
    /* ————————————————————————- */
    void nrf24_mosi_digitalWrite(unsigned char state)
    {
    if(state)
    {
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,1);
    }
    else
    {
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,0);
    }
    }
    /* ————————————————————————- */
    unsigned char nrf24_miso_digitalRead()
    {
    return HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6);
    }

    1. وحید گفت:

      به نظر شما مشکل از کجاست که ارتباط برقرار نمیشود

  2. علی اکبر گفت:

    سلام
    خیلی ممنونم
    یه سوالی که برام پیش اومده اینه که برای تغییر کانفیگ در وسط برنامه
    اونم ممکنه چندین بار در دقیقه بخوایم تغییر کانفیگ بدیم
    کتابخونه هایی که دارم کار نمیکنن
    این کتابخانه کار میکنه برای این تغییر؟
    به چه روشی باید تغییر کانفیگ رو انجام بدم؟

  3. محمد گفت:

    درود و خسته نباشید.

    خب از اونجا که avr وقفه خارجی داره پس میتونم اون تابعی که منتظر دریافت هست رو بذارم تو تابع وقفه خارجی که هر وقت داده ای دریافت شد مثلا میکرو رو از خواب بیدار ✔✌ کنه و عملیات مورد نظر ر انجام بده و نیازی به تغییر در این کتابخونه نیست🤨؟! نه😁؟ درست فک میکنم؟🤔، یعنی همینطوره دیگه

    چون من چند تا کتابخانه دیگه تو اینترنت می گشتم کسی به کتابخونه ای که از پایه irq استفاده کرده باشه نشده بود!

    مخصوصا گیت هاب!

  4. بهنام گفت:

    سلام مهندس وقت بخیر
    با lpc1788 روی spi2 تنظیمات رو انجام دادم (از spi سخت افزاری) استفاده کردم و نرم افزاری رو حذف کردم.
    مشکل اینجاس در مد گیرنده status فقط مقدار 0xff رو برمیگردونه!
    ایا این مقدار بازگشتی درسته؟

  5. علیرضا گفت:

    سلام خسته نباشید.
    من با atmel studio شروع کردم به کار.
    میخام با c++ این ماژول رو راه اندازی کنم.
    با این کتابخونه میتونم؟
    نیازه تغییری داخل کتابخونه بدم چون توی اتمل میخام باش کار کنم؟؟؟

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

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

      1. علیرضا گفت:

        باشه خیلی ممنونم امتحان میکنم و اگر مشکلی داشت ازتون میپرسم.
        اگر هم که درست شد و نیاز به تغییرات داشت فایل رو براتون ارسال میکنم که درصورت امکان توی سایت قرار بدید بقیه هم استفاده کنن
        بازم ممنون⁦❤️⁩

  6. کسرا گفت:

    سلام من از این ماژول میخوام یه led رو روشن کنم از یه طرف data رو گذاشتم 10
    از گیرنده هم اگر 10 اومد یه پین 1 بشه اما نشد
    آیا تنظیمات خاصی داره

    1. کسرا گفت:

      کد گیرنده if(nrf24_dataReady())
      {
      nrf24_getData(data);
      if(data[0]==10) PORTC.4=1;
      }
      فرستنده
      data[0]=10;
      do
      {
      nrf24_send(data);
      while(nrf24_isSending());
      }
      while(nrf24_lastMessageStatus()) ;

      مگا 8 دارم استفاده میکنم دست به هیچ چیز دیگه ای نزدم

  7. امین گفت:

    سلام و خدا قوت
    مطالب عالی هستند و تشکر میکنم
    من برای تست دو تا مدار ساده پیاده سازی کردم. یکی برای فرستنده و یکی گیرنده. مساله ای که هست اینه که مدار کار میکنه و مشکلی نداره، اما اون بردی رو که توقع داشتم رو نداره. اول از ماژول دوچیپ معمولی استفاده کردم. برد حدود 50 تا 60 متر بود. بعد دوتا ماژول آنتن دار تهیه کردم و جایگزین کردم. اما در کمال ناباورب برد از نصف هم کمتر شد!
    میخواستم بدونم به نظر شما ماژول ها مرغوب نیستند؟ یا اینکه برای راه اندازی از نظر سخت افزاری باید موارد خاصی رو رعایت کنم؟
    در ضمن تغذیه مدارات از طریق برد تامین میشه که به USB سیستم وصله

    1. سلام ماژولتون مرغوب نیست وگرنه تو فضای آزاد باید تا پونصد متر رو بگیرید
      راه اندازی ماژول ها هیچ فرقی ندارن با هم دیگه

  8. حامد گفت:

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

    1. سلام
      خواهش میکنم، هدف ما هم همین بوده. موفق باشید

  9. احمد گفت:

    این ماژول رو هر کاری کردم با stm32 راه اندازی بشود نشد که نشد یعنی آقا رسول گیرکردم الان یه ماهه به هر دری میزنم نمیشه که …….

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

      سلام فکر نمی کنم اینقدر چیز پیچیده ای باشه !!!!
      همین کتابخانه رو تبدیل کردید ؟
      چطور تست میکنید می بینید میشه یا نمیشه ؟

      1. احمد گفت:

        طبق کل نوشته های سایت جلو رفتم نه چیزی کم کردم نه زیاد

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

          آیا امکان داره ماژولهاتون رو با سورس های سایت انجام بدید که برای avr هست ؟

          1. احمد گفت:

            انجام دادم نشد بی خیال شدم البته بیشتر سطح اولویت عوض شد من قبلا با avr و کتابخانه مرتضوی راه انداخته بودم اما دوست داشتم با stm32 راه بندازم که نشد بیشتر به خاطر اینکه الان stlink_v2 از اون مدل که شبیه usb هست وقتی وصل میکنم می نویسه traget not connect تا پول دستم بیاد نو بخرم بعد ها تست کنم

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

            اها از اون جهت – ببینید راه اندازی با stm32 واقعا هیچ چیز اظافه ای نداره که بخوام بهش اشاره کنم واقعا همین قدر ساده است که توی پست بهش اشاره شده.
            اون تست رو برای این گفتم انجام بدید چون میخواستم تست کنم که ماژلتون مشکلی نداشته باشه
            شما از کدوم پایه های میکروی stm32 برای اتصال به ماژول استفاده می کردید ؟

          3. احمد گفت:

            سلام مد power down خوبه اما عالی نیست چرا ؟؟
            برای اینکه 1.1 میلی آمپر هنوز مصرف داره و اگه با باتری کار کنم زود تموم میشه این یعنی هزینه
            سوال:چطور باید به مد standby رفت تا مصرف به کمینه (حداقل) برسه
            جواب :من بلد نیستم کمک کنید لطفا

  10. محمدرضا گفت:

    سلام ، ممنون از مطلب عالی که گذاشتید.
    من برای تست دقیقا مداری که به عنوان مثال گذاشته بودید رو بستم ولی فقط روی ال سی دی دیتا برابر صفر نشون میده.
    نمیدونم مشکل از چیه!
    تا برق ۳.۳ ماژول رو قطع نکنم هیچی روی صفحه نمایش بالا نمیاد، گیج شدم کلا
    ولتاژ ها گرفتم درست بودند ، اتصالات رو چک کردم درست بودن ، ماژول رو هم عوض کردم ، منبع تغذیه هم عوض کردم دیگه چیزی به ذهنم نمیرسه.
    ممنون میشم راهنمایی کنید

    1. محمدرضا گفت:

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

      1. Sisoog Os Sisoog Os گفت:

        به نظر جنس بدون کیفیت این روز ها بلای جان همه شده

  11. علی گفت:

    با سلام
    فایل ها قابل دانلود نیست.

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

      مشکل دانلود فایل حل شد.

  12. میرزایی گفت:

    سلام جناب مهندس وقت بخیر
    میخواستم بدون ایا بصورت نرم افزاری میتوان مد فرسنده و گیرنده را تغییر داد که به صورت شبکه دیتا هم ارسال و هم دریافت شود؟
    سپاس اگر ممکنه یک پیام بدهید خیلی واجب است سپاس 09154256458

    1. سلام
      بله امکن پذیر هست
      توی متن توضیح داده شده
      دوباره براتون کپی کردم :

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

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

      1. میرزایی گفت:

        ممنون راه اندازی شد با STM32F103
        09154256458
        https://www.aparat.com/v/geZ9P

        1. وحید گفت:

          من برای راه اندازی STM32F103 به مشکل خوردم اگر ممکنه بگید چه تغییراتی در کتابخانه ایجاد کردید من به جای ۱ و۰ کردن از HAL_GPIO_Write استفاده کردم و تابع setup را هم خالی کردم چون خروجی و ورودی کردن پین ها را با cube انجام داده ام اما هنوز ارتباط برقرار نمیشود

  13. فاروقی گفت:

    سلام خسته نباشین خدمت همه کسانی که این آموزش خوب رو فراهم کردم
    من این ماژول رو طبق این آموزش تست کردم و خوشبختانه توی همون تست اول جواب رو گرفتم در اون تست یکی از ماژول هام به atmega32A وصل بود یکی به atmega16A و یکی هم به atmega16L که فرکانس کاری نرم افزاری 32A روی 8مگاهرتز بود اما موقع پروگرام کردن فیوز بیت هارو روی 1مگاهرتز میزاشتم برای atmega16ها هم به دو صورت فرکانس 8مگاهرتز در نرم افزار و فیوزبیت 1مگاهرتز و هم بصورت 1مگاهرتز در نرم افزار و فیوزبیت 1مگاهرتز هم جواب میداد اما حالا مجبور شدم atmega32A رو هم بصورت نرم افزاری هم از طریق فیوزبیت ها روی 8 مگاهرتز بزارم و atmega16 هارو هم نرم افزاری هم فیوز بیت ها روی 1 مگاهرتز تنظیم کنم با انجام این کار دیگه انتقال بین ماژول ها صورت نمیکیره آیا تغییر فرکانس ها باعث بوجود اومدن این مشکل شده ؟
    لازم به توضیح هس که روی atmega32A برای کانتر0 از مقسم 8 هم استفاده کردم و اینکه ماژولی که به atmega32 وص هس فقط وظیفه دریافت داره و بقیه هم فقط ارسال میکنن این موارد رو هم گفتم شاید نکته ای داشته باشن
    ممنون میشم اگه راهنماییم کنین

    1. سلام خواهش میکنم .
      دفعه اول شانسی جواب گرفتید چون همه ماژول ها یه جور تنظیم شده بودن . برای اینکه درست کار کنه ماژول ها همه رو هم نرم افزاری هم با فیوزبیت روی یه فرکانس تنظیم کنید. حالا اگه میخواید ۸ مگ بذارید همه رو یا یک مگ مهم نیست زیاد .
      چون به صورت نرم افزاری این کتابخانه، spi رو میسازه باید فرکانس نرم افزار و فیوز بیت یکی باشه تا کار کنه

      1. فاروقی گفت:

        ممنون از اینکه پاسخ دادین
        شانسی نبود مهندس دفه اول همونطور که شما گفتین فرکانس های کاری هرسه میکرو روی یک تنظیم بودن منظورم از اولین این بود که توی اولین پروگرامی که کردم جواب گرفتم البته به لطف آموزش بسیار عالی شما(اون موقع زیاد در مورد فیوز بیت ها اطلاع نداشتم واسه همین هرسه میکرو رو ناخواسته با فرکانس 1 پروگرام میکردم :-D) واسه همین خیلی عالی جواب میداد اما الان بخاطر فرکانس کاری یکی از سنسور هام (ds18b20) مجبورم یکی از میکروهامو روی فرکانس 1 تنظیم کنم.
        الان سوالی که برام پیش اومد این هست که میتونم این کتابخونه رو بصورتی تغییر بدم که این مشکل رو رد کنم به عنوان مثال اگه بتونم این رو با کتابخونه SPI خوده کدویژن تنظیم کنم هم بشه از اینتراپت SPI استفاده کرد هم اینکه دیگه فرکانس کاری میکرو مهم نباشه روی چی تنظیم شده باشه یا نه یه فکری برای سنسورم بکنم یا یک کتابخونه دیگه استفاده کنم بهتر هس؟
        قطعا شما با این کتابخونه کار کردین و تجربتون تو این زمینه از من بیشتر هس که بگین آیا این کار شدنی هس یا نه

  14. سجاد گفت:

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

    1. سلام
      با استفاده از کدنویسی مناسب میتونید به اینطور هدفی برسید ولی برای ارسال شما از طریق یک کانال بین دو ماژول میتونید ارسال داشته باشید . باید ببینید تاخیر این دستورات در حد چند میکرو ثانیه تأثیری تو عملکرد مواد کوپتر شما می‌ذاره یا نه !
      روش دیگه ای که میتونید استفاده کنید اینه که ورودی ها رو بگیرید و اگه چند کلید باهم فشرده شده بود خبر فشرده شدن کلید هارو در یک ارسال به اطلاع کواد کوپتر برسونید اینجوری حداقل در سمت کواد تاخیری وجود نخواهد داشت .

  15. میلاد بشیرنیا گفت:

    دیدگاه شما در انتظار بررسی می‌باشد

    سلام و خسته نباشید.
    ببخشید بجای این ماژول NRF24L01میشه از ماژول هایESP8266استفاده کرد برای وصل کردن به میکرو و ارتباط بین دو ماژول؟
    اگه میشه چجوری؟
    ممنون میشم اگه راهنماییم بکنین؟

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

      بله شدنش میشه
      در مورد بردش اطلاعی ندارم ولی کلیت به این صورت خواهد بود که یکی رو توی مد هات اسپات میذارید و یکی رو تو مد دیوایس وصل میشه به هات اسپات و دیتا رد و بدل میکنید 🙂
      امکان شبکه کردن بی نهایت هم وجود داره 🙂

      1. میلاد بشیرنیا گفت:

        با یک ماژول درسه میشه به همه ی هات اسپات های موجود چه تو لب تاب چه تو گوشی وصل شد ولی بین دو تا ماژول ارتباط برقرار نمیشه هر چقدر یکیشو کلاینت میکنم یکیشو سرور یا همون اکسس پویونت هی ارور میده و وصل نمیشه

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

          امم – تست کردم وصل میشن 😐
          البته من از طریق at کامند با این ماژول ها کار نکردم ها
          من برای خود ماژول برنامه نوشتیم و به این صورت کار کرد

          1. میلاد بشیرنیا گفت:

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

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

            سلام من از آردوینو برای برنامه نویسی این ماژول استفاده میکنم – البته میتونید از SDK هم استفاده کنید ولی مقداری پیچیده تر خواهد بود
            آموزش برنامه نویسی رو هم توی سایت آموزش دادیم
            در سه سوت به وای فای متصل شویم – ESP8266
            آموزش اتصال ربات تلگرام به آردوینو ESP8266 – ربات تلگرام در خانه
            و …

          3. میلاد بشیرنیا گفت:

            مهندس با یک ماژول بلدم وصل شدنشو فقط ومیتونم یه ماژولesp8266رو به یک ماژولesp8266 دیگه وصل کنم اینش مشکله برام😔😢

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

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

  16. علی گفت:

    سلام
    من این ماژول رو طبق توضیحات شما با میکرو atmega16 smd راه اندازی کردم
    اتفاق عجیبی که میفته اینه که پایه هایی که من به عنوان SPI مجازی برای این ماژول انتخاب کردم، صحیح عمل نمیکنه و این در صورتی هست که با برخی از پایه های دیگه این ماژول بدون مشکل کار میکنه. فکر میکنید باید پایه های خاصی رو در نظر گرفت برای اینکه این برد با پروتکل SPI مجازی صحیح کار کنه؟اگر بله، چه پایه هایی و چرا؟
    پایه هایی که من انتخاب کردم و منتج به راه اندازی صحیح نشد، به این شکل هست:
    CE -> PORTA.2
    CSN-> PORTC.3
    SCK-> PORTA.1
    MOSI-PINA.0

    پایه های دیگه ای که امتحان کردم و صحیح جواب داد :
    CE -> PORTB.0
    CSN-> PORTB.1
    SCK-> PORTB.4
    MOSI-PINB.3

    1. علی گفت:

      مشکلم حل شد جناب مهندس
      مشکل از فعال بودن بیت JTAG به صورت پیشفرض بود و باعث میشد پورت C نتونه به عنوان خروجی عمل کنه و با غیرفعال کردنش مشکلم به کلی مرتفع شد
      ممنون

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

        چه عالی 🙂
        خوشحالم خودتون تونستید مشکل رو پیدا کنید
        متشکر که اطلاع دادید

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

      آیا رابط jtag رو از توی فیوز بیت ها غیر فعال کردید ؟
      همونطور که میدونید این رابط به شکل پیش فرض فعاله و روی پورت c هست
      اطلاعات بیشتر در مورد jtag
      تاریخچه و قابلیت‌های خاص پروتکل JTAG

  17. علی گفت:

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

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

  18. علی گفت:

    سلام
    خسته نباشید🌹
    جناب مهندس من تمام مطالب رو با دقت مطالعه کردم و دو بار دیگه هم مجددا با دقت مرور کردم

    فرمانس داخلی atmega8. رو روی ۸ مگ‌ تنظیم کردم و خطوط برنامه ارسال و دریافت رو هم تا حد امکان کم کردم و برنامه فقط به این صورت هست که فرستنده هر ۰.۵ ثانیه یه بار یک دیتا ارسال میکنه و فرستنده هر بار که دیتایی رو دریافت میکنه قراره یک پورت خاص رو روشن و خاموش کنه به همین سادگی!

    ولی نمیدونم اشکال کار از فرستنده هست با گیرنده یا هردو…

    ممکنه راهنماییم کنین؟ ممنون

    1. سلام ممنون
      به نظر بنده همون کد مثال که تو فایل زیپ هست رو کامپایل کنید(کدویژن) و تستش کنید چون اون کاملا تست شده است و کار میکنه
      دوتا ماژول nrf میخواد و یک lcd کاراکتری که احتمالا دارید
      و اگه اون هم جواب نداد ماژول هارو عوض کنید و از یه تامین کننده معتبر خریداری کنید چون زیاد من برخوردم که مشکل از ماژول ها بوده ،اگه باز هم کار نکرد محض احتیاط میکرو هارو هم نو بخرید و کد مثال رو آپلود کنید ( احتمالا انجام دادید ولی اتصالات رو هم با تست بوق تست کنید و مطمئن بشید)
      همچنین از تغذیه ماژول ها هم اطمینان حاصل کنید و رگولاتور سویچینگ جریان بالا مثلا 3A استفاده کنید .( البته من بدون رعایت این هم جواب گرفتم ولی خب ممکنه تولید های جدید حساس باشن )
      موفق باشید

  19. ghadiry گفت:

    سلام ممنون از مطلب خوبتون فقط برای تبدیل کد به spi سخت افزاری تنیظیم باید modeصفر باشد یعنی idle صفرونمونه برداری در اولین لبه (لبه ی بالارونده) لطفا اصلاح کنید.

    1. سلام دوست عزیز. ممنون از دقت‌تان و اینکه به ما این موضوع را یادآوری کردید. تصحیح کردیم.

  20. محمدرضا گفت:

    با سلام.
    من یک PCB دارم که میکروکنترلر MEGA8 و nRF24L01 داره. تو این PCB میکرو با SPI سخت افزاری (پایه های MISO، MOSI، SCK و…) به nRF متصل شده. نکته ای که وجود داره تو متن نوشتید که کتابخونه از SPI نرم افزاری استفاده می کنه. برای تبدیل به حالت سخت افزاری چه کارهایی نیازه که انجام بشه؟
    متشکرم.

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

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

      1. محمدرضا گفت:

        سلام مجدد، ممنونم از پاسخ سریعتون.
        بله درسته. در واقع توی فایل nrf24.c یک تابع به نام spi_transfer وجود داره که SPI رو به صورت نرم افزاری پیاده سازی کرده و همچنین یک قطعه کد کامنت شده در همین تابع وجود داره که به پیاده سازی SPI سخت افزاری میکروکنترلر های AVR مربوط میشه. ظاهرا باید همین تابع رو تغییر داد به علاوه تنظیم رجیستر های مربوطه مطابق اون تنظیماتی که در متن نوشته شده.

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

          سلام خواهش میکنم 🙂
          بله درسته، ممکنه تابع ارسال و دریافت یکی باشه ِ تو بعضی کد ها دو تا تابع مجزا هست با جایگزین کردن این تابع احتمالا مشکل حل میشه

  21. mahdi گفت:

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

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

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

  22. حسین ثنایی گفت:

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

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

      1. حسین ثنایی گفت:

        ببخشید من باز مزاحم میشم ولی یک ماهه پروژم سر همین ماژول NRF متوقف شده ! تلگرامی از شما ندارم لطفا به تلگرام این شماره پیام بدید » ****0915496 . ممنون میشم راهنماییم کنید

  23. احسان گفت:

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

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

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

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

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

    3. سلام به همه دوستان. ممنون از زحماتی که میکشید و اشتراک میزارید
      میشه در مورد این کتابخونه که برایstm۳۲ پورت شده کمی توضیح بدید ؟
      من دو تا برد اماده کردم کدها را ریختم و تو بالای کد ادرس ها را هم در فرستنده و گیرنده ضربدری عوض کردم. تو فرستنده که تابع send_data بود در گیرنده این را حدف کردم و تابع get_data را قرار دادم. اما نتونستم اون ارایه را در قسمت گیرنده دریافت کنم
      مشکل کجاس ؟ ممنون میشم راهنماییم کنید

  24. احسان گفت:

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

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

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

  25. محمد گفت:

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

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

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

  26. امیر گفت:

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

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

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

  27. سعید گفت:

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

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

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

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

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

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

  28. امیر گفت:

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

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

  29. منصوری گفت:

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

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

  30. سعید گفت:

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

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

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

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

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