L.anrist 发表于 2012-7-12 16:34:50

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

本帖最后由 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将上面的程序换成更加简单易读的使用库文件的实现代码
下面的发送端
#include "SPI.h"   
#include "Mirf.h"
#include "nRF24L01.h"
#include "MirfHardwareSpiDriver.h"

char words;


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

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

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

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

char data;
char words;


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

void loop(){

if(Mirf.dataReady())
{                        //如果接收到数据则执行
   Mirf.getData((byte *)&data);   //接收数据
    words=data;
      Mirf.rxFifoEmpty();   
      Serial.print(words);
      
}

}


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

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

L.anrist 发表于 2012-7-12 17:22:41

below down。。。。。。

清风灬细雨 发表于 2012-7-12 16:58:03

沙发~~~~~~~~

Randy 发表于 2012-7-12 17:03:29

是否能把整个程序包打包上传上来呢?谢谢!

L.anrist 发表于 2012-7-12 17:24:52

Randy 发表于 2012-7-12 17:03 static/image/common/back.gif
是否能把整个程序包打包上传上来呢?谢谢!

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

Muller_r 发表于 2012-7-12 17:38:37

谢谢楼主的资料,我想请教一下 unsigned char status = SPI_Read(STATUS); 里STATUS 到底是什么?[一直很不解]

Randy 发表于 2012-7-12 17:44:03

L.anrist 发表于 2012-7-12 17:24 static/image/common/back.gif
Randy大哥敬仰敬仰。。。看了很多你的文章挺厉害的接触arduino两年多了一直在学校没时间上网 偶尔 ...

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

L.anrist 发表于 2012-7-12 17:45:41

Randy 发表于 2012-7-12 17:44 static/image/common/back.gif
你接触的比我还早,我也不算啥啥的了,四轴简单的我玩过一些模块,还没真正的飞起来呢?过段时间才有 ...

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

L.anrist 发表于 2012-7-12 17:46:32

Muller_r 发表于 2012-7-12 17:38 static/image/common/back.gif
谢谢楼主的资料,我想请教一下 unsigned char status = SPI_Read(STATUS);里STATUS 到底是什么?[一直很不 ...

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

Randy 发表于 2012-7-12 17:58:00

L.anrist 发表于 2012-7-12 17:45 static/image/common/back.gif
给我qq现在 联系你--。。。      我发誓暑假一定要完成四轴   大家一起合作努力!

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

erjiang 发表于 2012-7-12 20:42:59

加油吧

夏异 发表于 2012-7-13 14:41:15

不错的东东

幻生幻灭 发表于 2012-7-16 09:16:21

Randy 发表于 2012-7-12 17:58 static/image/common/back.gif
有想法就要坚持,这样才有实现的可能,一起努力!

Randy,我跑你们板块来 发威望啦~嘎嘎

Randy 发表于 2012-7-16 09:20:06

幻生幻灭 发表于 2012-7-16 09:16 static/image/common/back.gif
Randy,我跑你们板块来 发威望啦~嘎嘎

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

troutlzr 发表于 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的不一样,所以想问问大家怎么连接??或者可没有可能是什么别的原因??
页: [1] 2 3 4 5 6 7 8
查看完整版本: 关于无线传输模块NRF24L01的小小研究