NRF24L01P Module

ارزان، کم مصرف، متن باز؛ بدون سیم متصل شوید

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

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

و اما بعد، برای کار با ماژول NRF24L01P لازم است تا چندین گام را طی نمایید که در ادامه این گام‌ها را توضیح خواهم داد.

 

گام اول؛ پیش‌نیازها

برای درک مطالب این نوشتار لازم است که با مدارات الکترونیکی، برنامه‌نویسی میکروکنترلرها و البته ارتباطات بیسیم آشنایی داشته باشید.

 

گام دوم؛ NRF24L01P دقیقا چیست؟

ماژول NRF24L01P یک برد فرستنده/گیرنده است که بر پایه‌ی یک آی‌سی با همین نام از شرکت NORDIC Semiconductor طراحی شده است. تا جایی که من اطلاع دارم این ماژول در چین تولید می‌شود و به همین دلیل است که قیمت ماژول (که علاوه بر آی‌سی، مدارات جانبی نیز بر روی آن مونتاژ شده است) از قیمت خرید آی‌سی به تنهایی کمتر است. ماژول حدود 4000 تومان و آی‌سی حدود 3 دلار در فروش تکی است!

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

http://www.electrodragon.com/w/NRF24L01

https://www.itead.cc/wiki/NRF24L01_with_PA_and_LNA_Module

http://www.elecfreaks.com/wiki/index.php?title=2.4G_Wireless_nRF24L01p_with_PA_and_LNA

برای تهیه‌ی این ماژول نیز می‌توانید از فروشگاه‌های آفتاب‌رایانه یا ECA یا صنعت‌بازار اقدام فرمایید.

 

گام سوم؛ راه‌اندازی سخت‌افزار

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

مدار راه‌انداز و تست
مدار راه‌اندازی و تست

 در مدار فوق، از یک میکروکنترلر Atmega88PA استفاده شده است.به دلیل استفاده از پروگرامر شرکت Hattel (کانکتور P2 برای اتصال پروگرامر است) و اشتراک پورت SPI برای پروگرام  و ارتباط با NRF24L01P، از چند مقاومت صد اهم در پین‌های مربوطه استفاده شده است. در این مدار از کریستال خارجی 8 مگاهرتز استفاده کرده‌ام که البته فکر میکنم بدون هیچ مشکلی بتوان از کریستال داخلی نیز استفاده کرد.

سیگنال IRQ که به صورت وقفه در میکرو باید مورد استفاده قرار گیرد، به PORTB0 متصل است و باعث تحریک وقفه PCINT0 می‌شود. باقی سیگنال‌های NRF24L01P نیز به پورت B میکرو متصل شده‌اند. دو ال ای دی نیز برای تست به پین‌های D2 و D4 متصل شده‌اند.

برای تغذیه حتما از ولتاژ 3.3 ولت استفاده نمایید. ولتاژهای بالاتر به NRF24L01P صدمه می‌زند.

 

گام چهارم؛ برنامه‌نویسی

ابتدا فایل‌های مورد نیاز را دریافت نمایید:

https://github.com/mehdikhani/NRF24L01P_Driver

توجه داشته باشید که سورس‌کدهای موجود در پلتفرم CodeVision و برای میکروکنترلرهای AVR توسعه یافته است. البته با کمی تغییرات می‌توان آن را در پلتفرم‌های دیگر نیز استفاده نمود. همین سورس کد را برای میکروکنترلرهای ARM تولیدی شرکت ST در محیط Keil برای یک پروژه‌ی صنعتی مورد استفاده قرار داده‌ام. البته بدیهی است که همراه با تغییراتی بوده است.

کتابخانه‌ی متن بازی که منتشر کرده‌ام، قادر است تا ماژول NRF24L01P را در هر دو حالت کاری فرستنده یا گیرنده تنظیم نماید. به صورت پیش فرض ماژول‌ها از کانال ارتباطی صفر (Data Pipe Zero) برای ارتباط ساده‌ی بیسیم با یکدیگر استفاده می‌نمایند. قابلیت Auto Ack به صورت پیش فرض غیر فعال شده است و بسته‌ها دارای طول متغیر دلخواه تا حداکثر 32 بایت می‌باشند. ترخ انتقال داده نیز 1 مگابیت بر ثانیه است که البته می‌توانید آن را تغییر دهید.

برای راه‌اندازی سخت‌افزاری کافی است تا یک پروژه‌ی کدویژن ایجاد نمایید و دو فایل ".h" و ".c" را به آن اضافه نمایید. چنانچه میکروی شما با میکرویی که بنده از آن استفاده کرده‌ام متفاوت است از تنظیمات زیر برای پیکربندی آن استفاده نمایید:

پورت SPI را با سرعت دلخواه‌تان (به گونه که از حد مجاز NRF24L01P تجاوز نکند) مشابه تنظیمات شکل زیر پیکربندی نمایید.

تنظیمات پورت اس پی آی
تنظیمات واسط ارتباطی میکرو با ماژول

چنانچه از پین دیگری برای اتصال IRQ استفاده می‌نمایید، وقفه‌ی مرتبط با آن را فعال نمایید در فایل پیاده‌سازی nRF24L01p.c عنوان روتین مربوط به وقفه را تغییر دهید.

تابع وقفه
تابع وقفه

پین‌های مربوط به CE، CSN، SCK و MOSI را در حالت خروجی و MISO را در حالت ورودی قرار دهید.

حالا همه چیز آماده است تا برنامه‌ی اصلی خودتان را بنویسید. در تابع main قطعه کدهای زیر را استفاده نمایید تا اولین ارتباط بیسیم خود با NRF24L01P را تجربه نمایید.

برای برد فرستنده:

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

تنظیم ماژول به صورت فرستنده
تنظیم ماژول به صورت فرستنده

داده‌ی مورد نظرتان را در قالب یک آرایه با حداکثر سایز 32 بایت ارسال نمایید.

تابع ارسال داده در حالت فرستنده
تابع ارسال داده در حالت فرستنده

برای برد گیرنده:

ابتدا ماژول را به صورت گیرنده تنظیم نمایید.

 

تنظیم ماژول به صورت گیرنده
تنظیم ماژول به صورت گیرنده

سپس بررسی نمایید که آیا داده‌ی دریافت شده است یا خیر.

بررسی تعداد بایتهای دریافت شده
بررسی تعداد بایتهای دریافت شده

در صورت وجود داده در بافر، آن را بخوانید تا سیستم آماده‌ی دریافت بسته‌های بعدی باشد. در صورت عدم خواندن داده، داده‌ی جدیدی دریافت نمی‌شود.

خواندن داده‌ی دریافت شده
خواندن داده‌ی دریافت شده

 

 

© از شما برای بازنشر مطالب به همراه لینک سایت ممنونیم!