در پستهای قبلی روش اتصال ماژول nrf24l01 را به آردوینو و همچنین برنامه نویسی آن را که به صورت کنترل یک سروو موتور به وسیله جوی استیک بود را آموزش دادیم که میتوانید برای دیدن آن به پست زیر مراجعه کنید.آموزش ماژول NRF24L01 در آردوینو اگر توجه کرده باشید در آموزش قبلی دو برد آردوینو به وسیلهی NRF با همدیگر ارتباط یک طرفه برقرار میکردند به صورتی که یکی از آردوینوها فقط به صورت فرستنده و آردوینو دیگر فقط به صورت گیرنده عمل میکرد.در این پست ارتباط دوطرفه به وسیلهی nrf24l01 را آموزش میدهیم به صورتی که آردوینو هم بتواند اطلاعات دریافت کند و هم اطلاعات ارسال کند. در ادامه آموزش با مرجع تخصصی آردوینو همراه باشید.
ماژول NRF24L01
ماژول NRF24L01 یک ماژول بیسیم (Wireless Module) با فرکانس ۲٫۴ گیگاهرتز است که توسط شرکت Nordic Semiconductor طراحی و تولید شده است. این ماژول یکی از محبوبترین و پرکاربردترین ماژولها برای انتقال داده بیسیم در پروژهها و ابزارهای الکترونیکی مختلف است. این فرکانس استاندارد، بسیار پرکاربرد و مجاز در بسیاری از کشورها است، که به کمک آن امکان انتقال دادهها در فاصلههای دور فراهم میشود. با پهنای باند بالا (۲ مگاهرتز) میتواند حجم زیادی از دادهها را به طور همزمان منتقل کند.پروتکل ارتباطی SPI (Serial Peripheral Interface) از پروتکل ارتباطی SPI برای ارتباط با میکروکنترلرها و بردهای الکترونیکی استفاده میکند، که به راحتی میتوان آن را به میکروکنترلرها متصل کرد. ماژول NRF24L01 قابلیت ارتباط دوطرفه (Full-Duplex) را دارد و میتوان با استفاده از آن ارتباط دادهها را به صورت دوسویه بین دو دستگاه برقرار کرد.با توجه به پهنای باند بالا، این ماژول قابلیت انتقال دادههای تصویری و صوتی را نیز دارد.ماژول NRF24L01 با مصرف انرژی کم، برای کاربردهایی که نیاز به مصرف انرژی پایین دارند، بسیار مناسب است.
اتصالات ماژول NRF24L01
اتصالات در هر دو آردوینو به صورت زیر میباشد. پین های CE و CSN میتوانند به هر پین دیجیتالی منصل شوند( ما پین ce را به پین ۹ و پین csn را به پین شماره ۱۰ آردوینو متصل میکنیم)
در برد آردوینو uno پین های پرروتوکل spi به صورت زیر می باشند:
- MOSI is connected to the digital pin 11
- MISO is connected to the digital pin 12
- SCK is connected to the digital pin 13
همچنین یک تاچ سوییچ را به پین شماره ۳ متصل میکنیم و آن را به صورت PULL Down در میآوریم . یک عدد LED نیز به پین شماره ۲ متصل میکنیم.
کدنویسی ارتباط رادیویی با NRF24L01
در صورتی که کتابخانه مختص این ماژول در آرشیو کتابخانه آردوینو شما وجود ندارد ، آن را از لینک زیر دانلود نمایید سپس طبق آموزش زیر آن را به آردوینو اضافه کنید.
کدهای زیر را بر روی هر دو آردوینو آپلود کنید. همانطور که مشاهده میکنید بر روی هر آردوینو که کلید را فشار دهید ، وضعیت LED متصل به آردوینو مقابل تغییر میکند.
محدودیت در دسترسی کامل به این مجموعه آموزش
دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندسهای دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید. |
شیوه کار برنامه ماژول NRF24L01 آردوینو
در setup برنامه تنظیمات مربوط به ماژول و LEDها و کلیدها را انجاممیدهیم. سپس تابعی به نام chk_incoming تعریف میکنیم .
void chk_incoming() { if ( radio.available() ) //چک میکنیم که آیا اطلاعاتی برای دریافت وجود دارد یا خیر { //اطلاعات دریافت شده را خوانده و در متغیر button_states میریزیم radio.read( button_states, num_button_pins ); // با توجه به دادههای دریافت شده از وضعیت کلیدهای آردوینو مقابل ،وضعیت الایدی ها را تغییر میکنیم int i = num_led_pins; while (i--) { if ( button_states[i] ) { led_states[i] ^= HIGH; digitalWrite(led_pins[i], led_states[i]); } } } }
در این تابع چک میکنیم که در صورتی که آردوینو مقابل اطلاعات را ارسال کند، آن اطلاعات را دریافت کند و متناسب با آن اطلاعات دریافت شده(این اطلاعات شامل وضعیت کلیدهای متصل به آردوینو مقایل میباشد) وضعیت LED ها را تغییر دهد. سپس تابعی به نام TX_mode تعریف میکنیم.
void TX_mode()// TX_mode function...... { radio.stopListening(); // must stop listening before you open a writing pipe radio.openWritingPipe(pipe); bool ok = radio.write( button_states, num_button_pins ); // ارسال اطلاعات if (ok) { // چک میکنیم که اطلاعات ارسال شده است یا نه // سپس ماژول را در وضعیت گیرنده قرار میدهیم radio.openReadingPipe(1, pipe); // radio.startListening(); delay(200); } else { printf("failednr"); // for debugging " lets you know other did not received transmittion " } }
در این تابع ابتدا ماژول در وضعیت فرستنده قرار میگیرد سپس اطلاعات را ارسال میکند ، پس از ارسال اطلاعات دوباره ماژول در وضعیت گیرنده قرار میگیرد. بعد از مراحل فوق تابعی به نام chk_outgoing ایجاد میکنیم.
void chk_outgoing() // { int i = num_button_pins; bool different = false; while (i--) { uint8_t state = ! digitalRead(button_pins[i]); if ( state != button_states[i] ) { different = true; button_states[i] = state; } } if (different)// اگر کلید فشرده شود { TX_mode(); //calls Tx_mode function } }
در این تابع مرتبا وضعیت فشرده شدن کلیدها چک میشود و در صورتی که یکی از کلیدها فشرده شود از تابع TX_mode قرار میگیرد و اطلاعات مربوط به وضعیت کلیدها را برای آردوینو مقابل ارسال میکند و سریع دوباره ماژول در مد گیرنده قرار میگیرد.در مرحله آخر تمام توابع نوشته شده را در loop برنامه قرار میهیم:
void loop (void) { chk_incoming(); delay(20); chk_outgoing(); }
سخت افزار مورد نیاز
دو عدد آردوینو Uno
دو عدد ماژول nrf24l01
دو عدد LED
دو عدد تاچ سویج
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
آقای قربانی خسته نباشید.مطلبتون مثل همیشه فوق العاده بود.
دستتون درد نکنه.
سلام
فدای شما
salam
سلام من به جای کلید از یه سیمه خالی استفاده کردم، یه سرشو زدم به پایه ی ۳ یه سرشم به گراند ولی پروژه واسه من عمل نمیکنه و ال ای دیام فقط چشمک میزنن،لطفا بگید علتش چیه ممنون
سلام این آموزش را تست کنین ببینین چواب میگیرین
سلام سوال منم در مورده همین پروژه بود
منظورم آموزش در لینک زیر بود
http://digispark.ir/%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%D9%85%D8%A7%DA%98%D9%88%D9%84-nrf24l01-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%A2%D8%B1%D8%AF%D9%88%DB%8C/
[…] ۲- دانلود کتابخانه و پروژه راه اندازی NRF24L01 و +NRF24L01 3- آموزش ارتباط دو طرفه توسط NRf24l01 آردوینو ۴- راه اندازی ماژول nRF24L01 […]
ببخشید من سوالم رو توی اون یکی مثال این ماژول گذاشته بودم.
من این مدار رو دقیقا بستم. توی سریال مانیتور failed میزنه و توی هر دو آردوینو فقط ال ای دی چشمک میزنه.
بعدشم من یه جا خوندم که تو مثالش واسه هر کدوم یه آدرس مختلف نوشته. هر چند تستش نکردم.
خیر
آدرس ها باید یکسان باشند
سلام اقای قربانی
خسته نباشین
من بابت پروژم یکم راهنمایی میخوام، فکر کنم شما بتونین کمکم کنین
ممنون میشم ایمیلتونو بدین بهم
باتشکر
arghorbani74@gmail.com
سلام خسته نباشین.
بنده از ماژول + استفاده میکنم و ماژول رو صحیح وصل کردم.
هرموقع کلید رو فشار می دم تو سریال مانیتور می نویسه failed.
چی کار می تونم بکنم؟
سلام خسته نباشین
من برنامه نویس اندروید هستم و میخام یه اپلیکیشن بسازم که کاربر باهاش به این برد وصل بشود و یه ارتباط دو نفره ایجاد بشود .من را در این راه یاری بفرمایید
چطور باید این کار را بکنم؟
سلام خسته نباشین
من پروژه را بستم جواب هم گرفتم ولی مشکلی که داره فاصله را که زیاد میکنم از ده متر بیشتر ارسال و دریافت هنگ میکنه این دلیلش از چیه؟
سلام من میخواهم ۳تا گیرنده داشته باشم و یک فرستنده و یک رابطه دوطرفه بین انها ایجاد کنم ممنون میشم اگه کمکم کنید
با سلام و تشکر از شما
در این خصوص بنده تجربه کار عملی ندارم. از دیگر کاربرانی که با این ماژول کار کردهاند، تقاضا دارم تا در این بحث شرکت کنند.
ن تو ی پروژه میخوام از ماژول کارت حافظه sd و nrf استفاده کنم و هر دو از پروتکل spi استفاده می کنند میشه جفتش با هم فعال باشند ؟
با سلام
لطفا لینک زیر رو یه نگاه بندازید…
حتما به دردتون میخوره:
با سلام
کاربر گرامی، ما نسبت به اعتبار مطالب منتشر شده در دیجی اسپارک بسیار اهمیت داریم. از اینرو امکان نمایش لینکهای نا معتبر وجود ندارد. دقت داشته باشید که اگر تمایل به همفکری و کمک به دیگر کاربران هستید، نسبت به انتقال دانش تلاش بفرمایید.
سلام وقت بخیر. آیا میتوان با این ماژول، تصویر ارسال کرد؟
با سلام
بنده در این خصوص تجربه عملی ندارم ولی تا جایی که میدانم میتوانید از طریق یک فایل روی مموری SD این کار را انجام دهید. از دیگر کاربران که دراین خصوص تجربه عملی دارند تقاضا دارم تا در این بحث شرکت کنند.
با سلام
برای ارسال صدا بین طبقات یک ساختمان استفاده از ماژول nrf24l01 مناسب است؟
اگر راه و روش بهتری وجود دارد لطفا راهنمایی کنید.
سلام
این موضوع بسته به نوع فعالیت دارد. از ماژولهای رادیویی ۳۱۵ هم میتوانید استفاده کنید.
سلام
اگه ممکنه برای ارسال صدا یا تصویر از طریق ماژول هایی مثل nrf یا esp راهنمایی کنید. یا از هر طریق دیگری بدون استفاده از سیمکارت.
سلام مجدد
همانطور که پیشتر هم این موضوع مطرح شده است. بایستی به کتابخانه مربوطه مراجعه بفرمایید.
سلام اگه ممکنه برای ارسال صدا یا تصویر از طریق ماژول هایی مثل nrf یا esp راهنمایی کنید. یا از هر طریق دیگری بدون استفاده از سیمکارت.
با سلام دوستان من یک پروژه رادیو کنترل نوشتم با ماژول nrf طلایی که بردش ۱۸۰۰ متره حالا بردش نهایتا پنج متره دیتاریت رو که کم میکنم ماژول ها همدیگر رو پیدا نمیکنن میشه راهنمایی کنید تشکر
با سلام و تشکر از شما
بسیار عالی، متاسفانه بنده در این خصوص تجربه عملی ندارم. از دیگر کاربران که در این زمینه کار کردهاند، تقاضا دارم تا در این بحث شرکت کنند.
سلام من nrf رو با آردوینو Dip uno راه اندازی کردم اما همون کد و شماتیک رو با آردوینو smd uno راه اندازی میکنم ولی جواب نمیگیرم میشه کمکم کنید؟
با سلام
جابجایی برد UNO R3 و UNO SMD نباید تفاوتی در عملکرد مدار ایجاد کند. مشکل شما از جای دیگری مانند تغذیه و یا اتصالت میباشد. نکته دیگر اینکه، کدها روی برد SMD درست آپلود شدهاند؟
با سلام.
من در یک طرف nodemcu استفاده کردم و در طرف دیگه atmega8.
برنامه atmega8 رو با کدویژن نوشتم و برای nodemcu رو با آردوینو ide ولی اصلا به هم پیغام نمیدن. اصلا این کار درسته؟ و میخوام بدونم یک ماژول nrf به چند تا nrf دیگه که همه در یک کانال و یک آدرس دارن کار میکنن پیام ارسال کنه. (نیاز به ack نیست )
با سلام و تشکر از شما
اگر هر دو ماژول فرستنده و گیرنده از یک نوع و ورژن یکسان باشند. طبیعتا ربطی به بخش قبل از ماژول یعنی میکروکنترلر مربوطه ندارد. مشکل را از بخش دیگری دنبال کنید. پیشنهاد میکنم دیتاشیت NRF را کاملا با دقت مطالعه بفرمایید.
با سلام من نیاز به فرستنده و گیرنده تک کاناله دارم که میخام سه تا دیوار مانع از کارارایی سیستم نشه یعنی فرستنده و گیرنده رو در روی هم نباشه
بنظر شما از چه فرستنده و گیرنده استفاده کنم؟ دیتا هم فقط دستور قطع و وصل هست
با سلام
این موضوع بسیار بستگی به شرایط محیطی شما دارد. ولی ماژول NRF دارای برد کافی است. علاوه براین از ماژول لورا هم میتوانید استفاده کنید.
سلام من موقع راه اندازی ماژول nrf در فرستنده هر چی ارسال می کنم از اون طرف صفر دریافت می کنم فکر کنم چون خازن مناسبی در قسمت تغذیه نذاشتم درسته؟
چون وقتی خازن ها رو دست کاری می کنم گاهی اوقات اون مقداری که می خواهم را در خروجی دریافت می کنم الان باید چی کار کنم؟
چه خازنی مناسب است؟دوتا ۱۰ میکرو فاراد رو امتحان کردم
با سلام
علاوه بر خازنها، اتصالات هم اهمیت دارد، مثلا اگر از کابل جامپر استفاده کردید، در این موضوع اهمیت دارد. لطفا بررسی و نتیجه را از همین طریق اعلام کنید.
سلام وعرض ادب و احترام و ممنونم به خاطر آموزش خیلی زیباتون
من موقع کامپایل کردن این ارور را می گیرم حتی لایبراری رو هم اضافه کردم ولی این خط رو ارور می ده
همه ی include ها و توابع ای که گفتید رو قبل از setup اضافه کردم
‘radio’ was not declared in this scope
با سلام و تشکر از شما
لطفا به سطر ۲۹ در کدهای اصلی همین صفحه دقت کنید. در اینجا radio را به عنوان یک شی داخل کدها تعریف کردهایم. و پس از آن دقیقا عبارت radio برای کدها شناخته میشود. لطفا دقیقتر بررسی کرده و نتیجه را از همین طریق اعلام کنید.
سلام
من کدها رو نوشتم وقتی کامپایل رو میزنم کامپایل نمیشه و هیچ خطی هم رو مشخص نمیکنه که مشکل از اون خط باشه
با سلام
منظورتان از اینکه کامپایل نمیشوند دقیقا چیست؟ در چنین حالتی حتما باید ارور دریافت کنید. که در این صورت باید ارور دریافتی را کپی کرده و در پاسخ بعدی ارسال کنید.
سلام وقت بخیر من میخوام با گوشی اندروید به ۳ یا ۴ تا میکروکنترلر که قراره استپ موتور فعال کنند به صورت هم زمان فرمان بدم به صورت بی سیم که برای هر استپ موتور ۴تا فرمان باید بدم جمعا ۱۶ تا مقدار عددی ایا با استفاده از ماژول های nrfمیتونم این کار رو انجام بدم که یک برد مستر باشه بقیه اسلو .ممنون میشم اگر راهنمایی کنید
با سلام و تشکر از شما
دقت داشته باشید که ماژول NRF امکان اتصال به شبکه وای فای موبایل را ندارد. از این رو عملا اقداماتی که میخواهید انجام دهید با این برد قابل اجرا نخواهد بود.
با سلام
خسته نباشید
امکان استفاده از آردوینو نانو هست؟
واینکه اگر بلندگو و میکروفون به این مدار اضافه بشه و در کد ها تغیراتی ایجاد بشه امکان استفاده به عنوان بیسیم وجود داره؟؟؟
با سلام
بله محدودیتی در انتخاب نوع برد ندارید. برای انتقال صدا با این ماژول کلا کدنویسیها تغییر میکنند.
سلام مهندس . من یک هفته هست که هر کار میکنم ماژول داده ارسال نمیکنه . لطفا راهنمایی کنید. جالب اینجاست که وقتی پایه مثبت تغذیه رو جدا میکنم یه سری داده ی اشتباه میفرسته
با سلام
لطفا به آموزش شروع کار با برد NRF24L01 و برقراری ارتباط بی سیم بین دو برد آردوینو مراجعه کنید. طبق توضیحات اقدام کنید. اگر به نتیجه نرسدید، در ادامه همان آموزش سوالتان را مطرح کنید.
سلام وقت بخیر
وقتی دکمه فشرده میشه ال ای دی هیچ تغییری نمیکنه
با سلام
کاربر گرامی سوالتان خیلی کلی است. علتهای مختلفی برای این منظور میتواند وجود داشته باشد. از جمله اینکه بادریت ها را چک کنید. فرکانسی که برای فرستنده و گیرنده تعریف کردهاید، یکی باشند.
من فقط کد هارو کپی پیست کردم
اتصالات هم درسته
قطت دک مه رو میزنم دکمه همان سمت تغییر میکنه
با سلام
بایستی کانال ارتباطی و آدرس هر ماژول را مشخص کنید.