狗趴(GodPub),开源硬件学习与实践

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz

[arduino][Mirf库]菜鸟玩 NRF24L01

查看数: 16147 | 评论数: 3 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-2-23 17:21

正文摘要:

蓝牙成本高、wifi不会玩,就先看看NRF24L01吧 来自贴吧的教程: http://tieba.baidu.com/p/3092150056 IRQ –悬空 @@@@ MISO – D12, MOSI – D11 @@@ SCK – D13, CSN – D7, @@@@ CS – D8, VCC - 3.3V @@ ...

回复

囧囧-科技大神粉 发表于 2015-2-24 11:55:25
5字节,串口转NRF24L01,要想一次性发送更多,就增加 tempx、Mirf.payload的长度就可以了


  1. #include <SPI.h>
  2. #include <Mirf.h>
  3. #include <nRF24L01.h>
  4. #include <MirfHardwareSpiDriver.h>

  5. char tempx[6];
  6. int jsq1=0;
  7. boolean NRF=0;


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

  12. Mirf.setRADDR((byte *)"clie1"); // 标记本地名,用于接收
  13. Mirf.payload = 5; //对话的长度,用于约定双方对话的缓冲窗口大小,这个代表5个字节
  14. Mirf.channel = 3; // 信道,测试了一下,不同的信道也能接收但即时性很差,不知是不是存在自动寻道匹配机制

  15. Mirf.config();
  16. }


  17. void loop(){


  18. Mirf.setTADDR((byte *)"serv1"); // 标记对方的地址
  19. //Sends("hello"); //发送了一个5字节的hello


  20. while (Serial.available() > 0) {
  21.     NRF=1;

  22.    if(jsq1<5){ //只接受前5个字节

  23.   tempx[jsq1]=Serial.read();  
  24.   jsq1++;
  25.    }else Serial.read(); //超过5字节的都丢弃

  26. delayMicroseconds(1200);

  27.   }

  28. if(NRF){
  29.          NRF=0; //nrf发送数据次数与串口接收数据次数一对一
  30.          for(int col=jsq1;col<5;col++)tempx[col]=32; //不足5字节的补上空格,算是一种视觉上的清空
  31.          jsq1=0;
  32.          Sends(tempx);
  33.      //for(int col=0;col<5;col++)tempx[col]=0;//不需要清空,因为新的填充会自然清空

  34. }


  35. }


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

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

  47. while(Mirf.isSending()){}



  48. }
复制代码


囧囧-科技大神粉 发表于 2015-2-23 19:32:20
卓泰科技 发表于 2015-2-23 17:48
不错,感谢囧囧大神的分享

PS:

@机器翻译

  1. 文档

  2. 引脚:

  3. MISO -> 12
  4. MOSI -> 11
  5. SCK -> 13
  6. Configurable:

  7. CE -> 8
  8. CSN -> 7

  9. 可配置的:

  10. byte cePin
  11. CE Pin 控制 RX / TX, 默认 8.
  12. byte csnPin
  13. CSN Pin (片选), 默认 7.
  14. byte channel
  15. RF 信道 0 - 127 or 0 - 84 in the US, 默认 0.
  16. byte payload
  17. 字节数, 默认 16, max 32.
  18. NB: 信道和载荷必须所有节点相同的.

  19. 方法:

  20. void init(void)
  21. 初始化模块,用于设置引脚模式
  22. 可配置引脚和初始化SPI模块。

  23. Example:
  24. Mirf.csnPin = 9;
  25. Mirf.cePin = 7;

  26. Mirf.spi = &MirfHardwareSpi; // 设置驱动程序

  27. Mirf.init();
  28. void setRADDR(byte *addr)
  29. 设置接收地址。地址是5字节长。
  30. Example:
  31. Mirf.setRADDR((byte *)"addr1");
  32. void setTADDR(byte *addr)
  33. 设置发送地址。
  34. Example:
  35. Mirf.setTADDR((byte *)"addr1");
  36. void config(void)
  37. 信道和有效载荷的宽度设置。上电 in RX mode and flush RX fifo.
  38. Example:
  39. Mirf.payload = 32;
  40. Mirf.信道 = 2;
  41. Mirf.config();
  42. bool dataReady(void)
  43. 有数据可以收到了吗?。
  44. Example:
  45. if(Mirf.dataReady()){
  46.   //获取数据
  47. }
  48. void getData(byte *data)
  49. 把接收到的数据。
  50. “数据”应该是一个数组
  51. mirf.payload字节长。
  52. Example:
  53. byte data[Mirf.payload]
  54. Mirf.getData(data);
  55. void send(byte *data)
  56. 发送数据。
  57. “数据”应该是
  58. mirf.payload字节长。
  59. bool isSending(void)
  60. 返回true
  61. 如果仍在试图送。
  62. 如果芯片仍在发射模式中此方法将返回芯片接收模式。
  63. Example:
  64. Mirf.send(data);

  65. while(Mirf.isSending()){
  66. //等待.
  67. }

  68. //芯片现在是在接收模式
  69. 注:更多的信息可从状态寄存器对于acknolagement或故障状态。. See Mirf.cpp:218.

  70. bool rxFifoEmpty(void)
  71. 清空 RX Fifo
  72. bool txFifoEmpty(void)
  73. 清空  TX Fifo
  74. byte getStatus(void)
  75. 返回状态寄存器。
  76. void powerUpRx(void)
  77. Power up chip and set to receive mode. Also clear sending interrupts.
  78. void powerUpTx(void)
  79. Power up tx mode.
复制代码


卓泰科技 发表于 2015-2-23 17:48:01
不错,感谢囧囧大神的分享

PS:
官网上NRF24l01的链接
http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01

QQ|Archiver|手机版|狗趴(GodPub) Arduino&Raspberry Pi开源硬件学习与实践[QQ群:20085629]  

GMT+8, 2024-5-12 15:52 , Processed in 0.039465 second(s), 32 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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