上海极制信息科技有限公司

 找回密码
 立即注册
搜索
热搜: 活动 培训 资料
查看: 158350|回复: 18

NRF24L01通信模块测试

[复制链接]

40

主题

65

帖子

1418

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1418
发表于 2015-2-23 23:34:14 | 显示全部楼层 |阅读模式
本帖最后由 jizhi01 于 2015-2-24 17:27 编辑

2.4G模块NRF24L01是经济实惠的无线通信方式,比蓝牙、Wifi都便宜好多呀!下面介绍一个测试NRF24L01模块通信的方法,当然你需要两块NRFL01和两块Arduino。
接线方式:

NRF24L01 -------------- Arduino
IRQ          -------------- 悬空不接
MISO       --------------  D12
MOSI       --------------  D11
SCK         --------------  D13
CSN         --------------  D7
CE          --------------   D8
VCC        --------------   3.3V
GND        --------------  GND
库文件Mirf.zip:
下面的例程是发送端循环发送00000-00999给接收端。
发送端代码:
  1. #include <SPI.h>
  2. #include <Mirf.h>
  3. #include <nRF24L01.h>
  4. #include <MirfHardwareSpiDriver.h>

  5. char tempx[6]="00000";
  6. int x=0;

  7. void setup(){
  8. Serial.begin(9600);
  9. Mirf.spi = &MirfHardwareSpi;
  10. Mirf.init();

  11. Mirf.setRADDR((byte *)"clie1"); // 标记本地名,用于接收
  12. Mirf.payload = 5; //对话的长度,用于约定双方对话的缓冲窗口大小,这个代表5个字节
  13. Mirf.channel = 3; // 通信信道

  14. Mirf.config();
  15. }
  16. void loop(){
  17. unsigned long time = millis();

  18. Mirf.setTADDR((byte *)"serv1"); // 标记对方的地址
  19.   
  20. if(x<10)tempx[4]=x+48;
  21. else if(x>9 && x<100){
  22.   tempx[4]=x%10+48;
  23.   tempx[3]=x/10+48;
  24. }  else if(x>99 && x<999){
  25.   tempx[4]=x%10+48;
  26.   tempx[3]=(x/10)%10+48;
  27.   tempx[2]=x/100+48;
  28. }

  29. Sends(tempx);
  30. x++;
  31. if(x==1000){
  32.   x=0;
  33.    for(int col=0;col<5;col++)tempx[col]=48;
  34. }

  35. delay(100);
  36. }


  37. void Sends(char *str)
  38. {
  39. int lens;
  40. lens=strlen(str);

  41. char msg[lens];
  42. int i;
  43. for (i=0;i<lens;i++)
  44. {
  45. msg[i]= int(str[i]);
  46. }
  47. Mirf.send((byte *)&msg);

  48. while(Mirf.isSending()){}
  49.    
  50. }
复制代码



接收端代码:
  1. #include <SPI.h>
  2. #include <Mirf.h>
  3. #include <nRF24L01.h>
  4. #include <MirfHardwareSpiDriver.h>
  5. void setup(){
  6. Serial.begin(9600);

  7. Mirf.spi = &MirfHardwareSpi;
  8. Mirf.init();

  9. Mirf.setRADDR((byte *)"serv1"); // 本地名
  10. Mirf.payload = 5; // 长度
  11. Mirf.channel = 3; // 信道

  12. Mirf.config();

  13. }
  14. void loop(){

  15. byte data[Mirf.payload];
  16. if(!Mirf.isSending() && Mirf.dataReady()){ //存在数据

  17. Mirf.getData(data);
  18.   
  19. int i;
  20. String Temp;
  21. for (i = 0; i < Mirf.payload; i++) //把收到的信息拼起来,到一个串里面
  22. {
  23. Temp += char(data[i]);
  24. }
  25. Serial.print("Get:");
  26. Serial.print(Mirf.payload);
  27. Serial.print(" ");
  28. Serial.println(Temp);

  29.   }
  30. }
复制代码



下载数据后,打开接收端的串口监视窗口可以查看发送端发送的数据。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

7

帖子

42

积分

新手上路

Rank: 1

积分
42
发表于 2015-2-28 01:32:05 | 显示全部楼层
台产的和进口的 在外型上怎样区分的
回复 支持 反对

使用道具 举报

40

主题

65

帖子

1418

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1418
 楼主| 发表于 2015-2-28 16:20:40 | 显示全部楼层
hdcboy 发表于 2015-2-28 01:32
台产的和进口的 在外型上怎样区分的

这个还真不知道
回复 支持 反对

使用道具 举报

0

主题

5

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2015-4-12 15:19:41 | 显示全部楼层
请问大牛,我用楼主的代码调试的时候,接收端是乱码,是什么原因
回复 支持 反对

使用道具 举报

40

主题

65

帖子

1418

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1418
 楼主| 发表于 2015-4-14 22:41:20 | 显示全部楼层
CTGU2012 发表于 2015-4-12 15:19
请问大牛,我用楼主的代码调试的时候,接收端是乱码,是什么原因

通信速率设置是否正确?能提供一下错误信息就更好了。
回复 支持 反对

使用道具 举报

0

主题

5

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2015-4-21 12:28:48 | 显示全部楼层
楼主,想要实现简答的收发双向通行,该怎么弄
回复 支持 反对

使用道具 举报

0

主题

5

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2015-4-21 12:30:15 | 显示全部楼层
使用库函数中的定时中断可以实现,双向通行吗
回复 支持 反对

使用道具 举报

40

主题

65

帖子

1418

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1418
 楼主| 发表于 2015-4-26 13:16:40 | 显示全部楼层
CTGU2012 发表于 2015-4-21 12:30
使用库函数中的定时中断可以实现,双向通行吗

理论上讲是可以的
回复 支持 反对

使用道具 举报

0

主题

6

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2016-3-1 20:45:34 | 显示全部楼层
本帖最后由 gaochengdu12345 于 2016-3-1 20:54 编辑

sketch_mar01a.ino: In function 'void setup()':
sketch_mar01a:11: error: 'Mirf' was not declared in this scope
sketch_mar01a:11: error: 'MirfHardwareSpi' was not declared in this scope
sketch_mar01a.ino: In function 'void loop()':
sketch_mar01a:23: error: 'Mirf' was not declared in this scope
sketch_mar01a.ino: In function 'void Sends(char*)':
sketch_mar01a:57: error: 'Mirf' was not declared in this scope
请问,我把楼主的代码复制过去,编译错误提示,怎么改呢

回复 支持 反对

使用道具 举报

0

主题

6

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2016-3-1 20:48:54 | 显示全部楼层
我是新手,最近在做一个小东西,请问楼主可以加我一下好友吗我的扣扣号:873560764
回复 支持 反对

使用道具 举报

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

本版积分规则

手机版|上海极制信息科技有限公司 ( 沪ICP备14016067号

GMT+8, 2018-11-21 13:56 , Processed in 0.170896 second(s), 25 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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