您当前的位置:首页 > 电子 > 无线/电,信号与通信

NRF24L01多通道通讯

时间:11-20来源:作者:点击数:

nRF24L01是一款工作在2.4~2.5GHz世界通用ISM频段的单片无线收发器芯片。

NRF24L01单通道实现通讯很简单,只要收发方地址设置正确,就能正常通讯。

但是NRF24L01多通道通信,有很多误区。官网的数据手册描述的也是模糊不清,经过我不断的调试和收集资料,有了点小成果。

一:NRF24L01支持多通道收发

对于这个多通道有很多理解,(特别和啊海的理解冲突),现在实验证明:NRF24L01只有通道0可以发射数据和接收,通道12345只能接收数据。

而且通道2345的高字节bit39~8和地址1共用。设置为发送模式时不需要选择通道,因为硬件默认设置发送模式下为通道0发送。

正常通讯的结构是6个发射机发数据给1个接收机接收。

二:RX --TX地址设置

一个芯片最多可以设置6个接收地址。 所以多对一发送比较简单。 但是想要一对多发送的话就只能一个一个发送了。nRF24L01配置为接收模式时可以接收6路不同地址,相同频率的数据 每个数据通道拥有自己的地址, 并且可以通过寄存器来进行分别配置-。 每一个数据通道的地址是通过寄存器RX_ADDR_Px来配置的,正常通讯情况下不允许不同的数据通道设置完全相同的地址。

u8 TX_ADDRESS0[TX_ADR_WIDTH]={0x00,0xc2,0xc2,0xc2,0xc2};

//发送地址(地址要和接收通道地址一致)

u8 RX_ADDRESS0[RX_ADR_WIDTH]={0x00,0xc2,0xc2,0xc2,0xc2};

//接收0通道地址(地址要和发射地址一致)

u8 RX_ADDRESS1[RX_ADR_WIDTH]={0x01,0xc2,0xc2,0xc2,0xc2};//接收1通道地址

u8 RX_ADDRESS2[RX_ADR_WIDTH]={0x02,0xc2,0xc2,0xc2,0xc2,};//接收2通道地址

u8 RX_ADDRESS3[RX_ADR_WIDTH]={0x03,0xc2,0xc2,0xc2,0xc2,};//接收3通道地址

u8 RX_ADDRESS4[RX_ADR_WIDTH]={0x04,0xc2,0xc2,0xc2,0xc2,};//接收4通道地址

u8 RX_ADDRESS5[RX_ADR_WIDTH]={0x05,0xc2,0xc2,0xc2,0xc2}; //接收5通道地址

上面地址标记为蓝色的可以可以随便修改, 其他的被固化了, 不能修改, 写地址时是低位先写要想成功通讯的条件:

1接收地址和发射地址必须一致

2无线模块0x05寄存器的值必须一致(发射/接收这2模块)

3无线模块从0x00寄存器往后的(各个bit位的功能)去看下手册

三:多个NRF24L01组网

正常情况下,NRF24L01只能一对6进行通信, 如果超过6个模块进行通信就无法实现。

但是可以通过轮询来区分:

比如一个空间内要实现100个温度实时监测,就可以主机用轮询的方式来进行通信,从机地址都可以设置一样, 通过主机给从机发命令, 让指定从机发送数据回来。 在同一时间内只能是一个从机和主机进行通信,因为多个节点同时发数据有问题,会造成24L01芯片死机(我调试时碰到过)。

在用STM32F103ZET6板子调试时,发现24L01的几个问题:

1.作为发送时,和容易出现发送-----但是不判断返回值强行发送却 能发送成功。

2、无论发送与接收,数据传输速率很低,实时性很差,反应很迟钝。

3、无论发送与接收,稳定性很差,模块时而检测到时而检测不到;时而接受到数据,时而 接收不到数据----不清楚是代码问题还是硬件问题,个人觉得是硬件问题。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