arduino pro mini NRF2401使用

本文介绍了如何使用Arduino和nRF24L01+模块进行无线通信。通过简单的代码封装,实现了数据的发送与接收功能。文中详细解释了初始化配置、地址设置及数据传输过程。

arduino一般自带 Mirf 库,没有的话自行下载。

我这里简单封装方便使用,就不介绍怎么添加库了。代码比较简单,就不多说了。

h文件

#ifndef M_NRF_H
#define M_NRF_H
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

class m_nrf{
  public:
  void TX_init();
  void RX_init();
  void sends(unsigned char* buf);
  void recvs(unsigned char* buf);
    
};

#endif

c文件

#include "m_nrf.h"
void m_nrf::TX_init()
{
    /*
   * CE 6
   * CS 10
   * MOSI 11    三路spi是官方驱动固定的,CE和CS可以自己修改
   * MISO 12
   * SCK 13
   */
  Mirf.cePin = 6;    //设置CE引脚为D6
  Mirf.csnPin = 10; //设置CS引脚为D10
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  Mirf.setRADDR((byte *)"ABCDE"); //设置自己的地址(发送端地址),使用5个字符
  Mirf.payload = 32;              //传输的字节
  Mirf.channel = 90;              //设置所用信道  
  Mirf.config();
  Mirf.setTADDR((byte *)"HES_A");           //设置接收端地址

}
void m_nrf::RX_init()
{
  /*
   * CE 8
   * CS 7
   * MOSI 11    三路spi是官方驱动固定的,CE和CS可以自己修改
   * MISO 12
   * SCK 13
   */
  
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  Mirf.setRADDR((byte *)"HES_A"); //设置自己的地址(接收端地址),使用5个字符
  Mirf.payload = 32;
  Mirf.channel = 90;   //设置使用的信道
  Mirf.config();
}
void m_nrf::sends(unsigned char* buf)
{
  Mirf.send(buf);                //发送指令,发送随机数value
  while (Mirf.isSending()) delay(1);        //直到发送成功,退出循环
}
void m_nrf::recvs(unsigned char* buf)
{
  if (Mirf.dataReady()) { //当接收到程序,
    Mirf.getData(buf);
  }
}


nRF24L01 介绍: nRF24L01是一款工作在 2.4~2.5GHz 世界通用ISM频段的单片无线收发器芯片,输出功率、频道选择和协议的设置可以通过SPI接口进行设置。有极低的电流消耗,当工作在发射模式下发射功率为-6dBm时电流消耗为9.0mA,接收模式时为12.3mA。掉电模式和待机模式下电流消耗更低。 nRF24L01参考数据: 供电电压:1.9 V~3.6V; 最大发射功率:0 dBm; 最大数据传输率:2000 kbps; 发射模式下电流消耗(0dBm时):11.3 mA; 接收模式下电流消耗(2000kbps):12.3 mA; 接收模式数据传输率为1000kbps下的 灵敏度:-85 dBm; 掉电模式下电流消耗:900 nA。 淘宝上面有两种nRF24L01模块,一种是单纯的nRF24L01模块,号称传输距离250m的,几块钱就有交易;另外一种是NRF24L01+PA+LNA模块,包含放大,号称可以传输1000m,价格几十块。实际距离视地形和障碍物而定,是否够远只能通过试用确定。 单纯nRF24L01模块做示例: nRF24L01与Arduino UNO硬件连接 此模块是使用SPI方式连接,在标准SPI口基础增加CE和CSN引脚: nRF24L01 Arduino UNO VCC <-> 3.3V GND <-> GND CE <-> D9 CSN <-> D10 MOSI<-> D11 MISO<-> D12 SCK <-> D13 IRQ <-> 不接 还有就是nRF24L01属于对传模块。每块芯片既是发射器,也是接收器。所以一般来说,要使用两块nRF24L01+两块Arduino才能进行测试。 实验1 将Sender机A0的AD转换值无线发送到Receiver机,Sender机(A0端与电源两端接一个电位器,阻值随意,一般1k~100k均可) 原理图如截图: 代码: 首先需要安装Mirf,可以在https://playground.arduino.cc/InterfacingWithHardware/Nrf24L01下载或者本文附件下载。 实验2 将上述的数据绘图表。修改一下输出格式,然后用现成的串口图表软件显示出来。详见附件内容操作说明文档。 上位机: 直接用现成软件比如这个串口猎人。配置如图。依照图片顺序配置成截图一样即可。 附件内容截图:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值