1326浏览
查看: 1326|回复: 1

[ESP8266/ESP32] FireBeetle 433Mhz 遥控电器

[复制链接]
DIY 的过程中,经常遇到使用弱电控制强电的需求。通常的解决方法是使用继电器这种方案,但是对于自己设置制作的设备来说安全性和可靠性是一个巨大的挑战。经过研究,我发现使用 ESP32 来控制带有遥控功能的插座是可行的方案。ESP32端非常安全,不会让使用者有暴露在220V的危险下;而被控制的插座端负责接收,通过3C认证可靠性也有保证。我购买了公牛的蓝牙的遥控插座,但是发现无法解开它内部协议,因此这条路无法走通。此外,还有一些国外的破解方案,通过给 GoSund 这种蓝牙插座刷新Firmware的方案实现破解。这次我选择的是 433Mhz 遥控插座方案。
FireBeetle 433Mhz 遥控电器图1
通常情况下是一个遥控器(发送端)和插座(接收端)配对使用。
FireBeetle 433Mhz 遥控电器图2
拆开遥控器(发送端)可以看到使用EV1527的遥控方案,这是一个 433.92Mhz的遥控方案。
确定这一点之后,我们选择 433M遥控模块进行控制。同样的433M模块有发送模块和接收模块。下图中左侧是发射模块,右侧是接收模块:
FireBeetle 433Mhz 遥控电器图3
为了发送和接收数据,需要使用 rc-switch 库,在 Library Manger 中可以下载到:
FireBeetle 433Mhz 遥控电器图4
接下来来我们要使用接收模块捕获遥控器发送的数据,代码如下:
  1. #include <RCSwitch.h>
  2. RCSwitch mySwitch = RCSwitch();
  3. void setup() {
  4.   Serial.begin(9600);
  5.   mySwitch.enableReceive(2);   //这里使用的是 ESP32 IO2
  6. }
  7. void loop() {
  8.   if (mySwitch.available()) {
  9.    
  10.     Serial.print("Received ");
  11.     Serial.print( mySwitch.getReceivedValue() );
  12.     Serial.print(" / ");
  13.     Serial.print( mySwitch.getReceivedBitlength() );
  14.     Serial.print("bit ");
  15.     Serial.print("Protocol: ");
  16.     Serial.println( mySwitch.getReceivedProtocol() );
  17.     mySwitch.resetAvailable();
  18.   }
  19. }
复制代码
运行上面的程序,之后打开串口监视器,观察按下遥控器时串口输出。不同的遥控器和插座对使用的数值是不同的。在本次实验中,获得的串口数据是:

Received 16529064 / 24bit Protocol: 1   //打开命令
Received 16529060 / 24bit Protocol: 1   //关闭命令

之后,我们使用 433Mhz遥控发射模块发送上面的命令即可实现控制的目的。

  1. #include <RCSwitch.h>
  2. RCSwitch mySend = RCSwitch();
  3. void setup() {
  4.   Serial.begin(115200);
  5.   // Transmitter is connected to ESP32 IO17
  6.   mySend.enableTransmit(17);
  7.   
  8.   // Optional set protocol (default is 1, will work for most outlets)
  9.    mySend.setProtocol(1);  
  10. }
  11. void loop() {
  12.   if (Serial.available()) {
  13.       byte c=Serial.read();
  14.       // 开
  15.       if (c=='k') {
  16.           mySend.send(16529064, 24);
  17.         }
  18.       //关  
  19.       if (c=='g') {
  20.           mySend.send(16529060, 24);
  21.         }  
  22.     }
  23. }
复制代码
经过实验,上述代码能够控制插座开关。

本文提到的库函数:



zoologist  高级技匠
 楼主|

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



工作测试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail