NRF24L01无线模块六通道数据收发实现---关键参数配置说明

本文主要是介绍NRF24L01无线模块六通道数据收发实现---关键参数配置说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

做一个设计,需要一个无线主机负责接收数据,六个无线从机负责采集温度数据,并将数据发送至主机;

数据传输方案有两种:1.轮询式,即主机轮询给各从机发送查询指令,收到指令的从机会将温度数据发送至主机,主机接收到该从机数据或超时未收到,则向下一个从机发送查询指令,直到查询完毕;     缺点:对主机采集数据频率高的不适用,这种采集方式花费时间较长,适合从机较少的系统中;

2.不同通道传输,各通道互不影响: 24L01模块设置了6个不同的数据通道,这些通道共用一个通信频率,但传输数据互不影响;可以最多六个通道同时传输数据,这样可以把六个从机设置为六个不同的数据通道,主机分别接收不同数据通道的数据即可;    优点: 实时通信性强;  缺点:仅六路通道;

通道地址设置

      每一个数据通道使用不同的地址但是共用相同的频道,也就是说6个不同的nRF24L01设置为发送模式后可以与同一个设置为接收模式的nRF24L01进行通讯,而设置为接收模式的nRF24L01可以对这6个发射端进行识别,数据通道0是唯一的一个可以配置为40位自身地址的数据通道,1~5数据通道都为8位自身地址和32位公用地址。

直接贴代码来看24L01配置

无线主机配置:

const uchar ip0[5]={'0','a','d','d','r'};//接收地址0  
const uchar ip1[5]={'1','a','d','d','r'};//接收地址1                                   
const uchar ip2[5]={'2','a','d','d','r'};//接收地址2

const uchar ip3[5]={'3','a','d','d','r'};//接收地址3

const uchar ip4[5]={'4','a','d','d','r'};//接收地址4

const uchar ip5[5]={'5','a','d','d','r'};//接收地址5


 SPI_RW_Reg(WRITE_REG + EN_AA, 0x3f);        //应答设置0x3f代表543210应答
 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x3f);    // 使能6个通道应答
 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, (uchar*)ip0, 5);  // 设置接收通道0地址
 SPI_RW_Reg(WRITE_REG+RX_PW_P0, RX_PLOAD_WIDTH);   //设置接收通道0地址宽度
 SPI_Write_Buf(WRITE_REG + RX_ADDR_P1, (uchar*)ip1, 1);  // RX_Addr0 same as TX_Adr for Auto.Ack
 SPI_RW_Reg(WRITE_REG+RX_PW_P1, RX_PLOAD_WIDTH);   //Number of bytes in RX payload in data pipe 0 
 SPI_Write_Buf(WRITE_REG + RX_ADDR_P2, (uchar*)ip2, 1);  // RX_Addr0 same as TX_Adr for Auto.Ack
 SPI_RW_Reg(WRITE_REG+RX_PW_P2, RX_PLOAD_WIDTH);   //设置通道2地址宽度

 SPI_Write_Buf(WRITE_REG + RX_ADDR_P3, (uchar*)ip3, 1);  // 设置接收通道3地址
 SPI_RW_Reg(WRITE_REG+RX_PW_P3, RX_PLOAD_WIDTH);   //设置通道3地址宽度

 SPI_Write_Buf(WRITE_REG + RX_ADDR_P4, (uchar*)ip4, 1);  // 设置接收通道4地址
 SPI_RW_Reg(WRITE_REG+RX_PW_P4, RX_PLOAD_WIDTH);   //设置通道4地址宽度

 SPI_Write_Buf(WRITE_REG + RX_ADDR_P5, (uchar*)ip5, 1);  // 设置接收通道5地址
 SPI_RW_Reg(WRITE_REG+RX_PW_P5, RX_PLOAD_WIDTH);   //设置通道5地址宽度

//以上为主机模块的关键配置,其他功率,频道配置,主从机对应即可。

主机接收区别各通道数据:

读取寄存器第一字节数据到careg[0],这个值就是通道地址值

以51单片机外部中断1为24l01接收数据中断

