设计与开发

nrf24l01 与单片机连接 单片机无线通信模块——NRF24L01

小编 2024-11-24 设计与开发 23 0

单片机无线通信模块——NRF24L01

这是一个NRF24L01模块,如图1,它是一款2.4GHz的无线收发一体模块,我们使用它来实现单片机之间的无线通信。这个模块的核心元器件就是中间的这颗NRF24L01芯片,这颗芯片是欧美品牌,而外围模块则是中国制造。

图1 NRF24L01模块

它有着迷你的外形尺寸,使用起来非常方便。板载蛇行天线最大传输距离为100米。支持一对六数据通信。这个模块通过八个直插引脚与外界进行连接,供电电压为1.9至3.6伏,其他数据引脚可以直接连接3.3V或5V单片机。空中传输速率有2M、1M和250KHz可选。它与主控芯片之间的通信方式为4线SPI通信,最高速率为10MHZ。

图2 NRF24L01的电性能

这是模块的PCB布线图,第1、2引脚为电源引脚。第3引脚为模块的低电平使能引脚。第4引脚用于控制模块的片选,用于开始一个SPI通信。第5、6、7、8为模块的SPI通信口,他们依次为SPI总线时钟、主器件输出从器件输入、主器件输入从器件输出和中断信号输出引脚。如图3.

图3 引脚功能描述

这是两颗单片机借助NRF24L01实现无线通信的接线原理图,他们的连接非常简单。这个模块会占用单片机的6个引脚,我们使用单片机的2个普通IO端口连接模块的片选和使能引脚,用单片机的SPI引脚或普通IO口模拟SPI总线连接模块的SPI引脚即可实现数据交换。如图4.

图4 接线原理图

用24G模块NRF24L01做一个无线遥控开关,远程控制很方便

大家好,我是阿乐,今天教大家做一个无线遥控开关。

如下示意图:

我想要实现的功能是,遥控端输出一个高电平或者低电平,接收端也能同时输出一个高电平或者低电平,这样就能隔空控制很多东西,也不用拉线布线。

手头正好有2.4G模块,型号是NRF24L01,那我们就用它来实现。这个模块也不算贵,如下图:

这种外接胶棒天线带PA放大的也就十块钱左右,号称距离可达1100米,当然实际我也没去试过。

然后更常见更便宜的是板载天线的,体积也更小,价格也就四五块钱,非常值得入手玩玩。实物如下图:

今天我以这个外接胶棒天线带PA放大的NRF24L01作为例子来给大家讲解。先来讲讲它的引脚,把它反过来,令光滑没有元器件的一面对着我们,这面就是背面,它的正面有密密麻麻的小小个的元器件。示意图如下:

将模块翻过来,看到它的背面,它有两排排针,如下图:

最上面两个排针,左边是电源输入引脚,可输入3V-3.6V的直流电,推荐是用3.3V。过来右边是电源地,GND,是电源负极。下来第二排两个排针,左边是CSN,右边是CE。下来第三排两个排针,左边MOSI,右边是SCK。最后一排两个排针,左边是IRQ,右边是MISO。

接下来给大家解释一下这些引脚对应的功能:

CSN,它是Chip Select Not的缩写,是接收端选择引脚, Not代表低电平有效。

CE是Chip Enable的缩写,是发射/接收状态选择引脚。

MOSI是Master Out Slave In的缩写,主出从入,是控制端输出,接收端输入引脚,通常简写成MO。

SCK是Serial Clock的缩写,是时钟信号脚。

IRQ是Interrupt Request的缩写,是中断请求脚,今天我们不会用到这个脚。

MISO是Master In Slave Out的缩写,主入从出,是控制端输入,接收端输出引脚,通常简写成MI。

单独的这个NRF24L01模块自己还不能完成通讯去收发数据,我们需要一个单片机通过编程给它设置,一个当做发射端,另一个当做接收端,这样才能用来一对一通讯收发数据。当然它也可以用来设置一对多通讯。

