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

news2024/11/16 15:36:36

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  ---  nRF24L01

3.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  ---  nRF24L01

3.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.coloradmin.cn/o/655438.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python怎么调整黑色的SEO?

Python怎么调整黑色的SEO&#xff1f; 在当今互联网的大环境下&#xff0c;各种搜索引擎的存在具有巨大的价值&#xff0c;特别是Google&#xff0c;百度等常用搜索引擎的SEO排名对于企业、个人品牌的宣传有着极其重要的意义。但是&#xff0c;如果出现黑色SEO的情况&#xff…

Spark操作HBase的数据,实现列值的计算

本文将介绍如何使用Spark操作HBase的数据&#xff0c;实现列之间的计算&#xff0c;以特征值计算为例。特征值是指从原始数据中提取出来的具有代表性或判别性的数值&#xff0c;可以用于数据分析或机器学习等领域。本文将使用hbase-spark连接器&#xff0c;通过Spark RDD的方式…

深度解析:圣湘生物的数字化转型升级之路(附方案详情)

随着“互联网”医疗技术在医疗行业的应用不断深化&#xff0c;数字化正在加速推进IVD行业的创新。 当前&#xff0c;IVD企业应对机遇和挑战的核心是提升竞争力。 IVD企业基于企业资源&#xff0c;提升综合竞争力主要分【硬实力】和【软实力】。 一方面&#xff1a;需要企业不…

跟李沐学AI;Meta可能让其开源AI模型商业化,让开发者赚钱

&#x1f989; AI新闻 &#x1f680; Meta可能让其开源AI模型商业化&#xff0c;让开发者赚钱 摘要&#xff1a;Meta正考虑将其开源大语言模型&#xff08;LLM&#xff09;的下一个版本用于商业用途&#xff0c;这可以为聊天机器人等提供支持。此举可能会让更多开发者使用替代…

张量分解(Cp、Tuker、Block-Term)

张量 张量是向量或矩阵在维度空间上的高阶扩展。 一个 ( p , q ) (p,q) (p,q)型的张量 T T T被定义为一个多重线性映射。 T : V ∗ ⋯ V ∗ V ⋯ V ↦ R , T:V^* \times \dots \times V^* \times V \times \dots \times V \mapsto \R, T:V∗⋯V∗V⋯V↦R, 其中 V V V 是…

用GPT4写2023高考语文作文,新课标I卷,Ⅱ卷

文章目录 新课标Ⅰ卷新课标Ⅱ卷总结 每年的高考语文题目都会是热议的话题&#xff0c;今年同样也不例外。但是今年讨论的话题除了作文题目本身之外&#xff0c;对于chatgpt写出的作文会是什么样子的也​让广大网友同样期待 新课标Ⅰ卷 好的故事&#xff0c;可以帮我们更好地表达…

chatgpt赋能python:Python怎么让结果同行输出

Python怎么让结果同行输出 在Python编程中&#xff0c;我们经常需要打印出一系列的结果并在同一行输出。这对于输出更为整洁的结果和提高代码清晰度都是非常有帮助的。下面就让我们来介绍一些实现这一功能的方法。 方法一&#xff1a;使用 end 参数 在Python的 print() 函数…

机器视觉_HALCON_模板匹配_1.CreateScaledShapeModel

文章目录 一、前言二、create_scaled_shape_model 算子2.1 名称2.2 算子签名2.3 描述2.3.1 输入参数详述2.3.2 完整的预生成模型 2.4 执行信息2.5 参数2.6 执行结果2.7 可能的前驱算子2.8 可能的后继算子2.9 替代选择 一、前言 在HALCON算子手册中&#xff0c;对算子的介绍通常…

chatgpt赋能python:Python访问数据库

Python访问数据库 Python是一种高级编程语言&#xff0c;在数据分析、科学计算和Web开发等领域都有广泛的应用。Python还有一个很强的优势就是它能够方便地访问数据库。在本文中&#xff0c;我们将介绍Python如何与数据库交互以及Python数据库API的使用。 Python的数据库API …

