zoologist 发表于 2022-8-15 19:45:16

FireBeetle 433Mhz 遥控电器

在 DIY 的过程中,经常遇到使用弱电控制强电的需求。通常的解决方法是使用继电器这种方案,但是对于自己设置制作的设备来说安全性和可靠性是一个巨大的挑战。经过研究,我发现使用 ESP32 来控制带有遥控功能的插座是可行的方案。ESP32端非常安全,不会让使用者有暴露在220V的危险下;而被控制的插座端负责接收,通过3C认证可靠性也有保证。我购买了公牛的蓝牙的遥控插座,但是发现无法解开它内部协议,因此这条路无法走通。此外,还有一些国外的破解方案,通过给 GoSund 这种蓝牙插座刷新Firmware的方案实现破解。这次我选择的是 433Mhz 遥控插座方案。
通常情况下是一个遥控器(发送端)和插座(接收端)配对使用。
拆开遥控器(发送端)可以看到使用EV1527的遥控方案,这是一个 433.92Mhz的遥控方案。确定这一点之后,我们选择 433M遥控模块进行控制。同样的433M模块有发送模块和接收模块。下图中左侧是发射模块,右侧是接收模块:
为了发送和接收数据,需要使用 rc-switch 库,在 Library Manger 中可以下载到:
接下来来我们要使用接收模块捕获遥控器发送的数据,代码如下:#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {
Serial.begin(9600);
mySwitch.enableReceive(2);   //这里使用的是 ESP32 IO2
}

void loop() {
if (mySwitch.available()) {
   
    Serial.print("Received ");
    Serial.print( mySwitch.getReceivedValue() );
    Serial.print(" / ");
    Serial.print( mySwitch.getReceivedBitlength() );
    Serial.print("bit ");
    Serial.print("Protocol: ");
    Serial.println( mySwitch.getReceivedProtocol() );

    mySwitch.resetAvailable();
}
}
运行上面的程序,之后打开串口监视器,观察按下遥控器时串口输出。不同的遥控器和插座对使用的数值是不同的。在本次实验中,获得的串口数据是:
Received 16529064 / 24bit Protocol: 1   //打开命令Received 16529060 / 24bit Protocol: 1   //关闭命令
之后,我们使用 433Mhz遥控发射模块发送上面的命令即可实现控制的目的。

#include <RCSwitch.h>
RCSwitch mySend = RCSwitch();

void setup() {
Serial.begin(115200);

// Transmitter is connected to ESP32 IO17
mySend.enableTransmit(17);

// Optional set protocol (default is 1, will work for most outlets)
   mySend.setProtocol(1);
}

void loop() {
if (Serial.available()) {
      byte c=Serial.read();
      // 开
      if (c=='k') {
          mySend.send(16529064, 24);
      }
      //关
      if (c=='g') {
          mySend.send(16529060, 24);
      }
    }
}
经过实验,上述代码能够控制插座开关。
本文提到的库函数:


zoologist 发表于 2022-8-15 19:50:13

https://www.bilibili.com/video/BV1ev4y1c7v3

工作测试
页: [1]
查看完整版本: FireBeetle 433Mhz 遥控电器