初学nrf24l01的问题-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5838|回复: 13

[未解决] 初学nrf24l01的问题

[复制链接]
发表于 2021-6-1 11:43 | 显示全部楼层 |阅读模式
发送端代码
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>


/*7CE 8CSN 11MOSI 12MISO 13SCK*/
char i = 22;
RF24 radio(7,8);//CE,CNS
const byte address[6] = "00001"; //设置通道地址


void setup() {
  Serial.begin(9600);
  radio.begin(); //创建对象
  radio.openWritingPipe(address); //使用openWrtingPipe()函数接受地址
  radio.setPALevel(RF24_PA_MIN); //设置功率大小
  radio.stopListening(); //设置为发射机
}


void loop() {


  radio.write(&i,sizeof(i));
  Serial.println(i);
}

发送端显示22 22 22
接收端代码
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>

RF24 radio(7,8);//CE,CNS
const byte address[6] = "00001"; //设置通道地

void setup() {

  Serial.begin(9600);
  radio.begin(); //创建对象
  radio.openReadingPipe(0,address); //使用openWrtingPipe()函数接受地址
  radio.setPALevel(RF24_PA_MIN); //设置功率大小
  radio.startListening(); //设置为接收机
}

void loop() {
  int i;
   if(radio.available())//检测是否有可接收数据
  {
    //digitalWrite(power,HIGH);//收到有效信号就开启驱动
    radio.read(&i,sizeof(i)); //读取数据并存储
    Serial.println(i);
  }
  else
  {
    Serial.println(333);
  }
}

接收端输出0 0 0 0 0 0 .....
--------------------------------------------------------------------
请问为什么没有接受到22 22


还有就是原本正常通信的两个单片机和模块,从面包板换成直接插线测试了接不行了,插回原来面包板也不行了,程序也每改,就是重新上传了。
谢谢各位帮忙解答!!!
 楼主| 发表于 2021-6-1 11:46 | 显示全部楼层
上面那个char i = 22;改为int了,没有变化
 楼主| 发表于 2021-6-1 21:23 | 显示全部楼层
SPI Frequency                = 10 Mhz
Channel                        = 0 (~ 2400 MHz)
RF Data Rate                = 1 MBPS
RF Power Amplifier        = PA_MIN
RF Low Noise Amplifier        = Disabled
CRC Length                = Disabled
Address Length                = 2 bytes
Static Payload Length        = 32 bytes
Auto Retry Delay        = 250 microseconds
Auto Retry Attempts        = 0 maximum
Packets lost on
    current channel        = 0
Retry attempts made for
    last transmission        = 0
Multicast                = Disabled
Custom ACK Payload        = Disabled
Dynamic Payloads        = Disabled
Auto Acknowledgment        = Disabled
Primary Mode                = TX
TX address                = 0x0000000080
pipe 0 (closed) bound        = 0x0000000080
pipe 1 (closed) bound        = 0x0000000000
pipe 2 (closed) bound        = 0x80
pipe 3 (closed) bound        = 0x00
pipe 4 (closed) bound        = 0x80
pipe 5 (closed) bound        = 0x00
这是加了printPrettyDetails();打印出来的结果
收发两端都是这样的,不知道有没有问题
发表于 2021-6-2 04:58 | 显示全部楼层
这帖子看过没?
开贴讲讲NRF24L01P,让你彻底搞懂它的工作原理,持续更新
https://www.arduino.cn/forum.php ... &fromuid=179950
(出处: Arduino中文社区)
 楼主| 发表于 2021-6-2 13:16 | 显示全部楼层
frankhan747 发表于 2021-6-2 04:58
这帖子看过没?
开贴讲讲NRF24L01P,让你彻底搞懂它的工作原理,持续更新
https://www.arduino.cn/forum.ph ...

看了一遍,也只是说了一些原理,我现在最想知道RF24库文件的解释和使用,先知道别人怎么写的,倒过来去查模块的工作方式和指令这样会容易学。像上面那个printPrettyDetails()主要什么用的,打印出来的数据有什么用。英文翻译一下我都能懂,但是对应的数据有什么作用。能不能根据这些数据去修改。还有教程里面提到的那些模块指令,像这些W_TX_PAYLOAD,是直接再库里面写的吧。这个教程用来写库根本不够用,库写不了,总应该用熟悉别人的库吧,然而我查了很久都没有RF24库的相关教程。只能考原本的注释,只能一知半解。您有什么好的建议吗?
 楼主| 发表于 2021-6-2 13:32 | 显示全部楼层
上面那个没有数据的解决了,电压不够用了板子的3.3v。改用5v的就有数据了。但是还是没有通讯成功

发送端

发送端

接收端,这次available()没有检出数据

接收端,这次available()没有检出数据
 楼主| 发表于 2021-6-2 14:23 | 显示全部楼层
修改了一下spi频率还有规范了一下地址代码
增加了
if (radio.testCarrier())//载波测试
  {
    Serial.println("ok");
  } else {
    Serial.println("no");
  }
发出端显示no
接收端显示ok
接受端仍未接受到信号
发表于 2021-6-2 15:09 | 显示全部楼层
本帖最后由 frankhan747 于 2021-6-2 15:30 编辑

程序看上去毫无问题;
你用的是印刷天线的小NRF模块还是带有SMA天线的NRF+PA+LNA模块?前者用板子的3.3V供电就行,后者需要专门加转接板,且转接板需要5V供电。直接用5V给NRF模块供电可能会烧坏
此外,建议检查一下SPI的接线是否正确(MOSI、MISO有没有接反,CE、CSN有没有接反)
如果软硬件都没有问题,那么很有可能是模块坏了(
虽然“一出问题就怀疑是硬件损坏”是一种毛病,但这种事情真的存在。我也买到过内部短路/死活读不出数的NRF模块,别人都行就它不行。只能换一家买

点评

还有一回,买来的MPU9250里面9组ADC居然坏了1组,Y轴加速度死活读不出来。做这种东西的厂家有时候挺不可靠的  发表于 2021-6-2 15:25
 楼主| 发表于 2021-6-2 15:31 | 显示全部楼层
成功了,之前加了powerup和powerDown的原因

发送代码

发送代码

接受代码

接受代码

接受串口

接受串口

发送代码串口显示

发送代码串口显示
 楼主| 发表于 2021-6-2 15:43 | 显示全部楼层
frankhan747 发表于 2021-6-2 15:09
程序看上去毫无问题;
你用的是印刷天线的小NRF模块还是带有SMA天线的NRF+PA+LNA模块?前者用板子的3.3V供 ...

用的NRF+PA+LNA模块,电用板子的5V焊了电容。初步测试通过了,把地址代码规范了一下,因为看上面的通道检测一开始的地址是对不上的,可能有通道没开好,就指定了通道传输,后来都对上了,就是没数据,可能是powerUp和powerDown的问题果然,注释掉就可以了。但是最怕拔掉电第二天插电测试之后又不行,之前试过很多次。什么都没动就插电打开串口一看,又不行了。这个问题真烦

点评

转接板本质上就是一个AMS1117-3.3稳压芯片+滤波电容+LED+电阻,NRF+PA+LNA不工作,十有八九是供电问题。开发板自己的3.3引脚电流不够  发表于 2021-6-8 10:00
哦!板子5v先接了一个3.3v的NRF转接板,2块钱,比1117方便多了  发表于 2021-6-2 16:12
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 03:45 , Processed in 0.126877 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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