NRF24L01 一对多通信方法程序详解
声明:看本文之前,请确保你可以用 NRF24L01 进行双向通信,否则看了也白看。
如果你还搞不通 2 个 NRF24L01 之间的通信,请看瑞生写的这两篇文章《新手如何
快速搞通 NRF24L01 通信》和《NRF24L01 中文资料_原理_程序详解》。
搞通了 2 个 NRF24L01 的互相通信,一对多实际上就非常容易了。你要记住,一对
多通信,实际上同一时刻也是一对一通信。一次通信只需几个毫秒,如果一个和一个通信
完以后,再和另外一个通信,然后再和另外一个通信……这中间如果没有延时程序的话,
对于人的反应来说,就是同时进行的。这个原理就和操作系统一样,同一时刻,既可以打
字聊天,又可以看电影。
下面视频是瑞生做的一个项目,是一对五,共用到 6 个 NRF24L01 模块,一个盒子
里有一个。
上面这个视频的实例,如果只看 NRF24L01 的话,可以总结为下面的图示:
我们知道,2 个 NRF24L01 通信需要具备 4 个条件设置相同。
发射接收数据宽度相同(最大 32 个字节)
发射接收地址相同(5 个 8 位地址)
发射接收频道相同(0~125)
发射接收速率相同(2M 1M 250K)
现在假设,主机和 5 个从机的这四个条件全部设置相同,如果主机发送数据的话,理
论上 5 个从机会收到数据,实际上由于干扰,不会都收到。而且,这时候,如果从机 1 给
主机发送数据的话,从机 2~5 也会收到数据。所以这样做是不行的!
一对多,有两种方式,一种是修改为不同的频道,一种是修改为不同的地址,也可以
修改为不同的频道+不同的地址。
上面视频中用到的,是修改为不同的频道,例如,从机 1 的频道是 10,从机 2 的频
道是 30,从机 3 的频道是 50,从机 4 的频道是 70,从机 5 的频道是 90(注意,频道的
值可以是 0~125,共 126 个频道),频道接近的话,有可能出问题,例如从机 1 的频道
是 20,如果设置从机 2 的频道是 21 的话,主机给从机 1 发送数据时,从机 2 也有可能受
到数据。所以要向上面一样,频道距离拉开一些。这时候,有人会产生疑问,如果我有几