极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: Ansifa

Arduino学习笔记A16 - Arduino连接nRF24L01无线收发模块

  [复制链接]
发表于 2015-12-5 13:33:33 | 显示全部楼层
三公分阳光 发表于 2015-8-12 00:39
楼主你好,我想请教下,如果一次发送多个传感器的数据该怎么改呢?我试着改了一下你的程序,但是只能接收到 ...

你在可以这样修改:

发送端程序
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
void setup()
{
    Serial.begin(9600);

    Mirf.cePin = 8;                //设置CE引脚为D9
    Mirf.csnPin = 7;        //设置CE引脚为D10
    Mirf.spi = &MirfHardwareSpi;
    Mirf.init();  //初始化nRF24L01               

        //设置接收标识符"Sen01"
    Mirf.setRADDR((byte *)"Sen01");
    Mirf.payload = sizeof(unsigned int);//在这把2 修改成4
    Mirf.channel = 3;
    Mirf.config();

        //注意一个Arduino写Sender.ino,另一个写Receiver.ino。
        //这里标识写入了Sender.ino
    Serial.println("I'm Sender...");
}
unsigned int adata = 0,bdata = 0;

void loop()
{
        //读取A0值到adata
    adata = analogRead(A0);
    bdata = analogRead(A1);

    //由于nRF24L01只能以byte单字节数组形式发送Mirf.payload个数据,
    //所以必须将所有需要传输的数据拆成byte。
    //下面定义byte数组,存放待发数据,因为Mirf.payload = sizeof(unsigned int);
    //实际下面等于byte data[2];
    byte data[Mirf.payload];

    //adata是unsigned int双字节数据,必须拆开。
    //将adata高低八位拆分:
    data[0] = adata & 0xFF;                //低八位给data[0],
    data[1] = adata >> 8;    //高八位给data[1]。
    data[2] = bdata & 0xFF;                //低八位给data[0],
    data[3] = bdata >> 8;
    //设置向"serv1"发送数据
    Mirf.setTADDR((byte *)"Rec01");
    Mirf.send(data);
    //while死循环等待发送完毕,才能进行下一步操作。
    while(Mirf.isSending()) {}
    Serial.println(adata);
    Serial.print("*****");
    Serial.println(bdata,DEC);
    delay(3000);
}

接收端程序:

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

    //定义一个变量adata存储最终结果,oldadata存储旧结果,防止相同结果刷屏。
    unsigned int adata = 0, bdata = 0;

void setup()
{
    Serial.begin(9600);

    //---------初始化部分,不可随时修改---------
    Mirf.cePin = 8;     //设置CE引脚为D9
    Mirf.csnPin = 7;   //设置CE引脚为D10
    Mirf.spi = &MirfHardwareSpi;
    Mirf.init();  //初始化nRF24L01

    //---------配置部分,可以随时修改---------
    //设置接收标识符"Rev01"
    Mirf.setRADDR((byte *)"Rec01");
    //设置一次收发的字节数,这里发一个整数,
    //写sizeof(unsigned int),实际等于2字节
    Mirf.payload = sizeof(unsigned int);//在这把2 修改成4
    //发送通道,可以填0~128,收发必须一致。
    Mirf.channel = 3;
    Mirf.config();

    //注意一个Arduino写Sender.ino,另一个写Receiver.ino。
    //这里用来辨别写入了Receiver.ino程序
    Serial.println("I'm Receiver...");
}

void loop()
{
    //定义一个暂存数组,大小为Mirf.payload。
    byte data[Mirf.payload];
    if(Mirf.dataReady())    //等待接收数据准备好
    {
        Mirf.getData(data);    //接收数据到data数组
        //data[1]<左移8位与data[0]并,重组数据。
        adata = (unsigned int)((data[1] << 8) | data[0]);
        bdata = (unsigned int)((data[3] << 8) | data[2]);
   
      
            
          Serial.println(adata);
    Serial.print("*****");
    Serial.println(bdata,DEC);
    }
}
回复 支持 反对

使用道具 举报

发表于 2015-12-15 15:10:41 | 显示全部楼层
三公分阳光 发表于 2015-8-12 00:39
楼主你好,我想请教下,如果一次发送多个传感器的数据该怎么改呢?我试着改了一下你的程序,但是只能接收到 ...

data[]数组的长度是2,所以data[2], data[3]无效
回复 支持 反对

使用道具 举报

发表于 2016-3-4 01:49:17 | 显示全部楼层
本帖最后由 ww771880298 于 2019-6-23 15:18 编辑

我。。弄一天了!
回复 支持 反对

使用道具 举报

发表于 2016-3-6 08:49:40 | 显示全部楼层
好东西,正在学习这个当中
回复 支持 反对

使用道具 举报

发表于 2016-3-9 20:43:46 | 显示全部楼层
请问楼主,我想用你的这个程序来传输一下A0端的肌电信号(波形信号,不规律),请问应该怎样改动程序??
回复 支持 反对

使用道具 举报

发表于 2016-3-10 11:13:17 | 显示全部楼层
您好,我要用您这个程序做一个肌电信号的无线传输,把采集处理后的肌电信号输入arduino的A0端,通过两个nrf24L01来实现无线传输,请问应该怎么改动下您的程序
回复 支持 反对

使用道具 举报

发表于 2016-3-29 23:29:12 | 显示全部楼层
学习了。。。
回复 支持 反对

使用道具 举报

发表于 2016-4-3 14:41:46 | 显示全部楼层
首先感谢大神的教程,有一个问题像请教一下,就是我根据教程,把两端的代码改成对舵机的控制了,so问题来了,控制一个舵机可以,但是我如果像让他控制两个或者更多的舵机,收发代码该如何改呢,或者说思路是什么。我试了让发送端发送Sen01、Sen02这样,没有效果。求指教!
回复 支持 1 反对 0

使用道具 举报

发表于 2016-4-22 16:43:09 | 显示全部楼层
arduino新手,可以讲一下两张原理图的具体原理么?谢谢
回复 支持 反对

使用道具 举报

发表于 2016-4-24 21:51:23 | 显示全部楼层
请问一下,我按照你的例程,有时候我下载程序后可以相互连接,但是我拔掉电源后再试下有没有连接时就连接不上了,请问是什么问题
回复 支持 反对

使用道具 举报

发表于 2016-4-25 12:40:10 | 显示全部楼层
楼主好   我参照你的代码  使用 两块 nrf24l01+ 台产的  还有两块  arduino uno 板子  分别连接在pc机的不同usb 口     前几次发送可以收到数据   但是很不稳定

到后来 发送端就卡住了  发出去的报文   接收端接收不到   不知道什么原因 而且我在发送端 delay(3000) 我想我等待数据彻底发送完 的时间够长了吧
回复 支持 反对

使用道具 举报

发表于 2016-5-10 10:19:17 | 显示全部楼层
穿墙效果怎样??
回复 支持 反对

使用道具 举报

发表于 2016-6-14 10:54:44 | 显示全部楼层
实验有成功的吗?我试了N种方法也没有发现啥可以解决的方案。加了滤波电容和没加是一个效果。
回复 支持 反对

使用道具 举报

发表于 2016-6-21 21:16:50 | 显示全部楼层
有大神可以帮个忙吗?如何设置nRF24L01到其他连接引脚?我用L293D板引脚都冲突呀!
例如:
CSN -> A0
CE -> A1
MOSI -> A2
MISO -> A3
SCK -> A4

回复 支持 反对

使用道具 举报

发表于 2016-6-26 07:08:57 | 显示全部楼层
不错,学习了!
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-16 13:56 , Processed in 0.044659 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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