找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3255|回复: 28
打印 上一主题 下一主题
收起左侧

【Arduino】108种传感器模块系列实验(116)--- 24L01无线模块

[复制链接]
跳转到指定楼层
楼主
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。

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





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

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



回复

使用道具 举报

板凳
ID:513258 发表于 2019-9-18 21:06 | 只看该作者

回复

使用道具 举报

地板
ID:513258 发表于 2019-9-18 21:46 | 只看该作者

回复

使用道具 举报

5#
ID:513258 发表于 2019-9-18 21:52 | 只看该作者

性能参数
◆ 小体积,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引脚块判断是否完成数据接收和数据发送

回复

使用道具 举报

6#
ID:513258 发表于 2019-9-18 21:57 | 只看该作者

NRF24L01电原理图
回复

使用道具 举报

7#
ID:513258 发表于 2019-9-19 08:53 | 只看该作者

回复

使用道具 举报

8#
ID:513258 发表于 2019-9-19 09:02 | 只看该作者

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 的电阻。

回复

使用道具 举报

9#
ID:513258 发表于 2019-9-19 09:29 | 只看该作者
接口说明
1) VCC 脚接电压范围为 1.9V~3.6V 之间,不能在这个区间之外,超过 3.6V 将会烧毁模块。推荐电压 3.3V 左右。
(2) 除电源 VCC 和接地端,其余脚都可以直接和普通的 5V 单片机 IO口直接相连,无需电平转换。当然对 3V 左右的单片机更加适用了。
(3) 硬件上面没有 SPI 的单片机也可以控制本模块,用普通单片机 IO口模拟 SPI 不需要单片机真正的串口介入,只需要普通的单片机 IO 口就可以了,当然用串口也可以了。




回复

使用道具 举报

10#
ID:513258 发表于 2019-9-19 09:31 | 只看该作者


应用领域
● 无线鼠标 键盘 游戏机操纵杆
● 无线门禁
● 无线数据通讯
● 安防系统
● 遥控装置
● 遥感勘测
● 智能运动设备
● 工业传感器
● 玩具

回复

使用道具 举报

11#
ID:513258 发表于 2019-9-19 09:40 | 只看该作者

回复

使用道具 举报

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

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



回复

使用道具 举报

13#
ID:513258 发表于 2019-9-19 11:14 | 只看该作者

回复

使用道具 举报

14#
ID:513258 发表于 2019-9-19 13:02 | 只看该作者

回复

使用道具 举报

15#
ID:513258 发表于 2019-9-19 14:08 | 只看该作者
  1. /*
  2. 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3. 实验一百一十六:NRF24L01+ 无线模块 功率加强版 2.4G无线收发通信模块 黑金刚
  4. 1、安装“Mirf”库(下载链接 https://github.com/aaronds/arduino-nrf24l01)
  5.      安装“rf24”库(下载链接 https://github.com/nRF24/RF24)
  6. 2、项目测试 :NRF24L01最简单测试之Client 示例代码
  7. 3、模块接线
  8. Arduino uno    ---    nRF24L01
  9. 3.3V                 ---    VCC:模块供电引脚
  10. GND                 ---    GND:模块接地引脚
  11. D7                    ---    CSN:接收端选择引脚
  12. D8                    ---    CE:发射/接受状态选择引脚
  13. D11                  ---    MOSI :控制端输出,接收端输入引脚
  14. D13                  ---    SCK:时钟信号
  15. D12                  ---    MISO:控制端输入,接收端输出引脚
  16. *IRQ引脚在本例中不需要接
  17. */

  18. #include <SPI.h>
  19. #include <Mirf.h>
  20. #include <nRF24L01.h>
  21. #include <MirfHardwareSpiDriver.h>

  22. void setup(){
  23.   Serial.begin(9600);
  24.   /*
  25.    * Setup pins / SPI.
  26.    */
  27.    
  28.   /* To change CE / CSN Pins:
  29.    *
  30.    * Mirf.csnPin = 9;
  31.    * Mirf.cePin = 7;
  32.    */
  33.   /*
  34.   Mirf.cePin = 7;
  35.   Mirf.csnPin = 8;
  36.   */
  37.   Mirf.spi = &MirfHardwareSpi;
  38.   Mirf.init();
  39.   
  40.   /*
  41.    * Configure reciving address.
  42.    */
  43.    
  44.   Mirf.setRADDR((byte *)"clie1");
  45.   
  46.   /*
  47.    * Set the payload length to sizeof(unsigned long) the
  48.    * return type of millis().
  49.    *
  50.    * NB: payload on client and server must be the same.
  51.    */
  52.    
  53.   Mirf.payload = sizeof(unsigned long);
  54.   
  55.   /*
  56.    * Write channel and payload config then power up reciver.
  57.    */
  58.    
  59.   /*
  60.    * To change channel:
  61.    *
  62.    * Mirf.channel = 10;
  63.    *
  64.    * NB: Make sure channel is legal in your area.
  65.    */
  66.    
  67.   Mirf.config();
  68.   
  69.   Serial.println("Beginning ... ");
  70. }

  71. void loop(){
  72.   unsigned long time = millis();
  73.   
  74.   Mirf.setTADDR((byte *)"serv1");
  75.   
  76.   Mirf.send((byte *)&time);
  77.   
  78.   while(Mirf.isSending()){
  79.   }
  80.   Serial.println("Finished sending");
  81.   delay(10);
  82.   while(!Mirf.dataReady()){
  83.     //Serial.println("Waiting");
  84.     if ( ( millis() - time ) > 1000 ) {
  85.       Serial.println("Timeout on response from server!");
  86.       return;
  87.     }
  88.   }
  89.   
  90.   Mirf.getData((byte *) &time);
  91.   
  92.   Serial.print("Ping: ");
  93.   Serial.println((millis() - time));
  94.   
  95.   delay(1000);
  96. }
