ایده اصلی استفاده از برد های nrf برقراری ارتباط بی سیم بین بردهای توسعه ای مانند آردوینو و یا میکروکنترلر هایی مثل AVR است. اگر با تراشه های ESP32 و ESP8266 کار کرده باشید می دانید که این تراشه ها علاوه بر نوعی میکروکنترلر بودن قابلیت ارتباط های رادیویی را نیز برای ما فراهم کرده اند. برای کار با برد NRF24L01 مناسب خواهند بود. به عبارتی بردهای nrf زمانی بکار می آیند که می خواهیم ارتباط رادیویی بین دو میکروکنترلر بدون استفاده از تراشه های سری ESP برقرار کنیم. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
ماژول NRF24L01 فرستنده گیرنده
این ماژول یک transceiver به حساب می آید به این معنی که هر دو فرآیند ارسال (send) و دریافت (receive) را انجام می دهد. این ماژول ها بسیار ارزان با اندازه کوچک عرضه می شوند، ولتاژ کاری این ماژول از ۱٫۹ تا ۳٫۶ ولت است، پایه های MOSI, MISO و SCK پایه های SPI ماژول هستند که باید به پایه های مربوط به پروتکل SPI در آردوینو متصل شوند. پایه های CSN و CE برای تنظیم ماژول به حالت فعال و تعویض بین حالت فرمان و انتقال اطلاعات هستند. این دو پایه را می توان به هر پایه دیجیتال در آردوینو متصل کرد. پین IRQ پین وقفه است و لازم به اتصال آن نیست.
برخی از مشخصات این ماژول ها به شرح زیر است:
- مصرف انرژی هنگام ارسال اطلاعات، حدود ۱۲ میلی آمپر است.
-
رنج،در صورت استفاده در فضای باز و با آنتن می تواند تا ۱۰۰ متر هم برسد
-
می تواند داده ها را همزمان ارسال و دریافت کند.
-
هر ماژول می تواند با حداکثر ۶ ماژول دیگر ارتباط برقرار کند.
-
از باند ۲٫۴ گیگاهرتز استفاده می کند.
-
می تواند ۱ تا ۲۵ بایت داده خام با سرعت ۱ مگابایت ارسال کند.
برد آردوینو
مجموعه برد های آردوینو از جمله برد های توسعه پرطرفدار بین مهندسین امبدد هستند که در مدل های مختلفی از جمله Micro , proMini , Nano , Uno و همچنین Mega قابل تهیه هستند، هسته مرکزی این برد های محبوب از سری AtMega328 می باشد. آردوینو پلتفرم سختافزاری و نرمافزاری متنباز است. همان طور که قبل تر اشاره کردیم، پلتفرم آردوینو شامل یک میکروکنترلر تکبردی متنباز است که قسمت سختافزار آردوینو را تشکیل میدهد. علاوه بر این، پلتفرم آردوینو یک نرمافزار آردوینو IDE که به منظور برنامهنویسی برای بردهای آردوینو طراحی شدهاست و یک بوت لودر نرمافزاری که بر روی میکروکنترلر بارگذاری میشود را در بر میگیرد.
نحوه کار پروژه
در این پروژه با استفاده از دو برد آردوینو و همچنین دو عدد ماژول NRF24 یک ارتباط رادیوی بین دو برد آردوینو ایجاد می کنیم که در نتیجه قادر خواهیم بود از طریق یک آردوینو، آردوینو دوم را کنترل و با اطلاعات مد نظر برای مثال مقادیر یک سنسور دما را منتقل کنیم در این سناریو یک برد به عنوان ارسال کننده و دیگری به عنوان دریافت کننده عمل میکند.
وسایل مورد نیاز
اتصالات و کد (فرستنده)
در این بخش کد و شماتیک برای قسمت ارسال کننده اطلاعات در این پروژه را مشاهاده خواهید کرد.
-
کد و توضیحات مربوط به بخش فرستنده
ابتدا کتابخانه های مورد نظر را معرفی می کنیم:
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h>
در این خط پایه های مربوط به پین های CE و CSN را مشخص می کنیم.
RF24 radio(9, 10);
این تابع مربوط به شروع رویداد رادیویی می باشد.
radio.begin();
کد کامل
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> RF24 radio(9, 10); // CE, CSN const byte address[6] = "00001"; //Byte of array representing the address. This is the address where we will send the data. This should be same on the receiving side. int button_pin = 2; boolean button_state = 0; void setup() { pinMode(button_pin, INPUT); radio.begin(); //Starting the Wireless communication radio.openWritingPipe(address); //Setting the address where we will send the data radio.setPALevel(RF24_PA_MIN); //You can set it as minimum or maximum depending on the distance between the transmitter and receiver. radio.stopListening(); //This sets the module as transmitter } void loop() { button_state = digitalRead(button_pin); if(button_state == HIGH) { const char text[] = "Your Button State is HIGH"; radio.write(&text, sizeof(text)); //Sending the message to receiver } else { const char text[] = "Your Button State is LOW"; radio.write(&text, sizeof(text)); //Sending the message to receiver } radio.write(&button_state, sizeof(button_state)); //Sending the message to receiver delay(1000); }
اتصالات و کد (گیرنده)
در این بخش کد و شماتیک برای قسمت دریافت کننده اطلاعات در این پروژه را مشاهاده خواهید کرد.
کد کامل کار با برد NRF24L01
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> RF24 radio(9, 10); // CE, CSN const byte address[6] = "00001"; boolean button_state = 0; int led_pin = 3; void setup() { pinMode(6, OUTPUT); Serial.begin(9600); radio.begin(); radio.openReadingPipe(0, address); //Setting the address at which we will receive the data radio.setPALevel(RF24_PA_MIN); //You can set this as minimum or maximum depending on the distance between the transmitter and receiver. radio.startListening(); //This sets the module as receiver } void loop() { if (radio.available()) //Looking for the data. { char text[32] = ""; //Saving the incoming data radio.read(&text, sizeof(text)); //Reading the data radio.read(&button_state, sizeof(button_state)); //Reading the data if(button_state == HIGH) { digitalWrite(6, HIGH); Serial.println(text); } else { digitalWrite(6, LOW); Serial.println(text);} } delay(5); }
جمع بندی
در نهایت پس از آپلود کد و برقراری اتصالات با فشردن میکرو سوییچ در آردوینوی فرستنده شاهد روشن شدن LED در آردوینوی گیرنده خواهیم بود.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
بادرود.
آیا با استفاده از این ماژول امکان ارسال و دریافت همزمان صدا بصورت وایرلس وجود دارد؟
لطفا راهنمایی کنید.
با سلام، در مقالاتی به این مورد اشاره شده ولی این مورد تست نشده، پیشنهاد میشود برای این مورد از ماژول های بلوتوث استفاده کنید.
سلام ایا با این روش میتوان چند سرووموتوررا کنترل کرد؟
سلام ایا با این روش میتوان چند سرووموتوررا کنترل کرد؟
برای چنین سناریویی آموزش های ESP NOW را مطالعه کنید.
با سلام. در مبحث استفاده از ماژول nrf2401 با آردینو.،به جای آردینو میتوان از چیپ avr استفاده کرد.؟
در صورت امکان راهنمایی بفرمایید.
بله این امکان وجود دارد، ولی بدلیل OpenSource نبودن AVR کتابخانه آماده برای راهاندازی سریع ماژول وجود ندارد.
با سلام من طبق اموزش پیش رفتم…ولی هیچ دیتایی ارسال نمی شه ؟
مشکل از چی می تونه باشه ؟
با سلام، اتصالات را چک کنید، همچنین توجه داشته باشید پروژه دو بخش فرستنده و گیرنده دارد که کد های هر یک تفاوت دارد.
سلام و خسته نباشید خدمت عزیزان
مشکل عجیبی دارم، اگر لطف کنید راهنمایی کنید.
کد های قسمت Transmit را برای ارسال کننده روی یک NODEMCU پیاده کردم و کد های Receiver را روی یک WEMOS پیاده کردم ، تا اینجا برنامه اوکی جواب میده و ارسال و دریافت انجام میشه. حالا چنانچه همان برنامه ی Receiver را روی یک WEMOS دیگه کپی کنم، یعنی ۲ تا دریافت کننده هم زمان با کد های مشابه وصل بشن دیگه عملیات درست انجام نمیشه.
البته من کد های بالا رو یکم ساده تر کردم.
با سلام کاربر گرامی برای اجرای چنین سناریو هایی که چندین دریافت کننده وجود دارد، پیشنهاد میکنم از پروتکل ESP-NOW استفاده کنید.
سلام ایا بااین روش میتوان چند سرووموتوررا توسط پتانسیو مترکنترل کرد؟
سلام ببخشید در کد گیرنده باید طبق کد پایه ی ۶ روشن و خاموش شود ولی شما پایه ی ۳ را گذاشتید برای led ولی برای پین ۶ دستور روشن و خاموش نوشتید باید پایه ی led را هم ۶ بکنیم.
با تشکر از توجه شما.
سلام ایا این امکان وجود دارد که بین فرستنده و گیرنده مانعی وجود داشته باشد تا انتقال اطلاعات به صورت وایرلسی صورت بگیرد؟
با سلام، در این پروژه دقیقا همین اتفاق میافتد دو برد nrf مقادیر را بصورت بی سیم برای یکدیگر ارسال میکنند.
سلام مونتاژ دستگاه را اعلام می فرمائید.
متوجه منظورتون نشدم! اگر منظورتون شماتیک پروژه هست، در آموزش موجود است.
با عرض سلام و خسته نباشید ، لطف کنید ، یک کتابخانه تست شده ، برای دانلود بگذارید ، ممنون میشم ، آردوینو و یه کتابخونش.
با سلام، ممنونم. تمام کتابخانه هایی که در آموزش ها معرفی و استفاده میشوند، تست شده اند. اما در اولین فرصت لینک مستقیم هم برای این مورد در نظر گرفته میشود.
سلام
من برد رو مطابق شماتیک و برنامه پیاده کردم ولی چیزی دریافت نمیشه
مشخصات مقاومت فکر کنم اشتباه باشه
تعریف پروژه و داکیومنت گذاشتن تون مشکل داره
با سلام و تشکر از شما
لطفا انتقادتان را کامل و دقیق مطرح کنید تا امکان پیگیری داشته باشیم.
سلام اگر از esp32 استفاده کنیم با توجه به اینکه خودش امکانات رادیویی داره آیا میشه فقط از یک nrf استفاده کرد؟ من فقط نیاز به فرستادن یک دستور ساده با ماژول رادیوی دارم ولی طرفی که esp32 دارم محدودیت استفاده از قطعات دارم اگر آی سی یا ماژول ساده ای میشناسید که باهاش بشه راحت یک دستور رادیویی به esp32 فرستاد لطفا راهنمایی کنید بلوتوث هم تا جایی که تحقیق کردم یه مقدار گرون قیمت در میاد و پیچیدگیهای خودش رو داره
با سلام
ماژول NRF فقط از نوع خودش متصل میشود. برای این منظور بایستی از یک NRF به یک NRF دیگر ارتباط برقرار کنید. در حقیقت هر دو سمت نیازمند این ماژول هستید.
سلام من میخوام توسط تبلت به آردینو فرمان بدم که دستگاهی شروع به کا ربکنه لطفا بفرمایید چطور انجام بدم؟
با سلام
برای این منظور بایستی اژ ماژول ESP8266 که وای فای استاندارد است استفاده کنید.
سلام کتابخانه هارو چی جوری نصب کنم؟
لطفا دقیق توضیخ دهید
با سلام
اگر تازه کار هستید و روش نصب کتابخانه را نمیدانید به پست زیر مراجعه کنید.
آموزش نصب کتابخانه در آردوینو