查看(SKU:RB-03T006)NRF24L01無線數傳模塊的源代碼
←
(SKU:RB-03T006)NRF24L01無線數傳模塊
跳轉至:
導航
、
搜索
因為以下原因,你沒有權限編輯本頁:
您剛才請求的操作只有這個用戶組中的用戶才能使用:
用戶
您可以查看并復制此頁面的源代碼:
[[文件:RB-03T006.jpg|500px|縮略圖|右]] ==產品概述== NRF24L01是一款新型單片射頻收發(fā)器件,工作于2.4 GHz~2.5 GHz ISM頻段。內置頻率合成器、功率放大器、晶體振蕩器、調制器等功能模塊,并融合了增強型ShockBurst技術,其中輸出功率和通信頻道可通過程序進 行配置。NRF24L01功耗低,在以-6 dBm的功率發(fā)射時,工作電流也只有9 mA;接收時,工作電流只有12.3 mA,多種低功率工作模式(掉電模式和空閑模式)使節(jié)能設計更方便。 ==規(guī)格參數== #2Mbit/s速率下接收時的峰值電流12.5mA #在2Mbit/s速率下@0dBm輸出時的峰值電流11mA #掉電模式下的功耗400nA #待機模式下的功耗32uA #130us 的快速切換和喚醒時間 #具有片內穩(wěn)壓器oltage regulators #可在1.9 to 3.6V低電壓工作 #MultiCeiverMT硬件提供同時6個接收機的功能,2Mbit/s 使得高質量的VoIP成為可能 ==使用方法== ===引腳說明=== [[文件:hohn7.jpg|500px|有框|居中]] ==應用例程== 1.庫文件下載<br/> [http://playground.arduino.cc/uploads/InterfacingWithHardware/Mirf.zip mirf 庫下載地址]<br/> 2.連接Arduino和NRF2401模塊<br/> {|border="1" cellspacing="0" align="center" cellpadding="5" width="400px" |- |align="center"|NRF2401 |align="center"|Arduino |- |align="center"|VCC |align="center"|3V3 |- |align="center"|GND |align="center"|GND |- |align="center"|CSN |align="center"|D7 |- |align="center"|CE |align="center"|D8 |- |align="center"|MOSI |align="center"|D11 |- |align="center"|MISO |align="center"|D12 |- |align="center"|SCK |align="center"|D13 |} <br> 3.代碼下載<br/> 發(fā)送端代碼<br/> <pre style='color:blue'> /********************************************************************* ** Device: nRF24L01+ ** ** File: EF_nRF24L01_TX.c ** ** ** ** ** ** Copyright (C) 2011 ElecFraks. ** ** This example code is in the public domain. ** ** ** ** Description: ** ** This file is a sample code for your reference. ** ** It's the v1.0 nRF24L01+ Hardware SPI by arduino ** ** Created by ElecFreaks. Robi.W,11 June 2011 ** ** ** ** http://www.elecfreaks.com ** ** ** ** SPI-compatible ** ** CS - to digital pin 8 ** ** CSN - to digital pin 9 (SS pin) ** ** MOSI - to digital pin 11 (MOSI pin) ** ** MISO - to digital pin 12 (MISO pin) ** ** CLK - to digital pin 13 (SCK pin) ** *********************************************************************/ #include <SPI.h> #include "API.h" #include "nRF24L01.h" //*************************************************** #define TX_ADR_WIDTH 5 // 5 unsigned chars TX(RX) address width #define TX_PLOAD_WIDTH 32 // 32 unsigned chars TX payload unsigned char TX_ADDRESS[TX_ADR_WIDTH] = { 0x34,0x43,0x10,0x10,0x01 }; // Define a static TX address unsigned char rx_buf[TX_PLOAD_WIDTH] = {0}; // initialize value unsigned char tx_buf[TX_PLOAD_WIDTH] = {0}; //*************************************************** void setup() { Serial.begin(9600); pinMode(CE, OUTPUT); pinMode(CSN, OUTPUT); pinMode(IRQ, INPUT); SPI.begin(); delay(50); init_io(); // Initialize IO port unsigned char sstatus=SPI_Read(STATUS); Serial.println("*******************TX_Mode Start****************************"); Serial.print("status = "); Serial.println(sstatus,HEX); // There is read the mode’s status register, the default value should be ‘E’ TX_Mode(); // set TX mode } void loop() { int k = 0; for(;;) { for(int i=0; i<32; i++) tx_buf[i] = k++; unsigned char sstatus = SPI_Read(STATUS); // read register STATUS's value if(sstatus&TX_DS) // if receive data ready (TX_DS) interrupt { SPI_RW_Reg(FLUSH_TX,0); SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH); // write playload to TX_FIFO } if(sstatus&MAX_RT) // if receive data ready (MAX_RT) interrupt, this is retransmit than SETUP_RETR { SPI_RW_Reg(FLUSH_TX,0); SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH); // disable standy-mode } SPI_RW_Reg(WRITE_REG+STATUS,sstatus); // clear RX_DR or TX_DS or MAX_RT interrupt flag delay(1000); } } //************************************************** // Function: init_io(); // Description: // flash led one time,chip enable(ready to TX or RX Mode), // Spi disable,Spi clock line init high //************************************************** void init_io(void) { digitalWrite(IRQ, 0); digitalWrite(CE, 0); // chip enable digitalWrite(CSN, 1); // Spi disable } /************************************************************************ ** * Function: SPI_RW(); * * Description: * Writes one unsigned char to nRF24L01, and return the unsigned char read * from nRF24L01 during write, according to SPI protocol ************************************************************************/ unsigned char SPI_RW(unsigned char Byte) { return SPI.transfer(Byte); } /**************************************************/ /************************************************** * Function: SPI_RW_Reg(); * * Description: * Writes value 'value' to register 'reg' /**************************************************/ unsigned char SPI_RW_Reg(unsigned char reg, unsigned char value) { unsigned char status; digitalWrite(CSN, 0); // CSN low, init SPI transaction SPI_RW(reg); // select register SPI_RW(value); // ..and write value to it.. digitalWrite(CSN, 1); // CSN high again return(status); // return nRF24L01 status unsigned char } /**************************************************/ /************************************************** * Function: SPI_Read(); * * Description: * Read one unsigned char from nRF24L01 register, 'reg' /**************************************************/ unsigned char SPI_Read(unsigned char reg) { unsigned char reg_val; digitalWrite(CSN, 0); // CSN low, initialize SPI communication... SPI_RW(reg); // Select register to read from.. reg_val = SPI_RW(0); // ..then read register value digitalWrite(CSN, 1); // CSN high, terminate SPI communication return(reg_val); // return register value } /**************************************************/ /************************************************** * Function: SPI_Read_Buf(); * * Description: * Reads 'unsigned chars' #of unsigned chars from register 'reg' * Typically used to read RX payload, Rx/Tx address /**************************************************/ unsigned char SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes) { unsigned char sstatus,i; digitalWrite(CSN, 0); // Set CSN low, init SPI tranaction sstatus = SPI_RW(reg); // Select register to write to and read status unsigned char for(i=0;i<bytes;i++) { pBuf[i] = SPI_RW(0); // Perform SPI_RW to read unsigned char from nRF24L01 } digitalWrite(CSN, 1); // Set CSN high again return(sstatus); // return nRF24L01 status unsigned char } /**************************************************/ /************************************************** * Function: SPI_Write_Buf(); * * Description: * Writes contents of buffer '*pBuf' to nRF24L01 * Typically used to write TX payload, Rx/Tx address /**************************************************/ unsigned char SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes) { unsigned char sstatus,i; digitalWrite(CSN, 0); // Set CSN low, init SPI tranaction sstatus = SPI_RW(reg); // Select register to write to and read status unsigned char for(i=0;i<bytes; i++) // then write all unsigned char in buffer(*pBuf) { SPI_RW(*pBuf++); } digitalWrite(CSN, 1); // Set CSN high again return(sstatus); // return nRF24L01 status unsigned char } /**************************************************/ /************************************************** * Function: TX_Mode(); * * Description: * This function initializes one nRF24L01 device to * TX mode, set TX address, set RX address for auto.ack, * fill TX payload, select RF channel, datarate & TX pwr. * PWR_UP is set, CRC(2 unsigned chars) is enabled, & PRIM:TX. * * ToDo: One high pulse(>10us) on CE will now send this * packet and expext an acknowledgment from the RX device. **************************************************/ void TX_Mode(void) { digitalWrite(CE, 0); SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // Writes TX_Address to nRF24L01 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // Enable Auto.Ack:Pipe0 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // Enable Pipe0 SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 500us + 86us, 10 retrans... SPI_RW_Reg(WRITE_REG + RF_CH, 40); // Select RF channel 40 SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // Set PWR_UP bit, enable CRC(2 unsigned chars) & Prim:TX. MAX_RT & TX_DS enabled.. SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH); digitalWrite(CE, 1); } </pre> <br/> 接收端代碼:<br/> <pre style='color:blue'> /********************************************************************* ** Device: nRF24L01+ ** ** File: EF_nRF24L01_RX.c ** ** ** ** ** ** Copyright (C) 2011 ElecFraks. ** ** This example code is in the public domain. ** ** ** ** Description: ** ** This file is a sample code for your reference. ** ** It's the v1.0 nRF24L01+ Hardware SPI by arduino ** ** Created by ElecFreaks. Robi.W,11 June 2011 ** ** ** ** http://www.elecfreaks.com ** ** ** ** SPI-compatible ** ** CS - to digital pin 8 ** ** CSN - to digital pin 9 (SS pin) ** ** MOSI - to digital pin 11 (MOSI pin) ** ** MISO - to digital pin 12 (MISO pin) ** ** CLK - to digital pin 13 (SCK pin) ** *********************************************************************/ #include <SPI.h> #include "API.h" #include "nRF24L01.h" //*************************************************** #define TX_ADR_WIDTH 5 // 5 unsigned chars TX(RX) address width #define TX_PLOAD_WIDTH 32 // 32 unsigned chars TX payload unsigned char TX_ADDRESS[TX_ADR_WIDTH] = { 0x34,0x43,0x10,0x10,0x01 }; // Define a static TX address unsigned char rx_buf[TX_PLOAD_WIDTH] = {0}; // initialize value unsigned char tx_buf[TX_PLOAD_WIDTH] = {0}; //*************************************************** void setup() { Serial.begin(9600); pinMode(CE, OUTPUT); pinMode(CSN, OUTPUT); pinMode(IRQ, INPUT); SPI.begin(); delay(50); init_io(); // Initialize IO port unsigned char sstatus=SPI_Read(STATUS); Serial.println("*******************RX_Mode Start****************************"); Serial.print("status = "); Serial.println(sstatus,HEX); // There is read the mode’s status register, the default value should be ‘E’ RX_Mode(); // set RX mode } void loop() { for(;;) { unsigned char status = SPI_Read(STATUS); // read register STATUS's value if(status&RX_DR) // if receive data ready (TX_DS) interrupt { SPI_Read_Buf(RD_RX_PLOAD, rx_buf, TX_PLOAD_WIDTH); // read playload to rx_buf SPI_RW_Reg(FLUSH_RX,0); // clear RX_FIFO for(int i=0; i<32; i++) { Serial.print(" "); Serial.print(rx_buf[i],HEX); // print rx_buf } Serial.println(" "); } SPI_RW_Reg(WRITE_REG+STATUS,status); // clear RX_DR or TX_DS or MAX_RT interrupt flag delay(1000); } } //************************************************** // Function: init_io(); // Description: // flash led one time,chip enable(ready to TX or RX Mode), // Spi disable,Spi clock line init high //************************************************** void init_io(void) { digitalWrite(IRQ, 0); digitalWrite(CE, 0); // chip enable digitalWrite(CSN, 1); // Spi disable } /************************************************************************ ** * Function: SPI_RW(); * * Description: * Writes one unsigned char to nRF24L01, and return the unsigned char read * from nRF24L01 during write, according to SPI protocol ************************************************************************/ unsigned char SPI_RW(unsigned char Byte) { return SPI.transfer(Byte); } /**************************************************/ /************************************************** * Function: SPI_RW_Reg(); * * Description: * Writes value 'value' to register 'reg' /**************************************************/ unsigned char SPI_RW_Reg(unsigned char reg, unsigned char value) { unsigned char status; digitalWrite(CSN, 0); // CSN low, init SPI transaction SPI_RW(reg); // select register SPI_RW(value); // ..and write value to it.. digitalWrite(CSN, 1); // CSN high again return(status); // return nRF24L01 status unsigned char } /**************************************************/ /************************************************** * Function: SPI_Read(); * * Description: * Read one unsigned char from nRF24L01 register, 'reg' /**************************************************/ unsigned char SPI_Read(unsigned char reg) { unsigned char reg_val; digitalWrite(CSN, 0); // CSN low, initialize SPI communication... SPI_RW(reg); // Select register to read from.. reg_val = SPI_RW(0); // ..then read register value digitalWrite(CSN, 1); // CSN high, terminate SPI communication return(reg_val); // return register value } /**************************************************/ /************************************************** * Function: SPI_Read_Buf(); * * Description: * Reads 'unsigned chars' #of unsigned chars from register 'reg' * Typically used to read RX payload, Rx/Tx address /**************************************************/ unsigned char SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes) { unsigned char sstatus,i; digitalWrite(CSN, 0); // Set CSN low, init SPI tranaction sstatus = SPI_RW(reg); // Select register to write to and read status unsigned char for(i=0;i<bytes;i++) { pBuf[i] = SPI_RW(0); // Perform SPI_RW to read unsigned char from nRF24L01 } digitalWrite(CSN, 1); // Set CSN high again return(sstatus); // return nRF24L01 status unsigned char } /**************************************************/ /************************************************** * Function: SPI_Write_Buf(); * * Description: * Writes contents of buffer '*pBuf' to nRF24L01 * Typically used to write TX payload, Rx/Tx address /**************************************************/ unsigned char SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes) { unsigned char sstatus,i; digitalWrite(CSN, 0); // Set CSN low, init SPI tranaction sstatus = SPI_RW(reg); // Select register to write to and read status unsigned char for(i=0;i<bytes; i++) // then write all unsigned char in buffer(*pBuf) { SPI_RW(*pBuf++); } digitalWrite(CSN, 1); // Set CSN high again return(sstatus); // return nRF24L01 status unsigned char } /**************************************************/ void RX_Mode(void) { digitalWrite(CE, 0); SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // Use the same address on the RX device as the TX device SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // Enable Auto.Ack:Pipe0 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // Enable Pipe0 SPI_RW_Reg(WRITE_REG + RF_CH, 40); // Select RF channel 40 SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); // Select same RX payload width as TX Payload width SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // Set PWR_UP bit, enable CRC(2 unsigned chars) & Prim:RX. RX_DR enabled.. digitalWrite(CE, 1); // Set CE pin high to enable RX device // This device is now ready to receive one packet of 16 unsigned chars payload from a TX device sending to address // '3443101001', with auto acknowledgment, retransmit count of 10, RF channel 40 and datarate = 2Mbps. } </pre> ==產品相關推薦== 論壇地址:[http://www.makerspace.cn/portal.php 奧松機器人技術論壇]<br/> 購買地址:[http://gharee.com/goods-54.html NRF24L01無線數傳模塊]
返回
(SKU:RB-03T006)NRF24L01無線數傳模塊
。
來自“
http://gharee.com/wiki/index.php/(SKU:RB-03T006)NRF24L01無線數傳模塊
”
導航菜單
個人工具
登錄
名字空間
頁面
討論
變換
查看
閱讀
查看源代碼
查看歷史
操作
搜索
導航
首頁
社區(qū)專頁
新聞動態(tài)
最近更改
隨機頁面
工具箱
鏈入頁面
相關更改
特殊頁面
頁面信息
隱私政策
關于ALSROBOT WiKi
免責聲明