复制代码


回复

使用道具 举报

16#
ID:513258 发表于 2019-9-19 14:12 | 只看该作者

回复

使用道具 举报

17#
ID:513258 发表于 2019-9-19 14:14 | 只看该作者
  1. /*
  2. 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3. 实验一百一十六:NRF24L01+ 无线模块 功率加强版 2.4G无线收发通信模块 黑金刚
  4. 1、安装“Mirf”库(下载链接 https://github.com/aaronds/arduino-nrf24l01)
  5.      安装“rf24”库(下载链接 https://github.com/nRF24/RF24)
  6. 2、项目测试 :NRF24L01最简单测试之Server示例代码
  7. 3、模块接线
  8. Arduino uno    ---    nRF24L01
  9. 3.3V                 ---    VCC:模块供电引脚
  10. GND                 ---    GND:模块接地引脚
  11. D7                    ---    CSN:接收端选择引脚
  12. D8                    ---    CE:发射/接受状态选择引脚
  13. D11                  ---    MOSI :控制端输出,接收端输入引脚
  14. D13                  ---    SCK:时钟信号
  15. D12                  ---    MISO:控制端输入,接收端输出引脚
  16. *IRQ引脚在本例中不需要接
  17. */

  18. #include <SPI.h>
  19. #include <Mirf.h>
  20. #include <nRF24L01.h>
  21. #include <MirfHardwareSpiDriver.h>

  22. void setup(){
  23.   Serial.begin(9600);
  24.   
  25.   /*
  26.    * Set the SPI Driver.
  27.    */

  28.   Mirf.spi = &MirfHardwareSpi;
  29.   
  30.   /*
  31.    * Setup pins / SPI.
  32.    */
  33.    
  34.   Mirf.init();
  35.   
  36.   /*
  37.    * Configure reciving address.
  38.    */
  39.    
  40.   Mirf.setRADDR((byte *)"serv1");
  41.   
  42.   /*
  43.    * Set the payload length to sizeof(unsigned long) the
  44.    * return type of millis().
  45.    *
  46.    * NB: payload on client and server must be the same.
  47.    */
  48.    
  49.   Mirf.payload = sizeof(unsigned long);
  50.   
  51.   /*
  52.    * Write channel and payload config then power up reciver.
  53.    */
  54.    
  55.   Mirf.config();
  56.   
  57.   Serial.println("Listening...");
  58. }

  59. void loop(){
  60.   /*
  61.    * A buffer to store the data.
  62.    */
  63.    
  64.   byte data[Mirf.payload];
  65.   
  66.   /*
  67.    * If a packet has been recived.
  68.    *
  69.    * isSending also restores listening mode when it
  70.    * transitions from true to false.
  71.    */
  72.    
  73.   if(!Mirf.isSending() && Mirf.dataReady()){
  74.     Serial.println("Got packet");
  75.    
  76.     /*
  77.      * Get load the packet into the buffer.
  78.      */
  79.      
  80.     Mirf.getData(data);
  81.    
  82.     /*
  83.      * Set the send address.
  84.      */
  85.      
  86.      
  87.     Mirf.setTADDR((byte *)"clie1");
  88.    
  89.     /*
  90.      * Send the data back to the client.
  91.      */
  92.      
  93.     Mirf.send(data);
  94.    
  95.     /*
  96.      * Wait untill sending has finished
  97.      *
  98.      * NB: isSending returns the chip to receving after returning true.
  99.      */
  100.       
  101.     Serial.println("Reply sent.");
  102.   }
  103. }
复制代码


回复

使用道具 举报

18#
ID:513258 发表于 2019-9-19 14:17 | 只看该作者

回复

使用道具 举报

19#
ID:513258 发表于 2019-9-19 14:29 | 只看该作者

回复

使用道具 举报

20#
ID:513258 发表于 2019-9-19 16:22 | 只看该作者

回复

使用道具 举报

21#
ID:513258 发表于 2019-9-19 16:24 | 只看该作者

回复

使用道具 举报

22#
ID:513258 发表于 2019-9-19 16:25 | 只看该作者

回复

使用道具 举报

23#
ID:513258 发表于 2019-9-19 16:26 | 只看该作者

回复

使用道具 举报

24#
ID:683442 发表于 2020-4-11 15:35 | 只看该作者
问一下出现Mirf.h: No such file or directory错误是啥意思
回复

使用道具 举报

25#
ID:513258 发表于 2020-10-24 15:36 | 只看该作者
zlt_123456 发表于 2020-4-11 15:35
问一下出现Mirf.h: No such file or directory错误是啥意思

没有这样的文件或目录
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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