【雕爷学编程】Arduino动手做(112)---2.4G24L01无线模块

news/2024/11/23 4:10:14/

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十二: NRF24L01+ 无线模块 功率加强版 2.4G无线收发通信模块 黑金刚

在这里插入图片描述

NRF24L01
是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型“SchockBurst”模式控制器、功率放大器、晶体振荡器、调制器和解调器。输出功率频道选择和协议的设置可以通过SPI 接口进行设置。几乎可以连接到各种单片机芯片,并完成无线数据传送工作。极低的电流消耗:当工作在发射模式下发射功率为0dBm 时电流消耗为11.3mA ,接收模式时为12.3mA,掉电模式和待机模式下电流消耗更低。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
NRF24L01性能参数
◆ 小体积,QFN20 4x4mm封装
◆ 宽电压工作范围,1.9V~3.6V,输入引脚可承受5V电压输入
◆ 工作温度范围,-40℃~+80℃
◆ 工作频率范围,2.400GHz~2.525GHz
◆ 发射功率可选择为0dBm、-6dBm、-12dBm和-18dBm
◆ 数据传输速率支持1Mbps、2Mbps [1]
◆ 低功耗设计,接收时工作电流12.3mA,0dBm功率发射时11.3mA,掉电模式时仅为900nA
◆ 126个通讯通道,6个数据通道,满足多点通讯和调频需要
◆ 增强型“ShockBurst”工作模式,硬件的CRC校验和点对多点的地址控制
◆ 数据包每次可传输1~32Byte的数据
◆ 4线SPI通讯端口,通讯速率最高可达8Mbps,适合与各种MCU连接,编程简单
◆ 可通过软件设置工作频率、通讯地址、传输速率和数据包长度
◆ MCU可通过IRQ引脚块判断是否完成数据接收和数据发送

在这里插入图片描述
在这里插入图片描述
NRF24L01无线模块
(1) 2.4Ghz 全球开放 ISM 频段免许可证使用
(2) 最高工作速率 2Mbps,高效 GFSK 调制,抗干扰能力强,特别适合工业控制场合
(3) 126 频道,满足多点通信和跳频通信需要
(4) 内置硬件 CRC 检错和点对多点通信地址控制
(5) 低功耗 1.9 - 3.6V 工作,待机模式下状态为 22uA;掉电模式下为 900nA
(6) 内置 2.4Ghz 天线,体积种类多样
(7) 模块可软件设地址,只有收到本机地址时才会输出数据(提供中断指示),可直接接各种单片机使用,软件编程非常方便
(8) 内置专门稳压电路,使用各种电源包括 DC/DC 开关电源均有很好的通信效果
(9) 2.54MM 间距接口,DIP 封装
(10)工作于 Enhanced ShockBurst 具有 Automatic packethandling, Auto packet transaction handling,具有可选的内置包应答机制,极大的降低丢包率。
(11)与 51 系列单片机 P0 口连接时候,需要加 10K 的上拉电阻,与其余口连接不需要。
(12)其他系列的单片机,如果是 5V 的,请参考该系列单片机 IO 口输出电流大小,如果超过 10mA,需要串联电阻分压,否则容易烧毁模块! 如果是3.3V的,可以直接和RF24l01模块的IO口线连接。比如AVR系列单片机如果是5V 的,一般串接2K 的电阻。

在这里插入图片描述
NRF24L01无线模块接口说明

(1) VCC 脚接电压范围为 1.9V~3.6V 之间,不能在这个区间之外,超过 3.6V 将会烧毁模块。推荐电压 3.3V 左右。

(2) 除电源 VCC 和接地端,其余脚都可以直接和普通的 5V 单片机 IO口直接相连,无需电平转换。当然对 3V 左右的单片机更加适用了。

(3) 硬件上面没有 SPI 的单片机也可以控制本模块,用普通单片机 IO口模拟 SPI 不需要单片机真正的串口介入,只需要普通的单片机 IO 口就可以了,当然用串口也可以了。

在这里插入图片描述
NRF24L01无线模块的特点

低应用成本:NRF24L01集成了所有与RF协议相关的高速信号处理部分,比如:自动重发丢失数据包和自动产生应答信号等,NRF24L01的SPI接口可以利用单片机的硬件SPI口连接或用单片机I/O口进行模拟,内部有FIFO可以与各种高低速微处理器接口,便于使用低成本单片机。

