极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 132315|回复: 119

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

  [复制链接]
发表于 2012-7-12 16:34:50 | 显示全部楼层 |阅读模式
本帖最后由 L.anrist 于 2015-7-30 09:25 编辑

更新:2015/7/30
如果你在测试无线模块的时候发现无法工作  是因为arduino板子的电源滤波没有做好,你只需要在无线模块的VCC和GND之间加上一个10UF或者以上的电容,有些电容需要注意电容极性。那么就能够解决问题。



更新:2015/3/6
好久没有来这个论坛了,突然发现大家似乎对这个两三年前发的帖子的讨论还是挺多的,希望自己的乱七八糟的资料有对大家起到一定的帮助呀。nrf24l01是一个性价比很高的通信模块,当时认准了它肯定能够在以后的电子爱好者界中会产生很大的影响,现在看来似乎确实是这样的吧。
之前上传的文件里面的库是老版本的库,我稍微修改了一下,现在应该可以支持1.0及以上的arduino ide了,原作者似乎没有更新过库文件,他写的很不错了。希望大家能够再完善它,比如研究研究irq中断什么的。


//此处本来贴了一大堆代码 是软件模拟spi控制模块的  抄的elecfreaks上面的  大家可以去他那儿看  主要是底层的寄存器操作。




更新:  过了一段日子 重新拾掇起nrf  将上面的程序换成更加简单易读的使用库文件的实现代码
下面的发送端
  1. #include "SPI.h"     
  2. #include "Mirf.h"
  3. #include "nRF24L01.h"
  4. #include "MirfHardwareSpiDriver.h"

  5. char words;


  6. void setup(){
  7. Serial.begin(9600);
  8. //Mirf.cePin=8;
  9. //Mirf.csnPin=7;
  10. //以上两条语句可以用来修改引脚的位置
  11.   Mirf.spi = &MirfHardwareSpi;
  12.   Mirf.init();                                 
  13.    Mirf.setTADDR((byte *)"serv1");//TADDR是你所需要发送过去的对方的接受地址,必须长度为5个BYTE
  14.   Mirf.payload = sizeof(char);  //最大的载荷好像是31         
  15.    Mirf.config();   
  16. }
  17. void loop(){

  18. while(Serial.available()>0)
  19. {words=Serial.read();   
  20.       Mirf.send((byte *)&words);  //强制指针类型转换 用于拆分内存中的数据 一个BYTE一个BYTE的发送
  21.                         
  22.      while(Mirf.isSending())
  23.      { }
  24. }              
  25. }  
复制代码

通过串口输入字符串 发送出去

下面的是接收端代码
  1. #include "SPI.h"                              //24L01库文件
  2. #include "Mirf.h"
  3. #include "nRF24L01.h"
  4. #include "MirfHardwareSpiDriver.h"

  5. char data;
  6. char words;


  7. void setup(){   
  8.   Serial.begin(9600);
  9.   Mirf.spi = &MirfHardwareSpi;         
  10.   Mirf.init();
  11.   Mirf.setRADDR((byte *)"serv1"); //
  12.   Mirf.payload = sizeof(char);           //一次性传送的数据量大小,此处为1
  13.       Mirf.config();
  14. }

  15. void loop(){

  16.   if(Mirf.dataReady())
  17.   {                          //如果接收到数据则执行
  18.      Mirf.getData((byte *)&data);   //接收数据
  19.     words=data;
  20.       Mirf.rxFifoEmpty();   
  21.       Serial.print(words);  
  22.       
  23. }

  24. }


复制代码
将接收端的程序写进另外一个arduino
根据库文件的要求   arduino和无线模块的连线需要改动成如下:
CE---------8
CSN-------7
SCK-------13
MOSI------11
MISO------12
IRQ不需要用到

关于库文件的使用需要注意的是需要在0022 或者0023以及更早的版本 1.0或者1.01都不支持
同时在使用串口的时候 有的时候会遇到同一个程序无法打开不同的com口 所以我是下载了两个不同版本的编译器然后才能打开不同的串口的

本帖子中包含更多资源

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

x

评分

