Arduino使用NRF24L01模块进行无线通信

Arduino使用NRF24L01模块进行无线通信

前言

​ 其实CSDN有很多关于这个无线模块的使用,包括Arduino的使用例程,但是实际自己跟着做一遍的时候还是发现了有些小问题,于是记录一下方便以后做其他有意思的小项目。(Arduino的库文件在文章末尾)

本文将实现2块Arduino板子之间的无线通信,并控制led的亮灭。
在这里插入图片描述

一、NRF24L01无线通信模块图示

1.引脚图

Arduino使用NRF24L01模块进行无线通信_第1张图片
这是该模块的背面引脚图,仅供参考。注意,有些并没有标明具体的引脚,但是顺序基本上是一致的。

正面图如下:
Arduino使用NRF24L01模块进行无线通信_第2张图片
图片来自某宝。(注意在购买时别搞错了,这个跟esp01模块长的很像)

二、参考接线

1.Nano与NRF模块:

Nano NRF模块
3.3v VCC
GND GND
8 CSN
7 CE
11 MOSI
13 SCK
12 MISO
置空 IRQ

注意NRF模块的VCC引脚电压一般是1.9v-3.6v,接5v很有可能会烧坏模块。

2.NRF模块与Arduino Uno:

Uno NRF模块
3.3v VCC
GND GND
8 CSN
7 CE
11 MOSI
13 SCK
12 MISO
置空 IRQ

注:led的正极接Uno的3号引脚,负极接GND。

三、发送端程序(Arduino Nano)

//发射端程序
#include 
#include 
#include 

RF24 radio(7,8);// CE,CSN

const byte address[6] = "00001";//指定一个地址,可以是自定义的其他地址,但要与接收端地址保持一致

void setup()
{
  Serial.begin(9600);//设置波特率
  Serial.println("请输入你要发送的数据:");//提示字符
  
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();//发送端,这里我设置为只发,实际是可以互传的
}
 
void loop()
{
  const char text1[] = "OOO";//要发送的内容
  const char text2[] = "CCC";
  radio.write(&text1,sizeof(text1));
  delay(1000);
  radio.write(&text2,sizeof(text2));
  delay(1000);

}

四、接收端程序(Arduino Uno)

//接收端程序
#include 
#include 
#include 
 
RF24 radio(7,8);// CE,CSN

int led = 3; //3号引脚接led

const byte address[6] = "00001";//与发送端的地址保持一致
 
void setup()
{
  pinMode(led,OUTPUT);
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0,address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();//开始监听,只进行接收
}
 
void loop()
{
  if(radio.available()){
  char text[32] = "";
  radio.read(&text,sizeof(text));
  Serial.println(text);//可以打开串口查看发送过来的数据是否正确

  if(text[1]=='O')//我这里只判断一个字符
    digitalWrite(led, HIGH);
  if(text[1]=='C')
    digitalWrite(led, LOW);
  }
}

五、实际效果测试

下面是效果图,led每隔1秒闪烁一次。
Arduino使用NRF24L01模块进行无线通信_第3张图片
由于没加天线,这个无线通信模块的透射性不是很强,当有障碍物阻挡的时候通信距离比较短,如果是在比较空旷的环境下通信距离至少有20米。

六、遇到的问题

实际在做的时候遇到了很多问题,但是每个人说的原因都不一样。

问题1:程序和接线都没问题了,但是接收不到信息
参考解答:
①有的人说可以在NRF模块的VCC和GND之间接一个1uf的电容,因为有些Arduino板子的滤波做的不好。(这个方案我没试过)
②用电脑的USB口或者一个充电宝给Arduino供电。(这是我采用的方案,一开始我用的是9v电池,但是发现Arduino板子不稳定,换成充电宝才稳定发送和接收)
③可能是使用的库有问题,需要把相关的库文件放在Arduino的安装目录下。
Arduino使用NRF24L01模块进行无线通信_第4张图片
注意:造成没正确通信的原因可能是多重的,可以自己多摸索一下。

问题2:能通信,但是接收到的信息不对
参考解答:
①有些人说是CSN引脚要接7号,CE引脚要接8号。但我实践证明,按我的这种方式进行接线是没问题的。(我是CSN接8号引脚,CE接7号引脚)

问题3:不同的Arduino板子通信引脚是否不一样?
参考解答:
不一样。Arduino mega和 Arduino Uno的通信引脚就不一样。
Arduino使用NRF24L01模块进行无线通信_第5张图片

参考链接

1.https://howtomechatronics.com/tutorials/arduino/arduino-wireless-communication-nrf24l01-tutorial/
2.https://www.bilibili.com/video/BV1Db41187Pj?spm_id_from=333.1007.top_right_bar_window_history.content.click

3.我使用的Arduino的相关库文件百度网盘链接如下:
链接:https://pan.baidu.com/s/1D1qXRaMpss7f5-e3e6ykOg?pwd=wnu9
提取码:wnu9
–来自百度网盘超级会员V5的分享

你可能感兴趣的:(Arduino,单片机,嵌入式硬件)