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的参数,默认参数如下。
修改为: