龙空技术网

使用Arduino控制RF 433MHz发送器/接收器模块的完整教程

工控电子爱好者 274

前言:

目前你们对“rf使用教程”大致比较珍视,大家都需要剖析一些“rf使用教程”的相关知识。那么小编也在网络上网罗了一些对于“rf使用教程””的相关资讯,希望我们能喜欢,同学们一起来了解一下吧!

使用Arduino控制RF 433MHz发送器/接收器模块的完整教程

这篇文章是有关带Arduino的用的相对比较多的RF 433MHz发送器/接收器模块的指南。我们将解释它们如何工作并分享一个Arduino项目示例,您可以将其应用到自己的项目中。

描述

在本教程中,我们将使用 FS1000A发送器和相应的接收器,但是这里的讲解说明也适用于以类似方式工作的其他433MHz发送器/接收器模块。这些RF模块在Arduino爱好者中非常流行,并用于需要无线控制的各种应用中。

这些模块非常便宜,您可以将它们与任何微控制器一起使用,无论是Arduino,ESP8266还是ESP32。

规格射频433MHz接收器

频率范围:433.92 MHz调制方式:ASK输入电压:5V

规格射频433MHz发射机

频率范围:433.92MHz输入电压:3-12V

哪里买(这个?)

您只需花费几快钱即可购买这些模块。你可以比较多家商店的RF 433MHz发射器/接收器,并找到最优惠的价格。

RF 433MHz发射器/接收器模块的Arduino应用

在本节中,我们将构建一个简单的示例,该示例使用433 MHz将消息从Arduino发送到另一个Arduino板。一块Arduino开发板将连接到433 MHz发射器,并发送" Hello World!"。信息。另一个Arduino开发板将连接到433 MHz接收器以接收消息。

所需零件

此示例需要以下组件:

2个Arduino RF 433MHz接收器/发射器 面包板跳线

安装RadioHead库

该库提供了一种简单的方法来与Arduino控制的433MHz的发射器/接收器模块的应用。请按照以下步骤在Arduino IDE中安装该库:

1. 下载该库,您的下载文件夹中应该有一个.zip文件夹。

2. 解压缩RadioHead 库。

3. 将RadioHead库文件夹移至Arduino IDE安装库文件夹。

4. 重新启动您的Arduino IDE

RadioHead库很棒,它可以与市场上几乎所有的RF模块一起使用。

发射电路

按照这个示意图将发射器模块连接到Arduino。

将以下代码上传到将用作发送器的Arduino板。

#include <RH_ASK.h>

#include <SPI.h>

RH_ASK driver;

void setup()

{

Serial.begin(9600);

if (!driver.init())

Serial.println("init failed");

}

void loop()

{

const char *msg = "Hello World!";

driver.send((uint8_t *)msg, strlen(msg));

driver.waitPacketSent();

delay(1000);

}

发射模块程序的工作原理

首先,包括RadioHead ASK库。

#include <RH_ASK.h>

该库需要SPI库才能工作。因此,您还需要包括SPI库。

#include <SPI.h>

之后,创建一个称为driver的RH_ASK对象。

在setup()中,使用init()方法初始化RH_ASK对象。

Serial.begin(9600);

if (!driver.init())

Serial.println("init failed");

在loop()中,我们编写并发送消息。该消息保存在msg变量中。请注意,该消息必须为char类型。

const char *msg = "Hello World!";

此消息包含" Hello World!" 消息,但是您可以发送任何所需的内容,只要它是char格式即可。

最后,我们发送消息如下:

driver.send((uint8_t *)msg, strlen(msg));

driver.waitPacketSent();

该消息每秒发送一次,但是您可以调整此延迟时间。

delay(1000);

接收电路

按照下一个原理图将接收器模块连接到另一个Arduino。

接收模块程序

将以下代码上传到连接到接收器的Arduino。

#include <RH_ASK.h>

#include <SPI.h>

RH_ASK driver;

void setup()

{

Serial.begin(9600);

if (!driver.init())

Serial.println("init failed");

}

void loop()

{

uint8_t buf[12];

uint8_t buflen = sizeof(buf);

if (driver.recv(buf, &buflen))

{

int i;

Serial.print("Message: ");

Serial.println((char*)buf);

}

}

接收模块程序如何工作

与之前的草图类似,您首先需要包含必要的库:

#include <RH_ASK.h>

#include <SPI.h>

您创建一个称为driver的RH_ASK对象:

RH_ASK driver;

在 setup()中,初始化RH_ASK对象。

void setup(){

Serial.begin(9600);

if (!driver.init())

Serial.println("init failed");

}

在loop()中,我们需要设置一个与接收到的消息大小匹配的缓冲区。"你好,世界!" 有12个字符。您应该根据收到的消息调整缓冲区大小(空格和标点符号也算在内)。

uint8_t buf[12];

uint8_t buflen = sizeof(buf);

然后,检查您是否收到了有效的消息。如果收到有效消息,请在串行监视器中打印。

if (driver.recv(buf, &buflen)) {

int i;

Serial.print("Message: ");

Serial.println((char*)buf);

}

示例

在此项目中,发送模块正在发送消息" Hello World!"。通过射频连接到接收器。这些消息正在接收器的串行监视器中显示。下图显示了您在Arduino IDE串行监视器中应该看到的内容。

写到最后

使用此模块时,您需要有一些现实的期望。当接收器和发射器彼此靠近时,它们可以很好地工作。如果将它们分开太远,则会失去通信。通讯范围会有所不同,这取决于您要向发射机模块提供多少电压,环境中的RF噪声以及是否使用外部天线。

希望本教程对您有所帮助。也希望喜欢电子产品的朋友分享这篇文章。喜欢的朋友记得关注,我会分享更多的项目示例。

标签: #rf使用教程