参与人数 1 +2 收起 理由
幻生幻灭 + 2 鼓励新人贴,期待更新,增加点图片和视频最.

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-7-12 17:22:41 | 显示全部楼层
below down。。。。。。

本帖子中包含更多资源

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

x
回复 支持 0 反对 1

使用道具 举报

发表于 2012-7-12 16:58:03 | 显示全部楼层
沙发~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2012-7-12 17:03:29 | 显示全部楼层
是否能把整个程序包打包上传上来呢?谢谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-12 17:24:52 | 显示全部楼层
Randy 发表于 2012-7-12 17:03
是否能把整个程序包打包上传上来呢?谢谢!

Randy大哥  敬仰敬仰。。。看了很多你的文章  挺厉害的  接触arduino两年多了  一直在学校没时间上网 偶尔用手机上上论坛  查查资料  看你写的文章还是挺多的。。。最近买了一大堆材料 准备暑假好好干--,。  我准备做一个基于arduino的微型四轴飞行器。。。有用到MPU6050  还望以后多多指教。。
回复 支持 反对

使用道具 举报

发表于 2012-7-12 17:38:37 | 显示全部楼层
谢谢楼主的资料,我想请教一下 unsigned char status = SPI_Read(STATUS); 里STATUS 到底是什么?[一直很不解]
回复 支持 反对

使用道具 举报

发表于 2012-7-12 17:44:03 | 显示全部楼层
L.anrist 发表于 2012-7-12 17:24
Randy大哥  敬仰敬仰。。。看了很多你的文章  挺厉害的  接触arduino两年多了  一直在学校没时间上网 偶尔 ...

  你接触的比我还早,我也不算啥啥的了,四轴简单的我玩过一些模块,还没真正的飞起来呢?过段时间才有时间研究研究,材料都有了,主要是时间问题了!!一起学习!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-12 17:45:41 | 显示全部楼层
Randy 发表于 2012-7-12 17:44
你接触的比我还早,我也不算啥啥的了,四轴简单的我玩过一些模块,还没真正的飞起来呢?过段时间才有 ...

给我qq  现在 联系你--。。。      我发誓暑假一定要完成四轴   大家一起合作努力!
回复 支持 反对

使用道具 举报

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

同学等一下   我去找找我的旧笔记  上面有很详细的记载  可能晚些时候告诉你
回复 支持 反对

使用道具 举报

发表于 2012-7-12 17:58:00 | 显示全部楼层
L.anrist 发表于 2012-7-12 17:45
给我qq  现在 联系你--。。。      我发誓暑假一定要完成四轴   大家一起合作努力!

有想法就要坚持,这样才有实现的可能,一起努力!
回复 支持 反对

使用道具 举报

发表于 2012-7-12 20:42:59 | 显示全部楼层
加油吧
回复 支持 反对

使用道具 举报

发表于 2012-7-13 14:41:15 | 显示全部楼层
不错的东东
回复 支持 反对

使用道具 举报

发表于 2012-7-16 09:16:21 | 显示全部楼层
Randy 发表于 2012-7-12 17:58
有想法就要坚持,这样才有实现的可能,一起努力!

Randy,我跑你们板块来 发威望啦~嘎嘎
回复 支持 反对

使用道具 举报

发表于 2012-7-16 09:20:06 | 显示全部楼层
幻生幻灭 发表于 2012-7-16 09:16
Randy,我跑你们板块来 发威望啦~嘎嘎

哈哈,好的,我也去你版块给你加点威望,哈哈!去智能车版块看看我发的那个意见贴,给点意见!
回复 支持 反对

使用道具 举报

发表于 2012-7-19 21:28:48 | 显示全部楼层
麻烦问下大家,我用的是一个mega2560和一个Arduino Duemilanove 328的板子,看楼主说GND – GND, VCC – 3.3V, CS – D8, CSN – D9, SCK – D10, MOSI – D11, MISO – D12, IRQ – D13,但是却没有任何效果,我怀疑是mega2560的引脚与Duemilanove的不一样,所以想问问大家怎么连接??或者可没有可能是什么别的原因??
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 14:41 , Processed in 0.056332 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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