极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14616|回复: 7

请教一下NRF24L01用官方的库是怎么发送和接收的

[复制链接]
发表于 2015-2-10 22:11:39 | 显示全部楼层 |阅读模式
入手了两块 NRF24L01 想学习一下无线传送

但是找了一些资料,感觉都有点云里雾里

论坛里面这个文章
http://www.geek-workshop.com/thread-1184-1-1.html

我复制进去的代码,很多问题


然后发现官网有这个库
http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01


说明和例子也都看了,但也不是很明白

问一下,论坛里有谁用过官方的库做成功的

Mirf.setRADDR((byte *)"addr1");
Mirf.setTADDR((byte *)"addr1");

这两个函数不明白,参数这样写到底是什么意思,作用是什么


还有接收和发送的这两个函数和里面的注解

void getData(byte *data)
byte data[Mirf.payload]
这里这个Mirf.payload是什么来的
Mirf.getData(data);
接收这些数据,放到哪里啊?这个data参数是什么?


void send(byte *data)


求指点!!!!谢谢
回复

使用道具 举报

发表于 2015-2-11 10:17:22 | 显示全部楼层
RADDR可以看做自己的位址,TADDR是指發送的對象
收發是固定大小的,大小靠payload設定
data是需要宣告的空間,接收時資料會填入此空間
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-11 18:55:38 | 显示全部楼层
Be1ieve 发表于 2015-2-11 10:17
RADDR可以看做自己的位址,TADDR是指發送的對象
收發是固定大小的,大小靠payload設定
data是需要宣告的空 ...

哦,呵呵!谢谢

还想继续了解

RADDR里面这个自己的地址是什么意思?按照实例里面的写法,这个字符串能像变量一样写吗?写法是怎样的,我对这个(byte *)不怎么明白,是不是byte[] 是意思?

谢谢

感觉有  send() 和 getData() 这两个函数了,那setRADDR和setTADDR这两个函数的作用和这两个有什么区别?
回复 支持 反对

使用道具 举报

发表于 2015-2-12 12:18:30 | 显示全部楼层
string->char array->byte array->byte pointer
模塊要求就是塞5個byte的資料進去當位址
剛好string就是用char[]實作,然後char跟byte一樣大
看不懂就照抄,改成你要的名字就好

因為有些複雜的功能被mirf簡化了,所以看起來才會怪怪的
set只是指定位址而已,並沒有實際傳輸與接收的動作
set的動作完成後才能send或get
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-12 15:17:02 | 显示全部楼层
呵呵,谢谢!

再问一下,这个 addr1 是不是随便取的,大小和那个 playload 有什么关系吗?

还有,和后面的 send函数里面的data有什么关系?呵呵

谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-14 17:01:21 | 显示全部楼层
Be1ieve 发表于 2015-2-12 12:18
string->char array->byte array->byte pointer
模塊要求就是塞5個byte的資料進去當位址
剛好string就是用 ...

呵呵,谢谢!

再问一下,这个 addr1 是不是随便取的,大小和那个 playload 有什么关系吗?

还有,和后面的 send函数里面的data有什么关系?呵呵

谢谢
回复 支持 反对

使用道具 举报

发表于 2015-2-15 22:07:28 | 显示全部楼层
addr隨便取,5個byte就好。同一個模塊上TADDR跟RADDR可以不一樣
但是不同模塊之間TADDR跟RADDR是有關係的
例如有個模塊的RADDR設定為addrA的話,任何要發送給此模塊的資料就將TADDR設為addrA發送即可。同樣的,若TADDR設定不為addrA,這個模塊是不會收到的

payload是指定一次傳送多大的資料,跟data宣告的空間是相關的
data不管怎麼設定都不能小於這數字

回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-17 02:37:47 | 显示全部楼层
Be1ieve 发表于 2015-2-15 22:07
addr隨便取,5個byte就好。同一個模塊上TADDR跟RADDR可以不一樣
但是不同模塊之間TADDR跟RADDR是有關係的
...

嗯,明白了很多!

如果发送的地址,能像广播一样,信号到达的,每个都收得到,不用固定的某个接收地址就好了,像网络里的广播,同网段的都能接收

发现playload里面设置的,就是 sizeof 函数里面设置一个数据类型的大小,sizeof里面设置的数据类型,似乎是不能可变的,好像必需是固定的,我设置了 String 这种数据类型,接收端出来的,就总是乱码,这个不知道能不能解决

还有,data 里面的数据,不能比 sizeof 里面设置的数据类型占用的空间还多,如果多了,接收端只接收 sizeof 里面的长度,后面的不接收
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 11:00 , Processed in 0.069906 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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