简介
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
- [https://codeload.github.com/DFRobot/DFRobot_NRF24L01/zip/master请先下载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或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。 |
更多资料
- [原理图]
- [元件布局图]
[Link DFRobot商城购买链接]