这样子的话我们就会需要两个NRF24L01模块,两个单片机。单片机我用Arduino pro mini,如下图:

上图中的这个小东西,它相当于一个小开发板,用它来控制设置NRF24L01模块,别人已经写有很多库了,我直接调用就可以,就不用去底层设置寄存器,不用什么都亲历亲为,可以省下很多时间,这对于初学者来说很容易上手,可以快速开发,这个就是用Arduino的好处。一会儿我们直接用别人写好的库,直接修改例程就得了。

好,看硬件连接,我简单画了个接线图,如下图:

Arduino和NRF24L01模块的连线,无论发射端还是接收端都是这样连。

看到下面发射端的接线图:

在发射端我增加了一个按键,当按键没按下时,Arduino的D3号脚检测到的是低电平,因为直接接一个10K电阻到负极了嘛,所以是0。当按键按下时,接通5V的直流电到D3号端口,D3号端口又对地接一个10K电阻,所以在端口这里得到的是高电平,是1。

好,看接收端,如下图:

我在接收端的Arduino D3号脚接了一个4.7K欧姆的电阻和8550三极管,用来驱动蜂鸣器。当我们从D3给一个低电平的时候,蜂鸣器就会响起来,蜂鸣器负极的100Ω的电阻是限流电阻。

接下来讲一下编程思路:当发射端检测到我按下这个按键时,也就是检测到一个高电平时,就把这个高电平的数据发送到接收端,接收端接收到这个高电平的数据后就输出一个低电平,驱动蜂鸣器响起来,否则输出一个高电平,蜂鸣器不响。在这里不详细讲2.4G模块的具体设置方式,我只讲整体程序的实现过程。

在开始编程前我们需要下载一个库,就是别人编好的函数与例程,到时候方便我们直接调用。这个库可以自己到github去下载,也可以私聊我要,库名称是RF24-master,下好后把它丢到我们安装Arduino这个软件的根目录下的libraries文件夹中就可以了。

好,看程序,下图是发射端的程序:

红色方框1中#include是我们要引用的程序库,把它们包含进来。红色横线2是定义Arduino3号引脚把它命名为buttonPin,后面当出现buttonPin的地方说明是要控制3号引脚。往下,红色横线3是定义一个整型变量buttonState,用来存放按键的键值。

看到下面这张图片:​

红色横线1的语句是把7脚设置为CE脚, 8脚设置为CSN脚。红色横线2是设置通讯通道地址00001,接下来红色方框中的是初始化函数,先设置3脚为输入引脚,启动nRF24模组,设定通道地址。在这里多说几句,nRF24L01模块在2.4GHz~2.525GHz这个频带上,在这个频带上划分了0-125個频道,我们通过程序可以自由设定使用的频道,只要发射端和接收端所处的频道相同就可以了。然后每个频道内可容纳6个通道(pipe),每个通道可对应一个发射器;一个接收器可接收来自6个发射器的讯号。一个频道内,至少要有一个发射器和一个接收器,才能连线通讯。发射器可以位于0-5任一通道,并且指定一个唯一的地址值。接下来是设定广播功率,设置功率为RF24_PA_MIN,然后停止侦听,就是设定成发射模式。

如上截图,在循环函数中,读取3号脚的状态,使用radio.write()函数将数据发送出去。发射端的完整程序就是这样,内容并不多。验证一下,没问题后选好板子的对应型号,选端口,上传就完成发射端的程序写入。

接下来讲讲接收端的程序,如下图:

前面的设置基本是一样的,不同的是接收端定义3号脚是用来控制蜂鸣器,同样也定义一个整型变量buttonState,用来存放收到的按键的键值。这里设置引脚和通道地址跟前面一样的,发射端和接收端必须处于同一地址。

如上截图,在初始化函数中,将3脚设置为输出引脚,将3脚置为高电平,启动NRF24模组,设定通道地址,设定广播功率。

