آردوینو آردوینو Arduino Uno آموزش آردوینو اینترنت اشیا IOT برد Nodemcu دسته‌بندی

شروع کار با برد NRF24L01 و برقراری ارتباط بی سیم بین دو برد آردوینو

نوشته شده توسط CiferTech

ایده اصلی استفاده از برد های nrf برقراری ارتباط بی سیم بین بردهای توسعه ای مانند آردوینو و یا میکروکنترلر هایی مثل AVR است. اگر با تراشه های ESP32 و ESP8266 کار کرده باشید می دانید که این تراشه ها علاوه بر نوعی میکروکنترلر بودن قابلیت ارتباط های رادیویی را نیز برای ما فراهم کرده اند. برای کار با برد NRF24L01 مناسب خواهند بود. به عبارتی بردهای nrf زمانی بکار می آیند که می خواهیم ارتباط رادیویی بین دو میکروکنترلر بدون استفاده از تراشه های سری ESP برقرار کنیم. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 

انواع برد NRF24L01 - دیجی اسپارک

 


ماژول NRF24L01 فرستنده گیرنده


این ماژول یک transceiver به حساب می آید به این معنی که هر دو فرآیند ارسال (send) و دریافت (receive) را انجام می دهد. این ماژول ها بسیار ارزان با اندازه کوچک عرضه می شوند، ولتاژ کاری این ماژول از ۱٫۹ تا ۳٫۶ ولت است، پایه های MOSI, MISO و SCK پایه های SPI ماژول هستند که باید به پایه های مربوط به پروتکل SPI در آردوینو متصل شوند. پایه های CSN و  CE برای تنظیم ماژول به حالت فعال و تعویض بین حالت فرمان و انتقال اطلاعات هستند. این دو پایه را می توان به هر پایه دیجیتال در آردوینو متصل کرد. پین IRQ پین وقفه است و لازم به اتصال آن نیست.

برخی از مشخصات این ماژول ها به شرح زیر است:

  • مصرف انرژی هنگام ارسال اطلاعات، حدود ۱۲ میلی آمپر است.
  • رنج،در صورت استفاده در فضای باز و با آنتن می تواند تا ۱۰۰ متر هم برسد
  • می تواند داده ها را همزمان ارسال و دریافت کند.
  • هر ماژول می تواند با حداکثر ۶ ماژول دیگر ارتباط برقرار کند.
  • از باند ۲٫۴ گیگاهرتز استفاده می کند.
  • می تواند ۱ تا ۲۵ بایت داده خام با سرعت ۱ مگابایت ارسال کند.

معرفی پایه‌های برد NRF24L01 - دیجی اسپارک

 


برد آردوینو


مجموعه برد های آردوینو از جمله برد های توسعه پرطرفدار بین مهندسین امبدد هستند که در مدل های مختلفی از جمله Micro ,  proMini , Nano , Uno و همچنین Mega قابل تهیه هستند، هسته مرکزی این برد های محبوب از سری AtMega328 می باشد. آردوینو پلتفرم سخت‌افزاری و نرم‌افزاری متن‌باز است. همان طور که قبل تر اشاره کردیم، پلتفرم آردوینو شامل یک میکروکنترلر تک‌بردی متن‌باز است که قسمت سخت‌افزار آردوینو را تشکیل می‌دهد. علاوه بر این، پلتفرم آردوینو یک نرم‌افزار آردوینو IDE که به منظور برنامه‌نویسی برای بردهای آردوینو طراحی شده‌است و یک بوت لودر نرم‌افزاری که بر روی میکروکنترلر بارگذاری می‌شود را در بر می‌گیرد.

برد آردوینو برای کار با برد NRF24L01 - دیجی اسپارک

 


نحوه کار پروژه


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

روش کار با برد NRF24L01 و ارتباط یک طرفه - دیجی اسپارک

 


وسایل مورد نیاز


برد آردوینو Arduino

ماژول NRF24L01

میکروسوییچ

ال ای دی

مقاومت

وسایل لازم برای کار با برد NRF24L01 - دیجی اسپارک

 


