arduinomirf库_用Mirf库实现NRF24L01及同类无线模块收发数据

该程序演示了如何使用Arduino和Mirf库实现5个发送节点到1个接收节点的数据传输。接收端(节点编号6)监听5个不同的发送地址,并在接收到数据后向发送节点的指定接收地址发送反馈。
摘要由CSDN通过智能技术生成

/*

nRF24L01多对一试验

本试验可以实现5个发送端向1个接收端发数据

接收端程序,节点编号为6(不需要修改)

侦听所有接收地址(发送端的 talking pipes,也就是发送端的发送地址)

接到数据后,发送反馈到发送信息的发送端的接收地址(发送端指定 listening pipe)

*/

#include

#include

#include "nRF24L01.h"

#include "RF24.h"

#include "printf.h"

// 硬件设置

// 将nRF24L01模块的CE脚插到 D9,CSN脚插到 D10

//创建对象

RF24 radio(9,10);

//地址清单,接收端和发送端的程序里地址清单要完全相同。

//地址到底是什么字符组成并不重要,重要的是各不相同。关键是节点编号的设置,千万记住,接收端节点设置为6,发送端节点设置为1-5。

const uint64_t talking_pipes[5] = { 0xF0F0F0F0A1LL, 0xF0F0F0F0A2LL, 0xF0F0F0F0A3LL, 0xF0F0F0F0A4LL, 0xF0F0F0F0A5LL };  //接收端指定5个通道的接收地址(或称本地地址)

const uint64_t listening_pipes[5] = { 0x3A3A3A3AB1LL, 0x3A3A3A3AB2LL, 0x3A3A3A3AB3LL, 0x3A3A33AB4LL, 0x3A3A3A3AB5LL };//每个发送端指定一个接收地址(或称本地地址)

//定义节点编号变量

uint8_t node_address;

void setup(void)

{

//设置节点编号(不需要修改)

node_address = 6;

// 打印标题

Serial.begin(57600);

printf_begin();

//printf("\n\rRF24L01_R_Multi/\n\r");

//printf("ADDRESS: %i\n\r",node_address);

radio.begin();//启动并初始化nRF24L01

//radio.setPALevel(RF24_PA_MIN);//修改发射功率

//RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm,RF24_PA_MED=-6dBM, and RF24_PA_HIGH=0dBm.

//radio.setChannel(118);        //修改频道,0~127都可以

//radio.setPayloadSize(32);     //修改有效载荷大小(传输数据长度),最大为32字节

// 打开通道给其他节点进行通讯

radio.openReadingPipe(1,talking_pipes[0]);//给通道1分配接收地址

radio.openReadingPipe(2,talking_pipes[1]);//给通道2分配接收地址

radio.openReadingPipe(3,talking_pipes[2]);//给通道3分配接收地址

radio.openReadingPipe(4,talking_pipes[3]);//给通道4分配接收地址

radio.openReadingPipe(5,talking_pipes[4]);//给通道5分配接收地址

//  开始侦听

radio.startListening();

// 打印设置结果,供调试用

radio.printDetails();

}

void loop(void)

{

// 如果有接收到数据

uint8_t pipe_num;

if ( radio.available(&pipe_num) )

{

//有数据传入,获取通道编号(通道编号就是节点编号)

unsigned long got_time;

bool done = false;

while (!done)

{

// 读取数据

done = radio.read( &got_time, sizeof(unsigned long) );

// 打印数据和节点编号

printf("Got payload %lu from node %i...",got_time,pipe_num);

}

//停止侦听,准备反馈数据

radio.stopListening();

//设置正确的反馈地址

radio.openWritingPipe(listening_pipes[pipe_num-1]);

//获取反馈地址后4位

uint16_t pipe_id = listening_pipes[pipe_num-1] & 0xffff;

//发送反馈,打印地址

radio.write( &got_time, sizeof(unsigned long) );

printf("Sent response to %04x.\n\r",pipe_id);

radio.startListening();//恢复侦听

}

delay(1000);

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值