chatgpt赋能python:Python如何访问数组中的元素

Python如何访问数组中的元素 Python是一种高级编程语言&#xff0c;访问数组中的元素也非常简单。 它提供了一种简单而灵活的方式访问数组中的元素&#xff0c;这使得在Python中使用数组变得非常容易。在本文中&#xff0c;我们将介绍如何在Python中访问数组中的元素以及如何使…

DecimalFormat基本用法

1.保留两位小数(截断&#xff09; 下面展示一些 内联代码片。 double num 11.256;DecimalFormat df new DecimalFormat("#.##");//指定RoundingModedf.setRoundingMode(RoundingMode.DOWN);String str df.format(num);double formatNum Double.parseDouble(str)…

2023年05月份青少年软件编程Scratch试卷三级真题

2023-05 Scratch三级真题 分数&#xff1a;100 题数&#xff1a;38 测试时长&#xff1a;60min 一、单选题(共25题&#xff0c;共50分) 1. 关于变量&#xff0c;下列描述错误的是&#xff1f;&#xff08;A&#xff09;&#xff08;2分&#xff09; &#xff08;变量那一栏…

对于ChatGPT,马化腾、马斯克等科技大佬竟然这么说!

ChatGPT一夜爆火之后&#xff0c;国内几乎是各大互联网公司都在摩拳擦掌&#xff0c;跃跃欲试&#xff0c;从百度的文心一言&#xff0c;到阿里的通义千问&#xff0c;还有360的智脑&#xff0c;讯飞的星火&#xff0c;语言大模型如雨后春笋一般涌出&#xff0c;犹如2014年新能…

代码审计——未授权访问详解

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 未授权访问漏洞&#xff0c;是在攻击者没有获取到登录权限或未授权的情况下&#xff0c;或者不需要输入密码&#xff0c;即可通…

express 基础知识实战

1 Express框架介绍与安装 1.1 Express 安装 生成配置文件package.json npm init --yes安装 Express 框架&#xff0c;就是使用 npm 的命令。 npm install express --save yarn add express --save初次使用 const express require(express) //实例化express const app ex…

全志V3S嵌入式驱动开发(u盘写读)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 对于现在的soc来说&#xff0c;基本上usb是标配的。它一般需要支持usb host、device和otg三种模式。简单解释下&#xff0c;host模式&#xff0c;就…

数据库原理与应用第2章作业

数据库原理与应用第2章作业 一.单选题(共15题&#xff0c;45分)二.填空题(共5题&#xff0c;25分)三.简答题(共1题&#xff0c;10分)四.计算题(共1题&#xff0c;20分) 一.单选题(共15题&#xff0c;45分) 1.(单选题&#xff0c;3分)关系数据库管理系统应能实现的专门关系运算…

chatgpt赋能python:Python怎么让输出换行?

Python怎么让输出换行&#xff1f; 对于有10年python编程经验的工程师&#xff0c;输出换行是一项基本的操作。在本篇文章中&#xff0c;我们将讨论Python中的换行方法&#xff0c;以便您可以更好地控制输出。 什么是Python的换行符&#xff1f; 在Python中&#xff0c;换行…

SPI总线

目录 声明 1、 SPI简介 2、 SPI特点 2.1采用主-从模式(Master-Slave) 的控制方式 2.2采用同步方式(Synchronous)传输数据 2.3数据交换(Data Exchanges) 2.4 SPI有四种传输模式 2.5 SPI只有主模式和从模式之分。 3、 工作机制 3.1概述 3.2 Timing 声明 转自&#xf…

多层感知机与深度学习算法概述

多层感知机与深度学习算法概述 读研之前那会儿我们曾纠结于机器学习、深度学习、神经网络这些概念的异同。现在看来深度学习这一算法竟然容易让人和他的爸爸机器学习搞混…可见深度学习技术的影响力之大。深度学习&#xff0c;作为机器学习家族中目前最有价值的一种算法&#…