Arduino MEGA 与UNO 通过nRF24L模块通讯-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 76909|回复: 299

Arduino MEGA 与UNO 通过nRF24L模块通讯

  [复制链接]
发表于 2018-10-3 18:27 | 显示全部楼层 |阅读模式
本帖最后由 createskyblue 于 2020-3-28 14:31 编辑

1.jpg


一开始测试时手头上只有论坛给的一块mega以及自己的一块仿制UNO,结果是nRF24L无法使用

前些天在发现外国网友也有反馈mega使用nRF24L不正常的情况,浏览了国外帖子后总结出如下方案:

nRF24L介绍
nRF24L01是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型“SchockBurst”模式控制器、功率放大器、晶体振荡器、调制器和解调器。

输出功率频道选择和协议的设置可以通过SPI 接口进行设置。几乎可以连接到各种单片机芯片,并完成无线数据传送工作。
极低的电流消耗:当工作在发射模式下发射功率为0dBm 时电流消耗为11.3mA ,接收模式时为12.3mA,掉电模式和待机模式下电流消耗更低。
用途:

● 无线鼠标 键盘 游戏机操纵杆
● 无线门禁
● 无线数据通讯
● 安防系统
● 遥控装置
● 遥感勘测
● 智能运动设备
● 工业传感器
● 玩具
优势:
◆ 小体积,QFN20 4x4mm封装
◆ 宽电压工作范围,1.9V~3.6V,输入引脚可承受5V电压输入
◆ 工作温度范围,-40℃~+80℃
◆ 工作频率范围,2.400GHz~2.525GHz
◆ 发射功率可选择为0dBm、-6dBm、-12dBm和-18dBm
◆ 数据传输速率支持1Mbps、2Mbps
◆ 低功耗设计,接收时工作电流12.3mA,0dBm功率发射时11.3mA,掉电模式时仅为900nA
◆ 126个通讯通道,6个数据通道,满足多点通讯和调频需要
◆ 增强型“ShockBurst”工作模式,硬件的CRC校验和点对多点的地址控制
◆ 数据包每次可传输1~32Byte的数据
◆ 4线SPI通讯端口,通讯速率最高可达8Mbps,适合与各种MCU连接,编程简单
◆ 可通过软件设置工作频率、通讯地址、传输速率和数据包长度
◆ MCU可通过IRQ引脚块判断是否完成数据接收和数据发送



0.png
2.jpg
3.jpg
电路接线假若UNO对MEGA采用下面接线,假若是UNO对UNO只用参考UNO接线 但是程序都不用改

NRF24L01               
ARDUINO MEGA    ARDUINO UNO      
VCC                       3.3V                       3.3V                       
GND                      GND                      GND                     
CSN                       8                            8                           
CE                          7                            7                           
SCK                        52                          13                          
MOSI                     51                          11                          
MISO                     50                          12                          



4.jpg

代码
所需要的文件 为了防止帖子沉下去且让更多人找到路,需要回复一下才能得到文件
游客,如果您要查看本帖隐藏内容请回复

发送端

[mw_shl_code=cpp,true]#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN 的引脚
const byte address[6] = "20181";  //设置标识码
void setup() {
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();
}
void loop() {
  unsigned long Rtime = millis()/1000;
  radio.write(&Rtime,sizeof(Rtime));
}[/mw_shl_code]


接收端
[mw_shl_code=cpp,true]#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "20181";
void setup() {
  Serial.begin(115200);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
}
void loop() {
  if (radio.available()) {
    unsigned long Rtime;
    radio.read(&Rtime, sizeof(Rtime));
    Serial.println(Rtime);
  }
}[/mw_shl_code]
进阶阅读:
https://www.arduino.cn/thread-86275-1-1.html

发表于 2018-10-4 19:51 | 显示全部楼层
谢谢分享了~这么好的帖子怎么能叫 0 回复呢。
发表于 2018-10-5 03:31 | 显示全部楼层
看看隐藏的文件
发表于 2018-10-5 09:52 | 显示全部楼层
可以可以可以可以
发表于 2018-10-17 13:50 | 显示全部楼层
谢谢楼主分享,正在学习这个nrf24l01
发表于 2018-10-18 20:59 | 显示全部楼层
正在学习nrf,感想分享
发表于 2018-10-19 16:13 | 显示全部楼层
6666666、、、、、
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 01:52 , Processed in 0.172442 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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