便于开发:由于链路层完全集成在模块上,非常便于开发。自动重发功能,自动检测和重发丢失的数据包,重发时间及重发次数可软件控制自动存储未收到应答信号的数据包自动应答功能,在收到有效数据后,模块自动发送应答信号,无须另行编程载波检测—固定频率检测内置硬件CRC检错和点对多点通信地址控制数据包传输错误计数器及载波检测功能可用于跳频设置可同时设置六路接收通道地址,可有选择性的打开接收通道标准插针Dip2.54MM间距接口,便于嵌入式应用。

在这里插入图片描述
实验一百一十二: NRF24L01+ 无线模块 功率加强版 2.4G无线收发通信模块 黑金刚
接线示意图

在这里插入图片描述
在这里插入图片描述
Arduino实验开源代码

/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百一十二: NRF24L01+ 无线模块 功率加强版 2.4G无线收发通信模块 黑金刚
1、安装“Mirf”库(下载链接 https://github.com/aaronds/arduino-nrf24l01)安装“rf24”库(下载链接 https://github.com/nRF24/RF24)2、项目测试 :NRF24L01最简单测试之Client 示例代码3、模块接线Arduino uno  ---  nRF24L013.3V            ---  VCC:模块供电引脚GND            ---  GND:模块接地引脚D7              ---  CSN:接收端选择引脚D8              ---  CE:发射/接受状态选择引脚D11            ---  MOSI :控制端输出,接收端输入引脚D13            ---  SCK:时钟信号D12            ---  MISO:控制端输入,接收端输出引脚*IRQ引脚在本例中不需要接*/#include <SPI.h>#include <Mirf.h>#include <nRF24L01.h>#include <MirfHardwareSpiDriver.h>void setup(){Serial.begin(9600);/** Setup pins / SPI.*//* To change CE / CSN Pins:** Mirf.csnPin = 9;* Mirf.cePin = 7;*//*Mirf.cePin = 7;Mirf.csnPin = 8;*/Mirf.spi = &MirfHardwareSpi;Mirf.init();/** Configure reciving address.*/Mirf.setRADDR((byte *)"clie1");/** Set the payload length to sizeof(unsigned long) the* return type of millis().** NB: payload on client and server must be the same.*/Mirf.payload = sizeof(unsigned long);/** Write channel and payload config then power up reciver.*//** To change channel:** Mirf.channel = 10;** NB: Make sure channel is legal in your area.*/Mirf.config();Serial.println("Beginning ... ");}void loop(){unsigned long time = millis();Mirf.setTADDR((byte *)"serv1");Mirf.send((byte *)&time);while(Mirf.isSending()){}Serial.println("Finished sending");delay(10);while(!Mirf.dataReady()){//Serial.println("Waiting");if ( ( millis() - time ) > 1000 ) {Serial.println("Timeout on response from server!");return;}}Mirf.getData((byte *) &time);Serial.print("Ping: ");Serial.println((millis() - time));delay(1000);}

实验串口返回情况

在这里插入图片描述
Arduino实验开源代码之二

/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百一十二: NRF24L01+ 无线模块 功率加强版 2.4G无线收发通信模块 黑金刚1、安装“Mirf”库(下载链接 https://github.com/aaronds/arduino-nrf24l01)安装“rf24”库(下载链接 https://github.com/nRF24/RF24)2、项目测试 :NRF24L01最简单测试之Server示例代码3、模块接线Arduino uno  ---  nRF24L013.3V            ---  VCC:模块供电引脚GND            ---  GND:模块接地引脚D7              ---  CSN:接收端选择引脚D8              ---  CE:发射/接受状态选择引脚D11            ---  MOSI :控制端输出,接收端输入引脚D13            ---  SCK:时钟信号D12            ---  MISO:控制端输入,接收端输出引脚*IRQ引脚在本例中不需要接*/#include <SPI.h>#include <Mirf.h>#include <nRF24L01.h>#include <MirfHardwareSpiDriver.h>void setup(){Serial.begin(9600);/** Set the SPI Driver.*/Mirf.spi = &MirfHardwareSpi;/** Setup pins / SPI.*/Mirf.init();/** Configure reciving address.*/Mirf.setRADDR((byte *)"serv1");/** Set the payload length to sizeof(unsigned long) the* return type of millis().** NB: payload on client and server must be the same.*/Mirf.payload = sizeof(unsigned long);/** Write channel and payload config then power up reciver.*/Mirf.config();Serial.println("Listening...");}void loop(){/** A buffer to store the data.*/byte data[Mirf.payload];/** If a packet has been recived.** isSending also restores listening mode when it* transitions from true to false.*/if(!Mirf.isSending() && Mirf.dataReady()){Serial.println("Got packet");/** Get load the packet into the buffer.*/Mirf.getData(data);/** Set the send address.*/Mirf.setTADDR((byte *)"clie1");/** Send the data back to the client.*/Mirf.send(data);/** Wait untill sending has finished** NB: isSending returns the chip to receving after returning true.*/Serial.println("Reply sent.");}}

实验串口返回情况
在这里插入图片描述
实验场景图

在这里插入图片描述

实验开源仿真编程(Linkboy V4.62)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/430161.html

相关文章

Java语言格式化返回日期为北京时间(东八区)

最近在开发项目过程中&#xff0c;发现返回的数据中现实的日期与数据库中日期大概相差8小时&#xff0c;这是因为直接从数据库中查询出来的时间是格林威治时间&#xff0c;而不是北京&#xff08;东八区&#xff09;时间&#xff0c;所以我们需要做日期格式化&#xff0c;将格林…

北京时间与UTC时间转换

UTC时间也称为世界标准时间&#xff0c;或协调世界时&#xff08;英语&#xff1a;Coordinated Universal Time&#xff09;&#xff0c;北京时间是东八区&#xff0c;领先UTC 8个小时。 UTC 时区差&#xff1d; 本地时间&#xff0c; 时区差东为正&#xff0c;西为负&#xf…

北京共有多少个区?_北京城中区是什么?城郊区是什么?

北京共有多少个区&#xff1f;_北京城中区是什么&#xff1f;城郊区是什么&#xff1f; 北京有几个区&#xff1a; 北京共有16区2县&#xff1a;东城区、西城区、崇文区、宣武区、朝阳区、海淀区、丰台区、石景山区、通州区、平谷区、顺义区、怀柔区、昌平区、门头沟区、房山区…

京区航天研究所 哪些比较好的研究所?

第一梯队&#xff1a;一院一部、战术武器部、10所、12所、研发部、空天部&#xff0c;五院501所&#xff08;总体设计部&#xff09;、502所、通导部、遥感部、钱室&#xff08;所人均年薪35w-50w级别&#xff09; 第二梯队&#xff1a;一院14所、15所&#xff0c;二院未来实验…

北京信息科技大学计算机研究生在哪个校区,北京信息科技大学有几个校区,哪个校区最好及各校区介绍...

一、北京信息科技大学有几个校区 北京信息科技大学有5个校区&#xff0c;分别是小营校区、健翔桥校区、清河校区、金台路校区、酒仙桥校区。 二、北京信息科技大学哪个校区最好及各校区介绍 北京信息科技大学有5个校区&#xff0c;分别是小营校区、健翔桥校区、清河校区、金台路…

关于征集2022年北京市东城区科技计划项目的通知

各有关单位&#xff1a; 为加强国际科技创新中心建设&#xff0c;推动科技成果落地转化&#xff0c;鼓励科技创新&#xff0c;参照北京市有关科技计划项目&#xff08;课题&#xff09;与经费管理的有关办法&#xff0c;东城区科学技术和信息化局启动2022年度东城区科技计划项…

python3 时区 时间戳 指定输入时间为东八区时间、北京时间

前言 一般的时间字符串是这样的&#xff1a;2021-07-24 21:23:51 *其实少了时区信息&#xff0c;只是默认为东八区 所以也有这样写的&#xff1a;2021-07-24T21:23:5108:00 *那个08:00就代表是东八区 也有用unix时间戳的&#xff1a;1627133031.994444 *时间戳就是当前时间…

php太平洋时间转成北京时间,太平洋时间和北京时间换算(太平洋时间现在几点)...

那个。。。太平洋时间 :6月29号的3:30 pm 是北京时间多少???是不是6. 太平洋时间是美国用的时间 PST=UTC-8h太平洋标准时 UTC是协调世界时,也称世界同步时间 北京时间=UTC+8h=PST+8+8=PST+16h 格林威治时间(现在地理课本一般译为格林尼治时间)指的是0度经线所用的时间,为…