void ISR_int1(void) interrupt 2  //接受中断用于接受发送过来的数据
{
  static uchar num1,num2,num3;  
sta=SPI_Read(STATUS);// 准备读接收寄存器的第一字节
if(RX_DR) //如果收到数据
{  
SPI_Read_Buf(0x07,careg,1);
careg[0]=(careg[0]&0x0e)>>1; //读取寄存器第一字节数据到careg[0],这个值就是通道地址值
SPI_Read_Buf(RD_RX_PLOAD,RxBuf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
if(careg[0]==0) //判断为第0通道数据
  {
//接收数据 
  }     
       if(careg[0]==1)  //判断为第1通道数据
  {
     //接收数据   
  }    
     if(careg[0]==2) //判断为第2通道数据
  {
   //接收数据 
  }           
  if(careg[0]==3) //判断为第3通道数据
   {
  //接收数据 
   }           

  if(careg[0]==4) //判断为第4通道数据
   {
  //接收数据 
   }           

  if(careg[0]==5) //判断为第5通道数据
   {
  //接收数据 
   }           
 
}
if(MAX_RT)
{
SPI_RW_Reg(FLUSH_RX,0);

}
SPI_RW_Reg(WRITE_REG+STATUS,sta);// clear RX_DR or TX_DS or MAX_RT interrupt flag
  
}


无线各从机发射配置:

第0通道

 SPI_Write_Buf(WRITE_REG + TX_ADDR, (uchar*)ip0,5);     // 发射地址
 SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);        //使能通道0 
 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);    // 使能通道0地址
 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, (uchar*)ip0,5);  //通道0地址设置 还作为应答通道

第1通道

 SPI_Write_Buf(WRITE_REG + TX_ADDR, (uchar*)ip1,1);     // 发射地址
 SPI_RW_Reg(WRITE_REG + EN_AA, 0x03);        //使能通道0,1 
 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x03);    // 使能通道0,1地址
 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, (uchar*)ip1,5);  //通道0地址设置 和发射地址必须相同 还作为应答通道


第2通道

 SPI_Write_Buf(WRITE_REG + TX_ADDR, (uchar*)ip2,1);     // 发射地址
 SPI_RW_Reg(WRITE_REG + EN_AA, 0x05);        //使能通道0,2
 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x05);    // 使能通道0,2地址
 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, (uchar*)ip2,5);  //通道0地址设置 和发射地址必须相同 还作为应答通道


第3通道

 SPI_Write_Buf(WRITE_REG + TX_ADDR, (uchar*)ip3,1);     // 发射地址
 SPI_RW_Reg(WRITE_REG + EN_AA, 0x09);        //使能通道0,3 
 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x09);    // 使能通道0,3地址
 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, (uchar*)ip3,5);  //通道0地址设置 和发射地址必须相同 还作为应答通道


第4通道

 SPI_Write_Buf(WRITE_REG + TX_ADDR, (uchar*)ip4,1);     // 发射地址
 SPI_RW_Reg(WRITE_REG + EN_AA, 0x11);        //使能通道0,4
 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x11);    // 使能通道0,4地址
 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, (uchar*)ip4,5);  //通道0地址设置 和发射地址必须相同 还作为应答通道


第5通道

 SPI_Write_Buf(WRITE_REG + TX_ADDR, (uchar*)ip5,1);     // 发射地址
 SPI_RW_Reg(WRITE_REG + EN_AA, 0x21);        //使能通道0,5 
 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x21);    // 使能通道0,5地址
 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, (uchar*)ip5,5);  //通道0地址设置 和发射地址必须相同 还作为应答通道


//以上为各从机模块的关键配置,其他功率,频道配置,主从机对应即可。


 
注意:nRF24L01在确认收到数据后记录地址并以此地址为目标地址发送应答信号在发送端数据通道0被用做接收应答信号因此数据通道0的接收地址要与发送端地址相等以确保接收到正确的应答信号;


这篇关于NRF24L01无线模块六通道数据收发实现---关键参数配置说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/661347

相关文章

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Debian系和Redhat系防火墙配置方式

《Debian系和Redhat系防火墙配置方式》文章对比了Debian系UFW和Redhat系Firewalld防火墙的安装、启用禁用、端口管理、规则查看及注意事项,强调SSH端口需开放、规则持久化,... 目录Debian系UFW防火墙1. 安装2. 启用与禁用3. 基本命令4. 注意事项5. 示例配置R

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Redis MCP 安装与配置指南

《RedisMCP安装与配置指南》本文将详细介绍如何安装和配置RedisMCP,包括快速启动、源码安装、Docker安装、以及相关的配置参数和环境变量设置,感兴趣的朋友一起看看吧... 目录一、Redis MCP 简介二、安www.chinasem.cn装 Redis MCP 服务2.1 快速启动(推荐)2.