极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: L.anrist

关于无线传输模块NRF24L01的小小研究

  [复制链接]
发表于 2015-7-24 17:24:47 | 显示全部楼层
楼主你好,我想用这个模块发送多个传感器的数据,不知道该怎么改,能否指教一下?十分感谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-24 18:22:21 | 显示全部楼层
三公分阳光 发表于 2015-7-24 17:24
楼主你好,我想用这个模块发送多个传感器的数据,不知道该怎么改,能否指教一下?十分感谢

你是希望一对多那种?多个传感器给一个主服务器发送数据?如果是这样那么很简单啊  代码基本上不需要改动 你只需要在传送过去的数据里面加上一个自己定义的报头表明自己的身份就是了
回复 支持 反对

使用道具 举报

发表于 2015-7-24 18:42:42 | 显示全部楼层
L.anrist 发表于 2015-7-24 18:22
你是希望一对多那种?多个传感器给一个主服务器发送数据?如果是这样那么很简单啊  代码基本上不需要改动 ...

额,能再具体一点吗?我刚接触这个有点不懂,谢谢啦
回复 支持 反对

使用道具 举报

发表于 2015-7-24 18:44:01 | 显示全部楼层
L.anrist 发表于 2015-7-24 18:22
你是希望一对多那种?多个传感器给一个主服务器发送数据?如果是这样那么很简单啊  代码基本上不需要改动 ...

是多个传感器数据同时通过 nrf24l01传递给另一个 nrf24l01然后被arduino接收这样
回复 支持 反对

使用道具 举报

发表于 2015-7-24 19:39:30 | 显示全部楼层
L.anrist 发表于 2015-7-24 18:22
你是希望一对多那种?多个传感器给一个主服务器发送数据?如果是这样那么很简单啊  代码基本上不需要改动 ...

同时我还想问一下,如果要接收传感器的值该怎么改程序?我试了一下午了都不行,不知道问题在哪,求指教!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-30 09:02:50 | 显示全部楼层
三公分阳光 发表于 2015-7-24 19:39
同时我还想问一下,如果要接收传感器的值该怎么改程序?我试了一下午了都不行,不知道问题在哪,求指教!

一般来说  你需要修改接受的传感器的数值是float量吧?  如果是这样的话  那么你在setup()函数里把对应的 Mirf.payload 修改成 Mirf.payload = sizeof(float);  这样子传送的时候就是传送float大小的数据 接受的时候你只需要定义的接受的变量是float  然后指针强制类型转换一下就能够拿到要的数据 比如接收端你写成 float data; Mirf.getData((byte *) &data); 至于多对一传送数据,关键在于你需要注意每个节点的地址,比如说主节点其实就是一个接受地址  比如你设置成 Mirf.setRADDR((byte *)"NODE0");  设置好了接受地址  那么其他几个从机在发送数据的时候就可以先Mirf.setTADDR((byte *)"NODE0");  然后发送 这样相当于是给NODE0这个接受地址发数据 至于从节点 你就不需要关注RADDR了 因为他们不需要接受信息。当然 如果你开启了增强型SHOCKBURST模式 那么他们在通信的时候是会自动来回一次  那么这种情况下每个节点都需要有一个明确的RADDR。   多看看nrf24l01的数据手册 里面写得很详细:)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-30 09:03:30 | 显示全部楼层
三公分阳光 发表于 2015-7-24 19:39
同时我还想问一下,如果要接收传感器的值该怎么改程序?我试了一下午了都不行,不知道问题在哪,求指教!

最近有些忙 等我稍微有空的时候可以写一个多个节点之间进行通讯的例程
回复 支持 反对

使用道具 举报

发表于 2015-8-10 11:22:27 | 显示全部楼层
楼主,我为啥点击发送的时候板子上的接收灯会亮起来。而且接收也收不到数据
回复 支持 反对

使用道具 举报

发表于 2015-8-12 01:10:38 | 显示全部楼层
L.anrist 发表于 2015-7-30 09:03
最近有些忙 等我稍微有空的时候可以写一个多个节点之间进行通讯的例程

额,楼主你可能还是没明白我的意思,我的意思是多个传感器通过一个nrf24l01模块给另一个nrf24l01模块发送数据,我现在尝试了单个传感器数据可以发送,但是多个一起通过一个nrf24l01发送给另一个的时候就不知道怎么办了,尝试了把多个传感器的数据变成数组发送但是没有成功,请问有没有什么的好的办法可以解决?谢谢啦
回复 支持 反对

使用道具 举报

发表于 2015-9-25 12:16:38 | 显示全部楼层
Muller_r 发表于 2012-7-12 17:38
谢谢楼主的资料,我想请教一下 unsigned char status = SPI_Read(STATUS);  里STATUS 到底是什么?[一直很不 ...

是STATUS状态寄存器
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-14 11:55:28 | 显示全部楼层
三公分阳光 发表于 2015-8-12 01:10
额,楼主你可能还是没明白我的意思,我的意思是多个传感器通过一个nrf24l01模块给另一个nrf24l01模块发送 ...

这个很容易啊 你把所有的数据都转换成byte  然后用标识符自己制定一个协议 比如说ABC三个传感器产生数据12,456,8
那你传送的时候传送如下   <A12><B456><C8>   
这样子的话接受方只需要解析所有尖括号内的内容  并根据尖括号内第一个字符来判断是什么传感器的数据 以右尖括号判断数据结尾处就是了。
我之前曾经这样传送过类似的数据
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-14 12:03:14 | 显示全部楼层
[email protected] 发表于 2015-8-10 11:22
楼主,我为啥点击发送的时候板子上的接收灯会亮起来。而且接收也收不到数据

点击发送是什么意思呢?
回复 支持 反对

使用道具 举报

发表于 2015-10-15 21:56:58 | 显示全部楼层
楼主有尝试多通道通讯吗?最近想学这个,不知道能否给点启发和资料。谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-1 12:43:47 | 显示全部楼层
性感的阿淇 发表于 2015-10-15 21:56
楼主有尝试多通道通讯吗?最近想学这个,不知道能否给点启发和资料。谢谢

多通道的话你就不要用mirf这个库了 这个默认一个通道。建议去看下官方文档,其实拿三个nrf一个arduino就能实验,一个nrf有六个同频道不同地址的接受通道,每个通道都有个各自的fifo接受缓存,你只要会了使用一个通道的接受,那么其他通道没什么太大区别。
回复 支持 反对

使用道具 举报

发表于 2015-11-19 08:13:09 | 显示全部楼层
谢谢楼主,学习。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-2 08:09 , Processed in 0.040844 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表