Gravity: UART A6 GSM & GPRS Module

简介

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

FireBeetle Covers-NRF24L01 Radio尺寸图

功能示意图

Fig2: FireBeetle Covers-NRF24L01 Radio 无线模块

  • 5向开关-CS<->SPI的片选
  • 5向开关-IQR/CE<->模块的中断信号输出和模块控制引脚
  • 复位按键<->RST
  • IQR<->模块中断信号输出 如果5向开关关闭可以将焊盘飞线到线要的引脚
  • CE<->模块控制引脚 如果5向开关关闭可以将焊盘飞线到线要的引脚

PinOut

Fig3:FireBeetle Covers-NRF24L01 Radio Pinout

warning_yellow.png
注:NC不连接,3V3为供电电压,RST为底板复位连接复位按键

使用教程

准备

不使用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或者论坛联系我们!

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

更多资料

  • [原理图]
  • [元件布局图]

DFshopping_car1.png [Link DFRobot商城购买链接]