一、模块介绍
433MHz无线模块是一种使用433MHz频段进行无线通信的电子设备。这些模块通常用于物联网、家庭自动化、工业控制系统等应用中,并且可以方便地集成到其他电子系统中。
433MHz无线模块的优点在于价格低廉、容易操作,因此在物联网、家庭自动化等领域非常流行。然而,由于其频段在国内外都被广泛使用,因此可能会遇到干扰问题,导致通信质量不佳。因此,在使用433MHz无线模块时需要认真考虑干扰问题。
二、模块使用
由图可知,控制射频模块主要通过检测D0-D4引脚的电平状态来实现射频控制,射频模块接收到遥控按下发出频率会进行解码,进而对应引脚会拉高电平,故我们可以手动初始化为低电平,相对于单片机,用树莓派开发特别处主要是基于wiringPi库开发,这里我使用的引脚情况如下图(D3,D4使用同样接gpio引脚控制即可)
射频模块 树莓派 继电器 树莓派
GND GND GND GND
5V 5V 3.3V 3.3V
D0 GPIO4 IN GPIO7
D1 GPIO5
三、代码实现
功能:采取433M模块遥控简单控制继电器开与关,进而控制电器状态。
remote.c
#include <stdio.h>
#include <wiringPi.h> //包含wiringPi库头文件
#define SWITCHER 7 //定义继电器引脚
#define D0 4 //定义无线射频D0引脚
#define D1 5 //定义无线射频D1引脚
int main()
{
//定义引脚状态值判断值
int cmd;
int cmd1;
//初始化wiringPi库
if(wiringPiSetup () == -1){
printf("wiringPi setup error!\n");
return -1;
}
//初始化继电器和射频模块
pinMode(SWITCHER,OUTPUT);//把继电器引脚定义为输出引脚
pinMode(D0,INPUT);//定义射频模块引脚为输入引脚
pinMode(D1,INPUT);
digitalWrite(SWITCHER,HIGH);
digitalWrite(D0,LOW);//
digitalWrite(D1,LOW);
printf("init success\n");
while(1){
cmd = digitalRead(D0);//不断读取射频模块引脚的电平状态
cmd1 = digitalRead(D1);
if(cmd == 1){
digitalWrite(SWITCHER,LOW);//当A被按下,继电器导通
}else if(cmd1 == 1){
digitalWrite(SWITCHER,HIGH);//当B被按下,继电器不导通
}
cmd=10;//改变射频模块引脚,方便下次引脚读取
cmd1=10;
}
}
四、编译
gcc remote.c -lwiringPi //这里需要链接上wiringPi库