天线|RF射频
直播中

施稚惇

7年用户 168经验值
私信 关注
[问答]

6个NRF24L01如何实现1对4对1 的实时通信?

NRF1作为 发送端 发送数据 给 作为接收端的4个NRF(2、3、4、5) 然后这4个NRF(2、3、4、5)作为发送端发送数据给 作为接收端的NRF6。
查阅了一些资料后,一知半解。
我把各个NRF24L01模块的地址分别设为(忽略前32位地址)
NRF1:TX  0X0A
          RX  0X0A
NRF2: TX   0XA0
         RX0  0XA0
         RX1  0X0A   //同NRF1的发送地址
NRF3: TX   0XB0
         RX0  0XB0
         RX1  0X0A   //同NRF1的发送地址
NRF4 NRF5 类似
NRF6: TX   0XA0   
         RX0  0XA0   //同NRF2的发送地址
         RX1  0XB0  //同NRF3的发送地址         RX2  0XC0  //同NRF4的发送地址
         RX3  0XD0  //同NRF5的发送地址
具体代码如下,不知道这样设置是否能够实现我要的功能  或者该怎么配置才可以实现
还有一个问题是。NRF6如何同时接收4个NRF发送的数据。我现在是用4个NRF24L01_RxPacket(tem_buf)函数来按顺序接收(4个发送端用延时配置为顺序发送),没有测试过不知道可不可行
想知道 有没有 可以同时处理要接收到4个数据并辨别为哪个通道后保存到不同的字符串里。
[AppleScript] 纯文本查看 复制代码
//NRF1 代码const u8 TX_ADDRESS[TX_ADR_WIDTH]={0x0A,0x43,0x10,0x10,0x01}; //发送地址const u8 RX_ADDRESS[RX_ADR_WIDTH]={0x0A,0x43,0x10,0x10,0x01}; //接收地址void NRF24L01_RX_Mode(void){NRF24L01_CE=0;    NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址    NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x01);    //使能通道0的自动应答      NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01);//使能通道0的接收地址     NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40);    //设置RF通信频率    NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度       NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启     NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG, 0x0f);//配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式   NRF24L01_CE = 1; //CE为高,进入接收模式 } //该函数初始化NRF24L01到TX模式//设置TX地址,写TX数据宽度,设置RX自动应答的地址,填充TX发送数据,选择RF频道,波特率和LNA HCURR//PWR_UP,CRC使能//当CE变高后,即进入RX模式,并可以接收数据了   //CE为高大于10us,则启动发送. void NRF24L01_TX_Mode(void){ NRF24L01_CE=0;      NRF24L01_Write_Buf(NRF_WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址   NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH); //设置TX节点地址,主要为了使能ACK    NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x01);     //使能通道0的自动应答      NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01); //使能通道0的接收地址    NRF24L01_Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40);       //设置RF通道为40  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f);  //设置TX发射参数,0db增益,2Mbps,低噪声增益开启     NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG,0x0e);    //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断NRF24L01_CE=1;//CE为高,10us后启动发送}
[AppleScript] 纯文本查看 复制代码
//NRF2 代码(NRF3 NRF4 NRF5 )类似const u8 TX_ADDRESS[TX_ADR_WIDTH]={0xA0,0x43,0x10,0x10,0x01}; //发送地址const u8 RX_ADDRESS0[RX_ADR_WIDTH]={0xA0,0x43,0x10,0x10,0x01}; //接收地址0const u8 RX_ADDRESS1[RX_ADR_WIDTH]={0x0A,0x43,0x10,0x10,0x01}; //接收地址1void NRF24L01_RX_Mode(void){NRF24L01_CE=0;    NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS0,RX_ADR_WIDTH);//写RX0节点地址  NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P1,(u8*)RX_ADDRESS1,RX_ADR_WIDTH);//写RX1节点地址  NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x03);    //使能通道0的自动应答      NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x03);//使能通道0的接收地址     NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40);    //设置RF通信频率    NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P1,RX_PLOAD_WIDTH);//选择通道1的有效数据宽度  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启     NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG, 0x0f);//配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式   NRF24L01_CE = 1; //CE为高,进入接收模式 } //该函数初始化NRF24L01到TX模式//设置TX地址,写TX数据宽度,设置RX自动应答的地址,填充TX发送数据,选择RF频道,波特率和LNA HCURR//PWR_UP,CRC使能//当CE变高后,即进入RX模式,并可以接收数据了   //CE为高大于10us,则启动发送. void NRF24L01_TX_Mode(void){ NRF24L01_CE=0;      NRF24L01_Write_Buf(NRF_WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址   NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS0,RX_ADR_WIDTH); //设置TX节点地址,主要为了使能ACK    NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x03);     //使能通道0的自动应答      NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x03); //使能通道0的接收地址    NRF24L01_Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40);       //设置RF通道为40  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f);  //设置TX发射参数,0db增益,2Mbps,低噪声增益开启     NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG,0x0e);    //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断NRF24L01_CE=1;//CE为高,10us后启动发送}
[AppleScript] 纯文本查看 复制代码
//NRF6 代码const u8 TX_ADDRESS[TX_ADR_WIDTH]={0xA0,0x43,0x10,0x10,0x01}; //发送地址const u8 RX_ADDRESS0[RX_ADR_WIDTH]={0xA0,0x43,0x10,0x10,0x01}; //接收地址0 const u8 RX_ADDRESS1[RX_ADR_WIDTH]={0xB0,0x43,0x10,0x10,0x01}; //接收地址1 const u8 RX_ADDRESS2[RX_ADR_WIDTH]={0xC0,0x43,0x10,0x10,0x01}; //接收地址2 const u8 RX_ADDRESS3[RX_ADR_WIDTH]={0xD0,0x43,0x10,0x10,0x01}; //接收地址3 void NRF24L01_RX_Mode(void){NRF24L01_CE=0;    NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS0,RX_ADR_WIDTH);//写RX0节点地址  NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P1,(u8*)RX_ADDRESS1,RX_ADR_WIDTH);//写RX1节点地址NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P2,(u8*)RX_ADDRESS2,RX_ADR_WIDTH);//写RX2节点地址NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P3,(u8*)RX_ADDRESS3,RX_ADR_WIDTH);//写RX3节点地址  NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x0F);    //使能通道0的自动应答      NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x0F);//使能通道0的接收地址     NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40);    //设置RF通信频率    NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P1,RX_PLOAD_WIDTH);//选择通道1的有效数据宽度  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启     NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG, 0x0f);//配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式   NRF24L01_CE = 1; //CE为高,进入接收模式 } //该函数初始化NRF24L01到TX模式//设置TX地址,写TX数据宽度,设置RX自动应答的地址,填充TX发送数据,选择RF频道,波特率和LNA HCURR//PWR_UP,CRC使能//当CE变高后,即进入RX模式,并可以接收数据了   //CE为高大于10us,则启动发送. void NRF24L01_TX_Mode(void){ NRF24L01_CE=0;      NRF24L01_Write_Buf(NRF_WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址   NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS0,RX_ADR_WIDTH); //设置TX节点地址,主要为了使能ACK    NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x0F);     //使能通道0的自动应答      NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x0F); //使能通道0的接收地址    NRF24L01_Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40);       //设置RF通道为40  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f);  //设置TX发射参数,0db增益,2Mbps,低噪声增益开启     NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG,0x0e);    //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断NRF24L01_CE=1;//CE为高,10us后启动发送}
第一次发帖,望见谅。希望论坛里各位大神能帮我解决问题!

回帖(1)

吴桦

2020-7-25 11:23:20
参考下别人的吧:http://www.openedv.com/forum.php ... t=NRF24L01%2B%B6%E0
举报

更多回帖

发帖
×
20
完善资料,
赚取积分