关于无线传输模块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口 所以我是下载了两个不同版本的编译器然后才能打开不同的串口的
below down。。。。。。 沙发~~~~~~~~ 是否能把整个程序包打包上传上来呢?谢谢! Randy 发表于 2012-7-12 17:03 static/image/common/back.gif
是否能把整个程序包打包上传上来呢?谢谢!
Randy大哥敬仰敬仰。。。看了很多你的文章挺厉害的接触arduino两年多了一直在学校没时间上网 偶尔用手机上上论坛查查资料看你写的文章还是挺多的。。。最近买了一大堆材料 准备暑假好好干--,。我准备做一个基于arduino的微型四轴飞行器。。。有用到MPU6050还望以后多多指教。。 谢谢楼主的资料,我想请教一下 unsigned char status = SPI_Read(STATUS); 里STATUS 到底是什么?[一直很不解] L.anrist 发表于 2012-7-12 17:24 static/image/common/back.gif
Randy大哥敬仰敬仰。。。看了很多你的文章挺厉害的接触arduino两年多了一直在学校没时间上网 偶尔 ...
:(你接触的比我还早,我也不算啥啥的了,四轴简单的我玩过一些模块,还没真正的飞起来呢?过段时间才有时间研究研究,材料都有了,主要是时间问题了!!一起学习! Randy 发表于 2012-7-12 17:44 static/image/common/back.gif
你接触的比我还早,我也不算啥啥的了,四轴简单的我玩过一些模块,还没真正的飞起来呢?过段时间才有 ...
给我qq现在 联系你--。。。 我发誓暑假一定要完成四轴 大家一起合作努力! Muller_r 发表于 2012-7-12 17:38 static/image/common/back.gif
谢谢楼主的资料,我想请教一下 unsigned char status = SPI_Read(STATUS);里STATUS 到底是什么?[一直很不 ...
同学等一下 我去找找我的旧笔记上面有很详细的记载可能晚些时候告诉你 L.anrist 发表于 2012-7-12 17:45 static/image/common/back.gif
给我qq现在 联系你--。。。 我发誓暑假一定要完成四轴 大家一起合作努力!
有想法就要坚持,这样才有实现的可能,一起努力! 加油吧 不错的东东 Randy 发表于 2012-7-12 17:58 static/image/common/back.gif
有想法就要坚持,这样才有实现的可能,一起努力!
Randy,我跑你们板块来 发威望啦~嘎嘎 幻生幻灭 发表于 2012-7-16 09:16 static/image/common/back.gif
Randy,我跑你们板块来 发威望啦~嘎嘎
哈哈,好的,我也去你版块给你加点威望,哈哈!去智能车版块看看我发的那个意见贴,给点意见! 麻烦问下大家,我用的是一个mega2560和一个Arduino Duemilanove 328的板子,看楼主说GND – GND, VCC – 3.3V, CS – D8, CSN – D9, SCK – D10, MOSI – D11, MISO – D12, IRQ – D13,但是却没有任何效果,我怀疑是mega2560的引脚与Duemilanove的不一样,所以想问问大家怎么连接??或者可没有可能是什么别的原因??