0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于微控制器的433MHz发射器和接收器模块间的通信方案

454398 来源:一板网 作者:风筝 2020-10-28 14:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在制作基于微控制器的项目时,有时会需要在两个设备之间进行通信,要么是基于双工/收发器的操作(两个设备都可以同时发送和接收),要么是基于半双工的操作,其中通信是一个单向的(正在接收的设备无法发送,以及正在发送数据的设备无法接收)。

有很多方式可以实现上述两种通信模式中的任何一种,并且这些选择通常取决于项目的需求,尤其是设备之间的距离和成本。对于两个微控制器之间的短距离、低预算的通信方式,其中一种最优选使用的方式是使用433MHz RF发送器和接收器模块的射频通信。在本篇文章中,我们将介绍如何使用这些模块在两个Arduino开发板之间建立通信。

433 MHz发射器和接收器模块

这些模块因其低成本和易用性在创客DIY爱好者中非常受欢迎。它们用于两个微控制器之间的所有短距离、半双工的通信形式,其中一个微控制器用作发送器,另一个微控制器用作接收器。这些模块是ASK(幅移键控)或OOK(开关键控)型RF模块,这意味着它们在发送逻辑“零”时通常不消耗功率,因此消耗的功率非常低。这种低功耗使其在基于电池的实施中非常有用。下面列出了一些发射器和接收器模块的规格。

433MHz发射器模块的规格

√ 工作电压:3V – 12V

√ 工作电流:最大小于40mA,最小9mA

√ 谐振模式:(SAW)

√ 调制模式:ASK

√ 工作频率:433.92MHz

√ 发射功率:25mWF

√ 频率误差:+ 150kHz(max)

√ 通讯速率:小于10Kbps

√ 发射范围:90m(在开放空间)

433MHz接收器模块规格

√ 工作电压:5.0VDC + 0.5V

√ 工作电流:≤5.5mAmax

√ 调制模式:OOK / ASK

√ 工作频率:433.92MHz

√ 带宽:2MHz

√ 灵敏度:超过–100dBm(50Ω)

为了演示使用这些模块可以轻松地将无线功能添加到项目中,我们将制作一个带有远程数据显示的气象站。气象站将主要由温湿度传感器和433 RF发射器模块组成。它将测量环境的温度和湿度,并将其通过RF发送器发送到ST7735 1.8寸彩色TFT显示屏上的显示单元(通过RF接收器模块接收)。

所需的组件

● Arduino Uno开发板

● 433Mhz射频套件

● DHT22温湿度传感器

● 1.8寸彩色TFT显示屏

● 面包板

● 跳线

原理图

该项目有两个原理图。第一个用于发送器,该发送器获取环境的温度和湿度,并将其发送到项目的接收器,后者在显示屏上显示数据。

发送器电路原理

发送器电路包括一个Arduino开发板、DHT22温湿度传感器以及433MHz RF发送器模块。当Arduino与计算机断开连接时,可以使用电池组为Arduino提供电源。如下图所示连接组件。

接收器电路原理图

接收器电路由433 MHz射频接收器模块、ST7735 1.8寸彩色TFT显示屏和Arduino Uno开发板组成。如下图所示连接组件。

完成所有连接后,我们现在可以为该项目编写代码。

代码

就像我们必须搭建两个设备一样,我们将为该项目编写两个不同的代码。其中一个代码是控制发送器,另一种代码是控制接收器。为了轻松编写本文的代码,我们将使用可轻松驱动项目各部分的库。对于RF模块,我们将使用virtual wire库来发送和接收数据,而对于接收到的数据的显示,我们将使用Adafruit GFX和Adafruit ST7735库来轻松更新ST7735 LCD显示屏。我们将使用Adafruit DHT传感器库轻松地从DHT22传感器获取温度和湿度数据。

代码背后的算法很简单。对于发射器,从DHT22获取温度和湿度值,然后通过RF发射器发送到接收器。对于接收器,使用RF接收器模块获取由发送器发送的温度和湿度值,然后在LCD上显示。与往常一样,我们将对这两个项目的代码进行简要说明。

发射器的代码

首先包含将在代码中使用的库。

//Written by Nick Koumaris

//info@educ8s.tv

#include 《VirtualWire.h》

#include “DHT.h”

之后,我们声明将DHT连接到的Arduino的引脚,并指定要使用的DHT的类型。

#define DHTPIN 4

#define DHTTYPE DHT22

接下来,我们定义Arduino的引脚,该引脚将用作我们的数据传输引脚(连接到RF发送器模块的数据引脚),然后创建将一个用于发送数据的结构体package。

const int led_pin = 13;

const int transmit_pin = 12;

struct package

{

float temperature ;

float humidity ;

};

接下来,我们定义一个package实例,并创建DHT类的实例以处理DHT传感器。

typedef struct package Package;

Package data;

DHT dht(DHTPIN, DHTTYPE);

完成这些操作后,我们转到void setup()函数,在其中设置TX引脚和其他参数以初始化RF模块。

void setup()

{

// Initialise the IO and ISR

vw_set_tx_pin(transmit_pin);

vw_set_ptt_inverted(true); // Required for DR3100

vw_setup(500); // Bits per sec

pinMode(led_pin, OUTPUT);

}

