本帖最后由 createskyblue 于 2020-3-28 14:31 编辑
一开始测试时手头上只有论坛给的一块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引脚块判断是否完成数据接收和数据发送
电路接线假若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
|
代码
所需要的文件 为了防止帖子沉下去且让更多人找到路,需要回复一下才能得到文件
发送端
[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
|