当前位置:网站首页>【nRF24L01 与 Arduino 连接实现无线通信】
【nRF24L01 与 Arduino 连接实现无线通信】
2022-08-02 03:29:00 【WENJIE科技】
nRF24L01 与 Arduino 连接实现无线通信
前言
在本教程中,您将借助两个示例了解 nRF24L01 Arduino 接口。在第一个示例中,我们将发送“Hello world”和一个命令来闪烁连接到另一个 Arduino 的 LED。在第二个示例中,我们将进行双向控制,并从第一个 Arduino 发送命令以在第二个 Arduino 上闪烁 LED,然后我们将从第二个 Arduino 发送命令以在第一个 Arduino 上闪烁 LED。
nRF24L01 模块
nFR24L01 是一个收发器模块,这意味着它可以发送和接收数据。这些模块非常便宜,体积更小,规格也很多。这些模块的一些规格如下:
传输过程中的功耗在12mA左右,比LED还要小。
它可以以 250Kbps 到 2 Mbps 的波特率运行。
如果在开放空间使用并带有天线,其范围可达 100 米。
它可以同时发送和接收数据。
每个模块最多可与 6 个其他模块通信。
它使用 2.4 GHz 频段。
它可以以 1 MB 的传输速率发送 1 到 25 字节的原始数据。
它有 125 个不同的频道。
nRF24L01 模块通过 SPI 通信与 Arduino 协同工作。模块的管脚如下:
该模块的工作电压为 1.9 至 3.6V,但其他引脚可承受 5V,这意味着其他引脚可以直接连接到 Arduino。
MOSI、MISO 和 SCK 是 SPI 引脚,这些需要连接到 Arduino 的 SPI 引脚。不同的 Arduino 有不同的 SPI 引脚。
CSN 和 CE 用于将模块设置为活动模式以及在命令模式和发送模式之间切换。这些可以连接到 Arduino 的任何数字引脚。
IRQ 引脚是中断引脚,您不必连接它。
示例 1 - nRF24L01 Arduino 接口
在 nRF24L01 arduino 接口的第一个示例中,我们将简单地将数据从一个 Arduino 发送到另一个 Arduino。当我们按下连接到第一个 Arduino 的按钮时,连接到第二个 Arduino 的 LED 会亮起。
第一个示例的电路图如下所示,连接如下所示。发射机代码:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // CE, CSN
const byte address[6] = "00001"; //地址
int button_pin = 2;
boolean button_state = 0;
void setup() {
pinMode(button_pin, INPUT);
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
}
void loop()
{
button_state = digitalRead(button_pin);
if(button_state == HIGH)
{
const char text[] = "Your Button State is HIGH";
radio.write(&text, sizeof(text)); //发送数据
}
else
{
const char text[] = "Your Button State is LOW";
radio.write(&text, sizeof(text)); //发送数据
}
radio.write(&button_state, sizeof(button_state));
//发送数据
delay(1000);
}
接收方代码:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // CE, CSN
const byte address[6] = "00001";//地址保持一致
boolean button_state = 0;
int led_pin = 3;
void setup() {
pinMode(6, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MIN);
radio.startListening();
}
void loop()
{
if (radio.available()) //等待接收数据
{
char text[32] = ""; //保存数据
radio.read(&text, sizeof(text));
radio.read(&button_state, sizeof(button_state));
if(button_state == HIGH)
{
digitalWrite(6, HIGH);
Serial.println(text);
}
else
{
digitalWrite(6, LOW);
Serial.println(text);}
}
delay(5);
}
示例 2 - nRF24L01 Arduino 接口
在 nRF24L01 Arduino 接口的第二个示例中,我们将进行双向通信。首先,我们将从第一个 Arduino 发送命令以点亮连接到第二个 Arduino 的 LED,然后我们将从第二个 Arduino 发送命令以点亮连接到第一个 Arduino 的 LED。第一个 Arduino 的代码:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // CE, CSN
const byte addresses [][6] = {
"00001", "00002"};
//发送地址和接收地址
int button_pin = 2;
int led_pin = 3;
boolean button_state = 0;
boolean button_state1 = 0;
void setup() {
pinMode(button_pin, INPUT);
pinMode(led_pin, OUTPUT);
radio.begin();
radio.openWritingPipe(addresses[1]);
radio.openReadingPipe(1, addresses[0]);
radio.setPALevel(RF24_PA_MIN);
}
void loop()
{
delay(5);
radio.stopListening(); //设置为发送端
button_state = digitalRead(button_pin);
radio.write(&button_state, sizeof(button_state)); //发送数据
delay(5);
radio.startListening(); //设置为接收端
while(!radio.available()); //等待接收数据
radio.read(&button_state1, sizeof(button_state1)); //读取数据
if (button_state1 == HIGH)
{
digitalWrite(led_pin, HIGH);
}
else
{
digitalWrite(led_pin, LOW);
}
}
第二个 Arduino 的代码:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // CE, CSN
const byte addresses [][6] = {
"00001", "00002"};
//发送地址和接收地址
int button_pin = 2;
boolean button_state = 0;
boolean button_state1 = 0;
int led_pin = 3;
void setup() {
pinMode(led_pin, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(addresses[0]);
radio.openReadingPipe(1, addresses[1]);
radio.setPALevel(RF24_PA_MIN);
}
void loop()
{
delay(5);
radio.startListening();
//设置为接收端
if (radio.available())
//等待接收数据
{
radio.read(&button_state, sizeof(button_state));
if(button_state == HIGH)
{
digitalWrite(led_pin, HIGH);
}
else
{
digitalWrite(led_pin, LOW);
}
delay(5);
radio.stopListening();
//设置为发送端
button_state1 = digitalRead(button_pin);
radio.write(&button_state1, sizeof(button_state1)); //发送数据
}
}
源代码和库文件
源代码和库文件已上传至个人主页
边栏推荐
猜你喜欢
随机推荐
Solve the problem that the 5+APP real machine test cannot access the background (same local area network)
解决composer安装太慢 更换国内镜像
MVC,MVP和MVVM架构解析
大厂底层必修:“应用程序与 AMS 的通讯实现”
OpenCore 黑苹果安装教程
Debian 12 Bookworm 尝鲜记
哈工大2021机器学习期末考试题
php的curl函数模拟post数据提交,速度非常慢
electron-builder打包不成功解决方法
n皇后问题(回溯法)
Jetpack中各个组件简介
《scala 编程(第3版)》学习笔记2
关于我的项目-微信小程序2(uniapp->wx小程序)
Temporal Segment Networks:Towards Good Practices for Deep TSN论文精读笔记
【TCS3200 颜色传感器与 Arduino 实现颜色识别】
laravel 写api接口时 session获取不到处理办法
openmv学习 2022.5.9
gradle脚本中groovy语法讲解
Out of memory error on GPU 0. Cannot allocate xxxGB memory on GPU 0, available memory is only xxx
属性动画的使用和原理解析