接下来是void loop()函数,我们可以使用 readSensor()函数获取温度和湿度。获取数据后,使用vw_send()函数发送数据。延迟2000毫秒,以在数据之间创建一段时间间隔,并确保发送前另一个已发送完成。

void loop()

{

digitalWrite(led_pin, HIGH); // Flash a light to show transmitting

readSensor();

vw_send((uint8_t *)&data, sizeof(data));

vw_wait_tx(); // Wait until the whole message is gone

digitalWrite(led_pin, LOW);

delay(2000);

}

接收器的代码

首先包含将要使用的库。

//Written by Nick Koumaris

//info@educ8s.tv

#include 《VirtualWire.h》

#include 《Adafruit_ST7735.h》

#include 《Adafruit_GFX.h》

接下来,我们声明与LCD引脚相连的Arduino引脚。

#define TFT_CS 10

#define TFT_RST 8

#define TFT_DC 9

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

// Option 2: use any pins but a little slower

#define TFT_SCLK 13 // set these to be whatever pins you like!

#define TFT_MOSI 11 // set these to be whatever pins you like!

接下来,我们声明RF接收器模块的数据引脚所连接的Arduino引脚(receive_pin),并创建char型变量来保存温度和湿度值。

const int receive_pin = 12;

char temperatureChar[10];

char humidityChar[10];

接下来,我们创建一个类似于发射器代码中的结构体package。

struct package

{

float temperature = 0.0;

float humidity = 0.0;

};

完成此操作后,我们转到void setup()函数,在该函数中我们初始化显示屏,RF接收器模块设置比特率并启动接收器。

void setup()

{

tft.initR(INITR_BLACKTAB);

tft.fillScreen(ST7735_BLACK);

printUI();

delay(1000);

// Initialise the IO and ISR

vw_set_rx_pin(receive_pin);

vw_setup(500); // Bits per sec

vw_rx_start(); // Start the receiver PLL running

}

接下来,是void loop()函数。通过使用vw_have_message()函数检查是否已收到消息。如果收到消息,我们将从中提取温度和湿度数据,并将其显示在LCD上。

void loop()

{

uint8_t buf[sizeof(data)];

uint8_t buflen = sizeof(data);

if (vw_have_message()) // Is there a packet for us?

{

vw_get_message(buf, &buflen);

memcpy(&data,&buf,buflen);

Serial.print(“ Package:”);

Serial.print(data.temperature);

String temperatureString = String(data.temperature,1);

temperatureString.toCharArray(temperatureChar,10);

tft.fillRect(10,20,80,30,ST7735_BLACK);

printText(temperatureChar, ST7735_WHITE,10,20,3);

String humidityString = String(data.humidity,1);

humidityString.toCharArray(humidityChar,10);

tft.fillRect(10,95,80,100,ST7735_BLACK);

printText(humidityChar, ST7735_WHITE,10,95,3);

Serial.print(“ ”);

Serial.println(data.humidity);

}

}

该代码还包括一些用于以更用户友好的方式显示结果的函数。

void printText(char *text, uint16_t color, int x, int y,int textSize)

{

tft.setCursor(x, y);

tft.setTextColor(color);

tft.setTextSize(textSize);

tft.setTextWrap(true);

tft.print(text);

}

void printUI()

{

printText(“TEMPERATURE”, ST7735_GREEN,30,5,1); // Temperature Static Text

printText(“o”, ST7735_WHITE,90,13,2);

printText(“C”, ST7735_WHITE,105,20,3);

printText(“HUMIDITY”, ST7735_BLUE,30,80,1); // Temperature Static Text

printText(“%”, ST7735_WHITE,90,95,3);

}

效果演示

将相应的代码上传到每个Arduino开发板。 两个Arduino开发板都可以使用电池组供电。 开机后几分钟,您应该会在LCD上看到温度和湿度数据。

