ماژول فرستنده و گيرنده راديويي
+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
شماتیک مدار:
فایل پیوست 442
مثال آردوینو:
کد:
/*
# 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="";
}
جهت سفارش این کالا، به
این بخش در فروشگاه آفتاب رایانه مراجعه نمایید.