اتصالات و کد (فرستنده)


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

اتصالت برای کار با برد NRF24L01 و آردوینو - دیجی اسپارک

شماتیک اتصالات برای کار با برد NRF24L01 و آردوینو - دیجی اسپارک

 

  • کد و توضیحات مربوط به بخش فرستنده

ابتدا کتابخانه های مورد نظر را معرفی می کنیم:

#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 - دیجی اسپارک

شماتیک اتصالات برای بخش گیرنده کار با برد NRF24L01 - دیجی اسپارک

 


کد کامل کار با برد 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 در آردوینوی گیرنده خواهیم بود.

 

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

CiferTech

تبادل نظر و رفع عیب با ثبت دیدگاه

۲۹ دیدگاه

  • بادرود.
    آیا با استفاده از این ماژول امکان ارسال و دریافت همزمان صدا بصورت وایرلس وجود دارد؟
    لطفا راهنمایی کنید.

  • با سلام. در مبحث استفاده از ماژول nrf2401 با آردینو.،به جای آردینو می‌توان از چیپ avr استفاده کرد.؟
    در صورت امکان راهنمایی بفرمایید.

    • با سلام، اتصالات را چک کنید، همچنین توجه داشته باشید پروژه دو بخش فرستنده و گیرنده دارد که کد های هر یک تفاوت دارد.

  • سلام و خسته نباشید خدمت عزیزان
    مشکل عجیبی دارم، اگر لطف کنید راهنمایی کنید.
    کد های قسمت Transmit را برای ارسال کننده روی یک NODEMCU پیاده کردم و کد های Receiver را روی یک WEMOS پیاده کردم ، تا اینجا برنامه اوکی جواب میده و ارسال و دریافت انجام میشه. حالا چنانچه همان برنامه ی Receiver را روی یک WEMOS دیگه کپی کنم، یعنی ۲ تا دریافت کننده هم زمان با کد های مشابه وصل بشن دیگه عملیات درست انجام نمیشه.
    البته من کد های بالا رو یکم ساده تر کردم.

    • با سلام کاربر گرامی برای اجرای چنین سناریو هایی که چندین دریافت کننده وجود دارد، پیشنهاد می‌کنم از پروتکل ESP-NOW استفاده کنید.

  • سلام ببخشید در کد گیرنده باید طبق کد پایه ی ۶ روشن و خاموش شود ولی شما پایه ی ۳ را گذاشتید برای led ولی برای پین ۶ دستور روشن و خاموش نوشتید باید پایه ی led را هم ۶ بکنیم.

  • سلام ایا این امکان وجود دارد که بین فرستنده و گیرنده مانعی وجود داشته باشد تا انتقال اطلاعات به صورت وایرلسی صورت بگیرد؟

    • با سلام، در این پروژه دقیقا همین اتفاق می‌افتد دو برد nrf مقادیر را بصورت بی سیم برای یکدیگر ارسال می‌کنند.

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

    • با سلام، ممنونم. تمام کتابخانه هایی که در آموزش ها معرفی و استفاده می‌شوند، تست شده اند. اما در اولین فرصت لینک مستقیم هم برای این مورد در نظر گرفته می‌شود.

  • سلام اگر از esp32 استفاده کنیم با توجه به اینکه خودش امکانات رادیویی داره آیا میشه فقط از یک nrf استفاده کرد؟ من فقط نیاز به فرستادن یک دستور ساده با ماژول رادیوی دارم ولی طرفی که esp32 دارم محدودیت استفاده از قطعات دارم اگر آی سی یا ماژول ساده ای میشناسید که باهاش بشه راحت یک دستور رادیویی به esp32 فرستاد لطفا راهنمایی کنید بلوتوث هم تا جایی که تحقیق کردم یه مقدار گرون قیمت در میاد و پیچیدگیهای خودش رو داره

    • با سلام
      ماژول NRF فقط از نوع خودش متصل می‌شود. برای این منظور بایستی از یک NRF به یک NRF دیگر ارتباط برقرار کنید. در حقیقت هر دو سمت نیازمند این ماژول هستید.

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