نقل قول نوشته اصلی توسط e.rasekh نمایش پست ها
ماژول فرستنده و گيرنده راديويي +nRF24L01 از جديدترين فرستنده و گيرنده 2.4 گيگاهرتزي شركت Nordic Semiconductor يعني چيپ +nRF24L01 استفاده مي كند. فركانس اين آي سي براي دريافت و ارسال راديويي اطلاعات باند 2.4 گيگاهرتز بوده و مشخصات بسيار جديدي دارد. اين آي سي تمامي مشخصات و مزاياي آي سي سري قبل خود يعني nRF24L01A را داراست. بعلاوه pipeline و بافرهاي اضافي، و همچنين ارسال مجدد اتوماتيك، از قابليتهاي اضافه شده در اين سري از آي سي هاي RF است.

توجه: در سري پلاس «+» از اين آي سي ها يعني +nRF24L01 شركت Nordic مشخصاتي مانند برد، حساسيت و نرخ تبادل اطلاعات را نسبت به محصول سري قبل يعني nRF24L01 ارتقاء داده است. با اين حال دستورات كنترلي يا Command های اين سري با سري قبل يكي بوده و تغييري نداشته است.

مشخصات:

  • آنتن 2.4 گيگاهرتز روي بورد
  • برد 100 متر
  • نرخ تبادل اطلاعات قابل تنظيم از 250 كيلوبيت تا 2 مگابيت بر ثانيه
  • Auto Acknowledge
  • Re-Transmit Auto
  • Multiceiver با 6 ديتاپايپ
  • داراي 32 بايت FIFO بصورت مجزا براي TX و RX
  • پايه هاي ورودي با تحمل ولتاژ 5 ولت
  • قابليت تنظيم كانال ارتباطي از 2400 مگاهرتز تا 2525 مگاهرتز (125كانال قابل انتخاب)
  • حداقل نياز به قطعات جانبي جهت راه اندازي
  • ترتيب پايه ها :VCC ، CE ، CSN ، SCK ، MOSI ، MISO ، IRQ


شماتیک مدار:
برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: NRF24L01_SCH.jpg
مشاهده: 3038
حجم: 86.0 کیلو بایت

مثال آردوینو:
کد:
/*
 # Be name Khoda!
 # A Mirf example to test the latency between two Ardunio.

 # Company    : AftabRayaneh
 # Website    : http://shop.aftabrayaneh.com
 # Developers : Reza Najafi, Elham Rasekh
 # Date       : 09.09.2013
 # Version    : 3.0
 
 * Pins:
 * Hardware SPI:
 * MISO -> 12
 * MOSI -> 11
 * SCK -> 13
 *
 * Configurable:
 * CE -> 8
 * CSN -> 7
 */

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

const int MAX_BUFFER_LEN = 16;
String Receive_Address = "clie1"; //A name that is dedicated to this station; MAX is 5 Char.
String Send_Address = "clie2";    //A name that is dedicated to another station; MAX is 5 Char. 

String strMirfBuffer="";
byte Transfer_Lock=0;

void setup()
{  
  Serial.begin(9600); 
  Setup_Mirf(); // initializing overall needed...  
  sendData("TALK"); 
}

void loop()
{
  if (!Mirf.isSending())
     check_MirfBuffer();  
  read_SerialBuffer();
} 

//This function checks mirf data availability. if data is available, put it in the buffer and generates an event.
void check_MirfBuffer()
{
  if (Mirf.dataReady())
  { 
    while(Mirf.dataReady())
    {
      int  tmp_index=0;
      byte tmp_buffer[4]={0};
      Mirf.getData(tmp_buffer);  
      while(tmp_buffer[tmp_index] && tmp_index<4 )
      {
        strMirfBuffer = strMirfBuffer + char(tmp_buffer[tmp_index]);
        tmp_index++;
      }
      if (strMirfBuffer.length() >= MAX_BUFFER_LEN ) 
        buffer_ready();     
     
      if (!Mirf.dataReady())
        delay(2);     
    }
  }
  else if (strMirfBuffer.length()>0 )   
    buffer_ready();   
}

//This function sends a 4 byte packet
void sendPacket(char packet[5])
{   
  Mirf.send((byte *)packet);
  while(Mirf.isSending());
}

//This function sends data 
void sendData(String strData)
{
  int StrLen=0;
  String tmp_Str="";
  Serial.print("sending data: ");
  Serial.print(strData);
  Transfer_Lock=1;
  StrLen=strData.length();
  Serial.print(" : ");
  Serial.println(StrLen);
  
  //parsing the data to 4 character packets (byte *)packet
  while (StrLen>0)
  {
    char tmp_Char[5]={0};
    if(StrLen>4)
    {
      tmp_Str=strData.substring(0,4);
      strData=strData.substring(4);
    }
    else
    {
      tmp_Str=strData;
      strData="";
    }
    tmp_Str.toCharArray(tmp_Char, 5);;
    sendPacket(tmp_Char); 
    StrLen=strData.length();    
  }  
  Transfer_Lock=0;
}

//This function parses received commands from another nrfs.
void buffer_ready()
{  
  if (strMirfBuffer == "TALK")
  {
    sendData("HURRAY !");
    Serial.println("Talking...");  
  }   
  //and parse other commands so on ...
  else 
  {
    Serial.print("<");
    Serial.print(strMirfBuffer);
    Serial.println(">");
  }
  clear_buffer(); 
}

//This function forms a buffer of serial data and send it
void read_SerialBuffer()
{
  if(Serial.available())
  {
    char CharData;
    String StrSerialBuffer=""; 
    
    while (Serial.available() && StrSerialBuffer.length() < MAX_BUFFER_LEN ) 
    {      
      CharData=Serial.read();
      StrSerialBuffer=StrSerialBuffer + CharData;   
      if (!Serial.available())
         delay(1);       
    }      
     while (Transfer_Lock); //wait for transfer process     
      
     sendData(StrSerialBuffer);    
  }
}

//This function initializes overall needed for wireless communication
void Setup_Mirf() 
{
  char Receive_Adr_Char[6];
  char Send_Adr_Char[6];
  Receive_Address.toCharArray(Receive_Adr_Char, 6); 
  Send_Address.toCharArray(Send_Adr_Char, 6); 

  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  Mirf.setRADDR((byte *)Receive_Adr_Char);
  Mirf.setTADDR((byte *)Send_Adr_Char);
  Mirf.payload = sizeof(unsigned long);
  Mirf.config();

  //reg - Start  
  byte rf_setup = 0;
  Mirf.readRegister( RF_SETUP, &rf_setup, sizeof(rf_setup) );

  if (rf_setup != 0)   
    Serial.println("Beginning ... "); 
  else
  {
    Serial.println( "Wireless did not initialize!" );
    while (rf_setup==0);       
  }
  delay(100);
}

//This function clears the buffer
void clear_buffer ()
{
  strMirfBuffer="";
}
جهت سفارش این کالا، به این بخش در فروشگاه آفتاب رایانه مراجعه نمایید.

برای من این خطا را می دهد:
error: 'SPI_2XCLOCK_MASK' was not declared in this scope