MCookie-nRF/zh

来自Microduino Wikipedia
502748957@qq.com讨论 | 贡献2018年12月18日 (二) 04:17的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索
NRF SHOW.jpg






mCookie-nRF

产品编号:XXXXXXX
Add-to-cart.jpg

mCookie-nRF24为一款高速嵌入式无线数传模块,具有信道多、通信稳定、发射功率可配置、具备低功率模式等优点。同时由于其自动重发功能,自动检测和重发丢失的数据包等功能,在制作无线应用时还可以通过软件代码对通信质量做保证。nRF模块在无线遥控、数据传输、报警系统、物联网等领域都有所应用。


技术规格


NRF24L01模块引脚名 Microduino引脚 功能
SCK D13 SPI总线时钟
SI D12 数据输入脚
SO D11 数据输出脚
CSN D10 SPI片选信 (程序中需要定义)
CE D9 RX 或TX 模式选择 (程序中需要定义)
  • 2.4GHz 全球开放ISM 频段,最大0dBm 发射功率,免许可证使用;
  • 低工作电压:1.9~3.6V低电压工作;
  • SMA天线座,可自己更换兼容天线;
  • 支持六路通道的数据接收;
  • 高速率:2Mbps,由于空中传输时间很短,极大的降低了无线传输中的碰撞现象(软件设置256Kbps、1Mbps或者2Mbps的空中传输速率);
  • 多频点:125 频点,满足多点通信和跳频通信需要;
  • 低功耗:当工作在应答模式通信时,快速的空中传输及启动时间,极大的降低了电流消耗。




技术细节

  • 低应用成本,链路层完全集成在模块上,非常便于开发;
  • 自动重发功能,自动检测和重发丢失的数据包,重发时间及重发次数可软件控制;
  • 自动存储未收到应答信号的数据包;
  • 自动应答功能,在收到有效数据后,模块自动发送应答信号,无须另行编程;
  • 可同时设置六路接收通道地址,可有选择性的打开接收通道;
  • 标准插针Dip2.54MM 间距接口,便于嵌入式应用;
  • 小巧、便宜、堆叠、开放;
  • 开源的硬件电路设计,与 Arduino 兼容的编程开发环境程;
  • 统一的 Microduino 接口规范,和丰富的外围模块,可方便、灵活的与其他符合 Microduino 接口规范的模块、传感器进行快速的连接和扩展;




主要元件



编程手册

Protocol_Reference



示例教程

1、将核心+模块和nRF通信模块堆叠在电池盒上。
2、将USB连接线一段插入电池盒,另一端连接PC电脑,并打开电池盒的电源开关。
3、准备另外一组同样的模块,分别作为发射端与接收端。

Tx

TX程序

// LICENSE: GPL v3 (http://www.gnu.org/licenses/gpl.html)
// ==============

/*
*nRF24 无线网络发送例程
*
*向接收器发送数据

*/
#include <RF24Network.h>

/* 硬件配置: nRF24模块使用SPI通讯外加9脚和10脚 */
RF24 radio(D9,D10);                 

RF24Network network(radio);          // Network uses that radio

const uint16_t this_node = 01;       // 本机地址
const uint16_t other_node = 00;      // 接收器的地址

const unsigned long interval = 2000; //ms  发送间隔2000ms

unsigned long last_sent;             // 记录发送时刻
unsigned long packets_sent;          // 记录发送次数


struct payload_t {                  // 数据的结构体、时间与计数值
  unsigned long ms;
  unsigned long counter;
};

void setup(void)
{
  Serial.begin(115200);
  Serial.println("RF24Network/examples/helloworld_tx/");
  radio.begin();
  //nRF24网络初始化, 使用频道90,本机地址01
  network.begin(/*channel*/ 90, /*node address*/ this_node); 
}

void loop() {
  network.update();                          // 网络更新,必要
  unsigned long now = millis();              //获取实时的运行时间,赋值给now
  if ( now - last_sent >= interval  )	  //减去上次发送的时间,若大于interval则发送,小于则				  //继续等待
  {
    last_sent = now;			//now赋值给last
    Serial.print("Sending...");  		//串口输出“sending”
    payload_t payload = { millis(), packets_sent++ };	 //发送实时运行时间与数据包序号,发送后序序					//号加一
    RF24NetworkHeader header(/*to node*/ other_node);
    bool ok = network.write(header,&payload,sizeof(payload));	//发送数据
    if (ok)
      Serial.println("ok.");
    else
      Serial.println("failed.");
  }
}
Tx


程序运行结果:发送端串口返回发送状态,每隔2秒发送一次。

  • 接收端程序
// LICENSE: GPL v3 (http://www.gnu.org/licenses/gpl.html)
// ==============

/*
*nRF24 无线网络接收例程
*
*监听发送器发射的数据,然后打印出来

*/

#include <RF24Network.h>

/* 硬件配置: nRF24模块使用SPI通讯外加9脚和10脚 */
RF24 radio(D9,D10);     

RF24Network network(radio);      
const uint16_t this_node = 00;    // 本机地址
const uint16_t other_node = 01;   // 发送器的地址

struct payload_t {                 // 数据的结构体
  unsigned long ms;
  unsigned long counter;
};


void setup(void)
{
  Serial.begin(115200);
  Serial.println("RF24Network/examples/helloworld_rx/");
 
  radio.begin();
  //nRF24网络初始化, 使用频道90,本机地址00
  network.begin(/*channel*/ 90, /*node address*/ this_node);
}

void loop(void){
  
  network.update();                  // 网络更新,必要

  while ( network.available() ) {     // 接收到数据
    
    RF24NetworkHeader header;        
    payload_t payload;
    network.read(header,&payload,sizeof(payload));  //读取数据
    Serial.print("Received packet #");
    Serial.print(payload.counter);
    Serial.print(" at ");
    Serial.println(payload.ms);
  }
}


Rx

程序运行结果:接收端串口返回数据包序号以及接收到时发送端的运行时间。
该示例实现了nRF24点对点通信,玩家若想自行更改程序可参照Microduino IDE中的示例套用格式即可。


应用



Q&A

  • 模块提供天线吗?
    • 提供
  • 如何工作,软件实现还是有硬件完成?
    • 自动重发功能,自动检测并重新发送丢失的数据包。重传时间和重传次数,可以通过软件来控制;
    • 自动存储未收到应答信号的数据包;
    • 自动回复功能,收到有效数据后,模块将自动发送应答信号,无需再编程;
  • 模块上支持5V 到3.3V 降压转换吗?
    • 在Core 和Core+ 上不支持DC-DC 5V->3.3V的转换,用户可以叠加BM,USBTTL,DUO,UNO 来完成这个功能。
  • 如何控制该模块运行在低功耗模式或者直接关掉?
    • 可以使用Arduino 库提供的函数 powerDown() 函数。
  • 此模块的工作范围?
    • 空阔地域大约100米。



图库

mCookie-BT Front
mCookie-BT Back

返回mCookie产品系列页面