极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15844|回复: 3

nRF24L01 为什么接收地址与发送地址不一样同样可以收到数据呢?

[复制链接]
发表于 2015-11-30 12:03:20 | 显示全部楼层 |阅读模式
本帖最后由 帕米 于 2015-12-2 00:01 编辑

最近实验一下 nRF24l01 模块。发现了一个奇怪的事情。。 不管发送端是什么地址。还是接收端是什么地址,只要信道相同都能收到数据。

用的库是 https://github.com/maniacbug/RF24 https://github.com/aaronds/arduino-nrf24l01

D2引脚和GND 插个LED, 每隔500ms发送端,发送一次数据。D2 电平反一次。接收端同步。D2引脚电平。USART 输出接收到的数据。

注意以下配置引脚。
MISO -> 12
MOSI -> 11
SCK -> 13
CE -> 8
CSN -> 10

LED+ -> 2
LED- -> GND

就如下:发送端地址是 "pami1", 接收端地址是 "12345" ,按理说因该是收不到数据的。可是结果能收到数据。
不管是山寨的 NRF24L01, 还是 SI24R1 ,还是 原装的 nRF24L01。结果都一样。还是这个地址我理解错了?

发送端代码:
[pre lang="arduino" line="1" file="nRF24_TX"]#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

void setup() {
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  Mirf.setTADDR((byte *)"pami1");   // 配置发送地址
  //Mirf.setTADDR((byte *)"serv1");
  Mirf.cePin = 8;   // CE PIN
  Mirf.csnPin = 10; // CSN PIN
  Mirf.channel= 23; // NRF24 通道
  Mirf.payload = 16;// 数据长度
  Mirf.config();

  pinMode(2, OUTPUT);   // LED + 用于查看发射状态
}

void loop() {
  char data[16] = {'1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F'}; //"1234567890ABCDEF";
  digitalWrite(2, HIGH);
  Mirf.send((byte *)&data); // 发送数据
  while(Mirf.isSending());  // 等待发送完成
  delay(500);
  
  char data1[16] = {'0','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O'};
  digitalWrite(2, LOW);
  Mirf.send((byte *)&data1);
  while(Mirf.isSending());
  delay(500);
}[/code]

接收端代码:
[pre lang="arduino" line="1" file="nRF24_RX"]#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

char data[20] = "1234567890abcde";

void setup() {
  Serial.begin(9600);
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  Mirf.setRADDR((byte *)"12345"); // 配置接收地址
  //irf.setRADDR((byte *)"serv1");
  Mirf.cePin = 8;   // CE PIN
  Mirf.csnPin = 10; // CSN PIN
  Mirf.channel= 23; // NRF24 通道
  Mirf.payload = 16;// 数据长度
  Mirf.config();

  pinMode(2, OUTPUT);   // LED + 用于查看接收状态
  Serial.println(data);
}

void loop() {
  if(Mirf.dataReady()) {  // 检测是否收到数据
      Mirf.getData((byte *)&data);

      Serial.println(data);
      if(data[0] == '1') {
        digitalWrite(2, HIGH);
      }else if(data[0] == '0') {
        digitalWrite(2, LOW);
      }
  }
}[/code]
回复

使用道具 举报

 楼主| 发表于 2015-12-1 20:47:21 | 显示全部楼层
{:soso_e132:} 没人遇见过这个问题?{:soso_e141:}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-2 00:16:44 | 显示全部楼层
本帖最后由 帕米 于 2015-12-2 00:28 编辑

擦,要不要这么 Bug. 这么多人用就没一个人发现。。。还大牛写的呢。还是 自己写驱动库靠谱。
官方的示例是写不进收发地址的。还是原来默认的0xE7E7E7E7E7. 所以怎么配地址都是无效。。。
Mirf.setRADDR(); Mirf.setTADDR(); 函数得往下放才行。


本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-2 00:23:01 | 显示全部楼层
搞定,请各位帮忙验证验证。

[pre lang="arduino" line="1" file="TX"]#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

void setup() {
  Serial.begin(9600);
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
//  Mirf.setTADDR((uint8_t *)"alex1"); // 1 Set Tx Addr, bug Error
  Mirf.cePin = 8;   // CE PIN
  Mirf.csnPin = 10; // CSN PIN
  Mirf.channel= 23; // NRF24 通道
  Mirf.payload = 16;// 数据长度
  
  Mirf.setTADDR((uint8_t *)"pami1");  // 2 Set Tx Addr, OK Right
  Mirf.config();

  pinMode(2, OUTPUT);

  testReadAddress();
}

void testReadAddress() {
  Serial.println("Read nRF24L01 Address REG: ");
  char address[5];
  Mirf.readRegister(TX_ADDR,(uint8_t *)&address, 5);
  Serial.println(address);    // print address char

  // print address hex
  for(int i=0; i< 5; i++) {
    Serial.print("0x");
    Serial.print(address,HEX);
    Serial.print(", ");
  }
  Serial.println();  
}

void loop() {
  char data[16] = {'1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F'}; //"1234567890ABCDEF";
  digitalWrite(2, HIGH);
  Mirf.send((byte *)&data); // 发送数据
  while(Mirf.isSending());  // 等待发送完成
  delay(250);

  char data1[16] = {'0','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O'};
  digitalWrite(2, LOW);
  Mirf.send((byte *)&data1);
  while(Mirf.isSending());
  delay(250);
}
[/code]
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 13:23 , Processed in 0.036351 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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