【Arduino】 nRF24L01使用Mirf库 + 使用USB转nRF24L01 无线串口

PC端使用USB转nRF24L01模块。

Arduino端连接一个nRF24L01。

如果直接用Arduino库提供的例程,PC端是不会正常接收的。因为模块默认设置的参数是16位CRC检验,通讯频率是2.40GHz,即通道0,本地地址是FF FF FF FF FF。

Arduino的程序里默认通讯通道1,而校验方式默认是8位CRC且不能修改。

所以要把PC端的nRF设置为8位校验位,发送目标地址设置为FF FF FF FF FF,Arduino端设置通信通道为0 。

/**
   A Mirf example to test the latency between two Ardunio.

   Pins:
   Hardware SPI:
   MISO -> 12
   MOSI -> 11
   SCK -> 13

   Configurable:
   CE -> 8
   CSN -> 7

   Note: To see best case latency comment out all Serial.println
   statements not displaying the result and load
   'ping_server_interupt' on the server.
*/

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

byte TXADDR[5] = {0xff, 0xff, 0xff, 0xff, 0xff};

void setup() {
  Serial.begin(115200);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, INPUT);
  pinMode(7, INPUT);
  pinMode(6, INPUT);
  pinMode(5, INPUT);
  pinMode(4, INPUT);
  pinMode(3, INPUT);

  //根据硬件电路使用的引脚
  Mirf.cePin = 10;    //CE
  Mirf.csnPin = 9;    //CSN
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();

  //设置发送目标  目标地址即接收端的自身地址
  Mirf.setTADDR((byte *)TXADDR);
  
  Mirf.payload = 32; //32字节payload
  Mirf.channel = 0;   //2.4GHz
  Mirf.config();
  
  Serial.println("Beginning ... ");
}

uint8_t data_buff[32];

void loop() {
  //读取传感器
  data_buff[0] = 10;
  data_buff[1] = '{';
  data_buff[2] = digitalRead(8)+'0';
  data_buff[3] = digitalRead(7)+'0';
  data_buff[4] = digitalRead(6)+'0';
  data_buff[5] = digitalRead(5)+'0';
  data_buff[6] = digitalRead(4)+'0';
  data_buff[7] = digitalRead(3)+'0';
  data_buff[8] = '}';
  data_buff[9] = '\r';
  data_buff[10] = '\n';
  
  //设置发送目标
  Mirf.setTADDR((byte*)TXADDR);
  //无线传输发送
  Mirf.send((byte*)data_buff);
  //等待发送完成
  while (Mirf.isSending()) {
  }
  
  for (int i = 1; i < 10; i++)
  {
    Serial.print(data_buff[i]);
  }
  Serial.println();
  //延时一会儿
  delay(100);
}

 

解决过程:

从Mirf的库文件中可以看到,是使用的硬件SPI,所以SCK MISO MOSI三个引脚不能修改,而另外两个引脚CE CSN可以随意更改引脚,此处为接线方便,引脚连接如下。

   Pins:
   Hardware SPI:
   MISO -> 12
   MOSI -> 11
   SCK -> 13

   Configurable:
   CE -> 10
   CSN -> 9

从库文件中可以看到默认通道为1,payload为16位,而设置CRC校验的寄存器CONFIG没有配置。。。

 

可以看到USB转nRF模块上,有两个芯片,一个是常见的USB转串口芯片CH340,另一个应该一个STC的单片机芯片,负责控制nRF24L01,并串口输出给CH340。

模块的资料里提供了一个上位机软件,用来配置模块上的nRF的参数,默认参数如下。

修改为:

  • 8
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值