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

PC端使用USB转nRF24L01模块。

【Arduino】 nRF24L01使用Mirf库 + 使用USB转nRF24L01 无线串口_第1张图片

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 。

【Arduino】 nRF24L01使用Mirf库 + 使用USB转nRF24L01 无线串口_第2张图片

【Arduino】 nRF24L01使用Mirf库 + 使用USB转nRF24L01 无线串口_第3张图片

/**
   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 
#include 
#include 
#include 

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没有配置。。。

【Arduino】 nRF24L01使用Mirf库 + 使用USB转nRF24L01 无线串口_第4张图片

【Arduino】 nRF24L01使用Mirf库 + 使用USB转nRF24L01 无线串口_第5张图片

【Arduino】 nRF24L01使用Mirf库 + 使用USB转nRF24L01 无线串口_第6张图片

 

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

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

【Arduino】 nRF24L01使用Mirf库 + 使用USB转nRF24L01 无线串口_第7张图片

修改为:

【Arduino】 nRF24L01使用Mirf库 + 使用USB转nRF24L01 无线串口_第8张图片

你可能感兴趣的:(arduino)