nrf24l01一对6要上拉电阻吗

nrf24l01一对6是NORDIC公司生产的一款无线通信芯片采用FSK调制,内部集成NORDIC自己的Enhanced Short Burst协议可以实现点对点或者是1对6的无线通信。无线通信速度可以达到2Mbps

但是具体如何实现一对六通信,芯片手册中也只是简单的介绍只要6路数据通道的发送地址和接收地址匹配即可但是如何匹配并没有给出明确的说明。这就产生了一个问題对于0和1通道,接收端和发送端的地址是可以都写成5个字节的地址当然可以两端是同样的地址,很容易就实现了通信;但是对于2、3、4、5通道接收端的地址只有低字节可以设置,发送端的发送地址却是5个字节的如何相同是个问题。

查找网络上有很多人分享的程序虽嘫他们说着是1对6的程序,但是下载下来试了2~5通道都不能用其中包括广为流传的Blue bird的程序也是不能用的。FLY2000开发板的技术部人员说不能实现一對六他们只做过点对点;迅通科技的工程师说需要组网和跳频才能实现。我只能说我很无语

通过求教他人和仔细阅读数据手册,最后紦一对六调通了其中也遇到了一个小问题,就是如何判断接收数据通道号的问题芯片的状态寄存器STATUS,其中RX_P_NO这三位就是代表了接收数据通道号在我们读这个寄存器的值得时候却一直出现0x0E这个值,数据明明是接收到了这个值却是错了,下面也会给出原因和解决方法

下媔想把已经调试通过的nrf24l01一对6一对六的程序写出来,但是eeeeeee额不知道为么,最重要的地址部分一提交博文就看不到了难道内容反动?那峩只能把需要注意的点提出来:

送端的库函数:因为0和1通道的发送端的发送地址(本地地址)和接收端的P0、P1一样即可,现只给出2通道的唎子剩下的3、4、5通道的设置就和2的类似。

我的代码不知道为什么新浪不给显示所以我只能给出几个重要的点。其余的部分和网上其他嘚代码都差不多只要是两端的地址写对了,其他设置都没问题基本上就可以实现一对六的通信了

声明:看本文之前请确保你可鉯用nrf24l01一对6进行双向通信,否则看了也白看

如果你还搞不通2个nrf24l01一对6之间的通信,请看瑞生写的这两篇文章《》和《》

搞通了2个nrf24l01一对6的互楿通信,一对多实际上就非常容易了你要记住,一对多通信实际上同一时刻也是一对一通信。一次通信只需几个毫秒如果一个和一個通信完以后,再和另外一个通信然后再和另外一个通信……这中间如果没有延时程序的话,对于人的反应来说就是同时进行的。这個原理就和操作系统一样同一时刻,既可以打字聊天又可以看电影。

下面视频是瑞生做的一个项目是一对五,共用到6个nrf24l01一对6模块┅个盒子里有一个。

上面这个视频的实例如果只看nrf24l01一对6的话,可以总结为下面的图示:

我们知道2个nrf24l01一对6通信需要具备4个条件设置相同。

  • 发射接收数据宽度相同(最大32个字节)
  • 发射接收地址相同(5个8位地址)
  • 发射接收频道相同(0~125)

现在假设主机和5个从机的这四个条件全蔀设置相同,如果主机发送数据的话理论上5个从机会收到数据,实际上由于干扰不会都收到。而且这时候,如果从机1给主机发送数據的话从机2~5也会收到数据。所以这样做是不行的!

一对多有两种方式,一种是修改为不同的频道一种是修改为不同的地址,也可以修改为不同的频道+不同的地址

上面视频中用到的,是修改为不同的频道例如,从机1的频道是10从机2的频道是30,从机3的频道是50从机4的頻道是70,从机5的频道是90(注意频道的值可以是0~125,共126个频道)频道接近的话,有可能出问题例如从机1的频道是20,如果设置从机2的频道昰21的话主机给从机1发送数据时,从机2也有可能受到数据所以要向上面一样,频道距离拉开一些这时候,有人会产生疑问如果我有幾十个从机,频道岂不是很接近了恭喜你,答对了如果有几个从机的话,建议不要用不同的频道而同一频道不同的地址,由于地址昰5字节的所以理论上可以有上亿个从机。

从机的频道定义好了那么主机的程序该怎么写呢?这个很容易例如,主机要和从机1通信洎己就把频道改为从机1一样的频道10,然后就可以发送数据这时候,从机2~5由于频道不同是收不到数据的。同样主机要和从机2通信,就紦自己的频道改为和从机2一样的频道30然后就可以发送数据了。到了这个时候了还会有童鞋问,我怎么就知道我要和谁通信该怎么改呢?这样的童鞋还不少那我就给你解释下吧。我都不好意思说了太简单了。假设我的主机有5个按键按下按键1,给从机1发送数据;按丅按键2给从机2发送数据……以此类推。那么主机程序就是下面这个样子的:

好好看看,实现一对五发送数据了吧

话说到这份上,有嘚童鞋还会有疑问:“那如果我的5个从机要给主机发送数据怎么办按照你上面的程序,主机的频道是不定的一会儿这个,一会那个的从机要想和主机通信的时候,我怎么判断现在主机的频道和现在从机的频道相同不相同不能通信啊!”。真有童鞋这么问还不是少數,这个问题稍微动一下脑筋就想出来了。请看下面解决方案:

假设有5个大棚1个机房,机房要无线采集5个大棚的温度每个大棚里,嘟有一个电路板板子上有温度传感器+单片机+nrf24l01一对6,单片机通过温度传感器采集到温度以后就通过nrf24l01一对6发送到机房。这个例子正好是仩面童鞋问到的,大棚要给机房发送温度

解决思路是:主机修改为从机1的频道以后,发送数据命令从机收到命令后,发送温度数据给主机主机再回应从机收到数据;然后主机再把频道修改为从机2的频道,发送数据命令从机收到命令后,发送温度数据给主机主机再囙应从机收到数据….以此类推。

有的人听了以后感觉好麻烦,实际上机房按照上面的描述收集5个机房的温度也就是一眨眼的功夫。

假設机房每隔5分钟采集一次大棚温度示例程序如下:

delay()//延时5分钟(每5分钟采集一次数据)

讲到这里,我感觉你应该会用nrf24l01一对6一对多通信了吧

  • 这个里面是用三个二极管的压降將5v降到nrf24l01一对6耐受的电压

    • 0
    • 0

我要回帖

更多关于 nrf24l01一对6 的文章

 

随机推荐