(SKU: DFR0510)FireBeetle Covers-NRF24L01 Radio
来自DFRobot Product Wiki
目录 |
简介
DFRobot Firebeetle萤火虫系列是专为物联网设计的低功耗开发组件。此款FireBeetle Covers扩展板,集数据收发于一体,板上集成NRF24L01无线通信模组,接口完全兼容FireBeetle。模块采用NORDIC原装nRF24L01P射频芯片,内置RFX2401C功放芯片,接收灵敏度提高10dBm,通信距离达到2Km(空旷地带)。并且,该模块保留了nRF24L01P芯片的低功耗功能,在shutdown模式下,电流仅1.0uA。
技术规格
- 工作电压:1.8V~3.6V(典型值3.3V)
- 通信接口:SPI(最高可达10Mbps)
- 工作频段:2.4GHz ~ 2.525GHz
- 实测距离:2000m (晴朗空旷,最大功率,高度 2m,250k 空中速率)
- 150mA@0dBm TX
- 23mA@2Mbps RX
- power down模式:900nA
- standby模式:26uA
- 关断电流:1uA
- 通信距离:2Km(空旷地带,最大输出功能,设备高度2m,250K空中速率)
- 发射功率: 最大 0dBm(约1mW)
- 发送包长度:1~32Byte/包
- 接收包长度:1~32Byte/包
- 空中速率: 250k ~ 2Mbps ( 3级可调(250kbps、1Mbps、2Mbps))
- 接收灵敏度:-94dBm@250Kbps
- 天线接口:IPEX
- 工作温度:-40℃~+85℃
- 模块尺寸:58 × 29(mm)
- 安装孔位置:53 x 24(mm)
- 安装孔尺寸:内径3.1mm
尺寸图
- pin脚间距:2.54mm
- 安装孔间距:24mm/53mm
- 安装孔尺寸:3.1mm
- 主板尺寸:29.00mm×58.00mm
- 板厚:1.6mm
功能示意图
- 5向开关-CS<->SPI的片选
- 5向开关-IQR/CE<->模块的中断信号输出和模块控制引脚
- 复位按键<->RST
- IQR<->模块中断信号输出 如果5向开关关闭可以将焊盘飞线到线要的引脚
- CE<->模块控制引脚 如果5向开关关闭可以将焊盘飞线到线要的引脚
PinOut
注:NC不连接,3V3为供电电压,RST为底板复位连接复位按键
使用教程
准备
- 硬件
- 2 x ESP32控制板
- 2 x FireBeetle Covers-NRF24L01 Radio模块
- 软件
- Arduino IDE (根据能够使用的Arduino版本来选择,不要盲目追求最新版本), 点击下载Arduino IDE
- 请先下载FireBeetle Covers-NRF24L01 Radio库 如何安装库文件,点击链接
不使用IRQ收发数据
- 将下列程序下载到两块插有FireBeetle Covers-NRF24L01 Radio的ESP32控制板上。
- 发送与接收Hello Word!的示例
- 根据程序里的设置,将拨码开关CE选择为D6,CS选择为D5
#include <SPI.h> #include <DFRobot_NRF24L01.h> DFRobot_NRF24L01 MyNrf; void setup(){ Serial.begin(9600); MyNrf.spi = &MirfHardwareSpi; #if defined ARDUINO_ESP32_DEV || defined ARDUINO_ARCH_FIREBEETLE8266 MyNrf.NRF24L01_Gpio_Init(D6,D5); /*CE = D6, CS = D5*/ #else MyNrf.NRF24L01_Gpio_Init(6,5); /*CE = 6, CS = 5*/ #endif while(!MyNrf.NRF24L01_check()){ Serial.println("RF24L01 is not find !..."); delay(1000); } MyNrf.NRF24L01_Init(); MyNrf.NRF24L01_Set_Mode(MODE_RX); } void loop(){ uint8_t data[32],len = 0; if(Serial.available()){ while(Serial.available()) Serial.read(); MyNrf.NRF24L01_Set_Mode(MODE_TX); delay(50); MyNrf.send((uint8_t *)"Hello Word!", 11); while(MyNrf.isSending()) delay(10); MyNrf.NRF24L01_Set_Mode(MODE_RX); delay(50); } if(!MyNrf.isSending() && MyNrf.dataReady()){ len = MyNrf.getData(data); int i; String Temp; for (i = 0; i < len; i++) { Temp += char(data[i]); } Serial.println(Temp); } } |
- 程序功能:通过检测串口是否有收到数据,如果串口收到数据,则通过NRF24L01发送Hello Word!。NRF24L01将收到数据打印到串口。
- 函数功能:
- 创建一个NRF24L01对象
DFRobot_NRF24L01 MyNrf
- 初始化NRF24L01的CE和CS引脚
NRF24L01_Gpio_Init(uint8_t CE,uint8_t CS)
- 检测是否检测到NRF24L01。
NRF24L01_check()
- 初始化NRF24L01
NRF24L01_Init();
- 设置NRF24L01的模式为接收模式
NRF24L01_Set_Mode(MODE_RX)
- 判断NRF24L01是否还在发送数据
isSending()
- 判断NRF24L01是否接收到数据
dataReady()
- 获取NRF24L01接收到的数据
getData((uint8_t *) data)
使用IRQ进行收发数据
- 将下列两个程序分别下载到两块ESP32控制板上(第一个为MASTER程序,第二个为SLAVE程序)
- 使用中断进行收发数据
- 根据程序里的设置,将拨码开关CE选择为D6,CS选择为D5,IRQ选择D2
#include <SPI.h> #include <DFRobot_NRF24L01.h> DFRobot_NRF24L01 MyNrf; void callback(){ uint8_t data[32],len = 0; if(MyNrf.NRF24L01_Get_Mode() == MODE_RX){ len = MyNrf.getData(data); int i; String Temp; for (i = 0; i < len; i++) { Temp += char(data[i]); } Serial.println(Temp); } } void setup(){ Serial.begin(9600); MyNrf.spi = &MirfHardwareSpi; #if defined ARDUINO_ESP32_DEV || defined ARDUINO_ARCH_FIREBEETLE8266 MyNrf.NRF24L01_Gpio_Init(D6,D5); /*CE = D6, CS = D5*/ MyNrf.NRF24L01_Set_IRQ(D2,callback); #else MyNrf.NRF24L01_Gpio_Init(6,5); /*CE = 6, CS = 5*/ MyNrf.NRF24L01_Set_IRQ(2,callback); #endif while(!MyNrf.NRF24L01_check()){ Serial.println("RF24L01 is not find !..."); delay(1000); } MyNrf.NRF24L01_Init(); MyNrf.NRF24L01_Set_Speed(SPEED_250K); MyNrf.NRF24L01_Set_Power(POWER_F0DBM); MyNrf.NRF24L01_Set_Mode(MODE_RX); MyNrf.NRF24L01_Set_RxAddr((uint8_t *)"mast1",5); } void loop(){ uint8_t data[32],len = 0; if(Serial.available()){ while(Serial.available()){ if(Serial.read() == '1'){ MyNrf.NRF24L01_Set_TxAddr((uint8_t *)"recv1",5); }else{ MyNrf.NRF24L01_Set_TxAddr((uint8_t *)"recv2",5); } } MyNrf.NRF24L01_Set_Mode(MODE_TX); delay(50); MyNrf.send((uint8_t *)"I'M MASTER 1", 12); while(MyNrf.isSending()) delay(10); MyNrf.NRF24L01_Set_Mode(MODE_RX); MyNrf.NRF24L01_Set_RxAddr((uint8_t *)"mast1",5); } } |
- 程序功能,该程序是实现了用NRF24L01作为主设备,可以分别给接收地址为recv1或recv2的从设备发送数据。串口接收到"1"就给recev1“I‘M MASTER 1”。接收到其他的数据就给rece2发送“I‘M MASTER 1”
#include <SPI.h> #include <DFRobot_NRF24L01.h> DFRobot_NRF24L01 MyNrf; void callback(){ uint8_t data[32],len = 0; if(MyNrf.NRF24L01_Get_Mode() == MODE_RX){ len = MyNrf.getData(data); int i; String Temp; for (i = 0; i < len; i++) { Temp += char(data[i]); } Serial.println(Temp); } } void setup(){ Serial.begin(9600); MyNrf.spi = &MirfHardwareSpi; #if defined ARDUINO_ESP32_DEV || defined ARDUINO_ARCH_FIREBEETLE8266 MyNrf.NRF24L01_Gpio_Init(D6,D5); /*CE = D6, CS = D5*/ MyNrf.NRF24L01_Set_IRQ(D2,callback); /*Set interrupt io port and callback function*/ #else MyNrf.NRF24L01_Gpio_Init(6,5); /*CE = 6, CS = 5*/ MyNrf.NRF24L01_Set_IRQ(2,callback); /*Set interrupt io port and callback function*/ #endif while(!MyNrf.NRF24L01_check()){ Serial.println("RF24L01 is not find !..."); delay(1000); } MyNrf.NRF24L01_Init(); MyNrf.NRF24L01_Set_Speed(SPEED_250K); MyNrf.NRF24L01_Set_Power(POWER_F0DBM); MyNrf.NRF24L01_Set_Mode(MODE_RX); MyNrf.NRF24L01_Set_RxAddr((uint8_t *)"recv1",5); } void loop(){ uint8_t data[32],len = 0; if(Serial.available()){ while(Serial.available()) Serial.read(); MyNrf.NRF24L01_Set_TxAddr((uint8_t *)"mast1",5); MyNrf.NRF24L01_Set_Mode(MODE_TX); delay(50); MyNrf.send((uint8_t *)"I'M SLAVE 1!", 11); while(MyNrf.isSending()) delay(10); MyNrf.NRF24L01_Set_Mode(MODE_RX); MyNrf.NRF24L01_Set_RxAddr((uint8_t *)"recv1",5); } } |
- 程序功能,该程序是实现了用NRF24L01作为从设备,当串口有数据时,给MASTER发送“I'M SLAVE 1”,当接收到数据时,将接收的数据打印到串口上。
常见问题
还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。
更多资料
- [原理图]
- [元件布局图]