433MHz发射器和接收器模块的范围通常很小,但是通过焊接外部天线,它们的通讯范围可以增大。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    8249

    浏览量

    162351
  • 接收器
    +关注

    关注

    15

    文章

    2637

    浏览量

    76312
  • 发射器
    +关注

    关注

    7

    文章

    916

    浏览量

    55131
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    900MHz全双工无线发射器参考设计

    900MHz全双工无线发射器参考设计
    发表于 10-30 15:31 3次下载

    全智芯433MHz无线传输人体感应门铃方案概述

    全智芯433MHz无线传输人体感应门铃方案采用433.92MHz无线射频技术与人体红外感应技术结合实现一种无线传输感应门铃的解决方案,包括发射
    的头像 发表于 08-27 16:14 863次阅读

    Analog Devices Inc. AD9986 4T2R射频发射器和观察接收器数据手册

    Analog Devices Inc. AD9986 4T2R直接射频发射器和观察接收器是一款高度集成的器件,采用16位、12GSPS最大采样率射频DAC内核和12位、6GSPS速率射频ADC内核。AD9986提供四个发射器通道
    的头像 发表于 06-30 14:34 684次阅读
    Analog Devices Inc. AD9986 4T2R射频<b class='flag-5'>发射器</b>和观察<b class='flag-5'>接收器</b>数据手册

    LE 发射器接收器测试返回错误结果是什么原因导致的?

    我有特定的代码运行来启动和停止一些无线电频率测试。 目前只关注 BLE 发射器接收器测试。 然而,此处第 6 节 LE 测试结束时的文档指出,当 le 发射器测试处于活动状态时,接收
    发表于 06-30 08:08

    900 MHz 发射/接收前端模块 skyworksinc

    电子发烧友网为你提供()900 MHz 发射/接收前端模块相关产品参数、数据手册,更有900 MHz
    发表于 06-12 18:33
    900 <b class='flag-5'>MHz</b> <b class='flag-5'>发射</b>/<b class='flag-5'>接收</b>前端<b class='flag-5'>模块</b> skyworksinc

    450 MHz 发射/接收前端模块 skyworksinc

    电子发烧友网为你提供()450 MHz 发射/接收前端模块相关产品参数、数据手册,更有450 MHz
    发表于 06-10 18:32
    450 <b class='flag-5'>MHz</b> <b class='flag-5'>发射</b>/<b class='flag-5'>接收</b>前端<b class='flag-5'>模块</b> skyworksinc

    用芯岭技术433接收发射芯片开发的串口模块

    发送,并将接收到的射频信号转换回数据。433芯片通常具备良好的抗干扰能力和较长的通信距离。芯岭技术的XL4456,XL520,XL710都是高性能,低功耗的315/433M无线芯片,X
    的头像 发表于 06-04 11:45 606次阅读
    用芯岭技术<b class='flag-5'>433</b><b class='flag-5'>接收发射</b>芯片开发的串口<b class='flag-5'>模块</b>

    用芯岭技术XL433接收发射芯片开发的火灾报警

    XL433/315接受发射芯片分别有以下几个芯片: 一、发射芯片 XL4456 工作频率:250–450MHz(兼容315/433MHz)1
    发表于 06-04 11:14

    ESD保护 RS-232发射器/接收器HIN208E数据手册

    HIN202E、HIN206E、HIN207E、HIN208E、HIN211E、HIN213E、HIN232E 系列 RS-232 发射器 /接收器接口电路符合所有美国电子工业协会(EIA)高速
    的头像 发表于 05-25 17:21 552次阅读
    ESD保护 RS-232<b class='flag-5'>发射器</b>/<b class='flag-5'>接收器</b>HIN208E数据手册

    HIN206E RS-232发射器/接收器数据手册

    HIN202E、HIN206E、HIN207E、HIN208E、HIN211E、HIN213E、HIN232E 系列 RS-232 发射器 /接收器接口电路符合所有美国电子工业协会(EIA)高速
    的头像 发表于 05-25 17:13 537次阅读
    HIN206E RS-232<b class='flag-5'>发射器</b>/<b class='flag-5'>接收器</b>数据手册

    HIN202E RS-232发射器/接收器数据手册

    HIN202E、HIN206E、HIN207E、HIN208E、HIN211E、HIN213E、HIN232E 系列 RS-232 发射器 /接收器接口电路符合所有美国电子工业协会(EIA)高速
    的头像 发表于 05-25 17:00 508次阅读
    HIN202E RS-232<b class='flag-5'>发射器</b>/<b class='flag-5'>接收器</b>数据手册

    带0.1F外部电容的+5V供电RS-232发射器/接收器HIN202数据手册

    HIN202、HIN206、HIN207、HIN208、HIN211、HIN213 系列 RS-232 发射器 / 接收器接口电路符合所有美国电子工业协会(EIA)RS-232E 和 V.28 标准
    的头像 发表于 05-25 16:49 505次阅读
    带0.1F外部电容的+5V供电RS-232<b class='flag-5'>发射器</b>/<b class='flag-5'>接收器</b>HIN202数据手册

    +5V供电的RS-232发射器/接收器HIN232数据手册

    仅需单个 + 5V 电源供电,并集成板载电荷泵电压转换,可从 5V 电源生成 + 10V 和 - 10V电源。 *附件:+5V供电的RS-232发射器接收器HIN232数据手册.pdf 该系列器件
    的头像 发表于 05-25 16:29 728次阅读
    +5V供电的RS-232<b class='flag-5'>发射器</b>/<b class='flag-5'>接收器</b>HIN232数据手册

    红外发射器是什么_红外发射器怎么安装

    红外发射器是一种通过红外线发射管在一定范围内发射光线,从而达到控制信号作用的遥控设备。以下是对红外发射器的详细介绍:
    的头像 发表于 01-28 13:46 3895次阅读

    一文详解:区分315MHz433MHz遥控模块

    315MHz433MHz频段属于国家规定的开放频段,允许小功率、短距离的无线电设备自由使用,无需特殊审批,因此其已被广泛应用在无线遥控模块之中,那么315MHz
    的头像 发表于 01-06 15:22 5356次阅读
    一文详解:区分315<b class='flag-5'>MHz</b>和<b class='flag-5'>433MHz</b>遥控<b class='flag-5'>模块</b>