如上截图,在循环函数中,开始监听无线广播,检查是否有可用的数据传输过来,当有数据可用时,我们将读取它,将其保存到buttonState中去,if函数判断,如果发射端按下按键了,则输出低电平,驱动蜂鸣器响起;否则,如果发射端没有按下按键,则保持高电平,蜂鸣器不响。这就是接收端的整个程序,也验证一下,没问题后选好板子的对应型号,选端口,上传就完成了。

最后看一下演示效果图:

在室内测试,信号传输稳定,通讯效果很好;在室外休闲公园里测试,以发射端为圆心,在大概800米空旷(有一些树和景观石的遮挡)的半径内,信号传输依旧稳定,通讯效果也很好,更远的距离没去测试过。

详细视频教程请移步到我的头条主页观看。

好的,我制作这个无线传输开关的作用可不是为了遥控这个蜂鸣器而已,我是想把语音识别模块和这个结合起来,对家里的家电进行远程无线遥控,这样我们离智能生活岂不是又更近了一步?

好啦,本期教程就讲这么多,我们下期再见,拜拜!

相关问答

我想把 单片机 的信息通过 nrf24l01 传到PC 机上,应当怎么弄呢?-...

佳能EF24mmf/1.4LIIUSM讨论回答(4)单片机+nrf24L01做为发送端:任务是把要发送的信息发送出去;单片机+nrf24L01做为接收端:任务是nrf24l01接收发送...

nrf24l01 无线模块怎么遥控?

单片机端:通过NRF24L01的SPI接口,和单片机的硬件SPI口连接或用单片机I/O口进行模拟连接这个方式成本较低;如果不熟悉或者硬件受限,那么可以利用SPI转串口UART...

无线收发芯片 nrf24l01 或者 nrf 905等都是工作在3V电压下,而51 单片机 引脚电压都是5V?

构成收发系统肯定是不行的。但是单片机可以直接和两种芯片直连,那是没问题的!两种芯片的电压、只能是3.3v,不能大了!会烧坏的单片机直接给5v就行!祝你好运...

如何通过rs485总线从电表上采集数据(用51 单片机 采集), 单片机 还能通过无线模块 NRF24L01 发送数据吗?

当然可以。不过首先要控制MAX485,从接收和发送数据。收到数据后,再驱动24L01发送数据。但你必须了解电表的485通信协议,才能读取它的数据。当然可以。不...

有谁能给我推荐一下:张家界技敏健康码信息机,健康码信息机...

[回答]单片机+nrf24L01做为发送端:任务是把要发送的信息发送出去;单片机+nrf24L01做为接收端:任务是nrf24l01接收发送端发来的信息,并把信息送给单片机,单...

麻烦各位资深人士!我想了解 重庆什么是通信光模块,通信光...

[回答]NRF24L01(1)2.4Ghz全球开放ISM频段免许可证使用(2)最高工作速率2Mbps,高效GFSK调制,抗干扰能力强,特别适合工业控制场合(3)126频道,满足多点通信和...

单片机 控制程序( 单片机 控制无线收发芯片 NRF 401)?

。。。一定要用汇编写吗,如果是C写的话我倒能给你讲,前段时间刚做完无线模块。。。一定要用汇编写吗,如果是C写的话我倒能给你讲,前段时间刚做完无线模块

在线等: 单片机 实验箱多少钱?

[回答]武汉市海联天下物联网有限公司成立于2015年,专注于智能硬件方案的设计与实现。通过多年的努力先后给200多家企业和单位提供服务和产品,积累了丰富的...

大佬们,请教一下,长春防火墙收发模块组成部件,收发模块哪...

[回答]具体支持哪种就看模块的核心芯片了。我知道的,51单片机用的最多的是nRF905,全双工芯片,淘宝有现成模块。但是我觉得不是实时的大量的数据传输的话半...

单片机 为什么叫 单片机 ?

单片机之所以叫单片机,是因为单片机芯片把CPU、数据存储器、程序存储器、总线系统都集成到了一个芯片上。要搞清楚这个问题,我们必须先搞明白计算机的组成部分...

猜你喜欢