RCSwitch 库似乎不适用于 ESP32 NodeMCU 上的 433 Hz 接收器

RCSwitch library seemingly not working for 433 Hz receiver on ESP32 NodeMCU

我对 Arduino 很陌生,尤其是 ESP32。但是 - 在我收到“使用 Arduino”提示之前 - 我决定选择 ESP32,因为它的尺寸和连接到 WLAN 的能力。

但是,我正在尝试为我的玻璃容器构建一些控制箱,在第一个设计中,它应该通过遥控插座控制各种灯和雨水泵。为此,我得到了一个 ESP32 NodeMCU、一个 RTC 时间模块(看起来工作得很好)和一个 433 Hz receiver/sender 设置。

我遵循了几个关于接线的教程并将示例文件上传到 ESP32。无论我将接收器连接到哪个引脚(我需要先连接接收器才能读出插座附带的 433 Hz 控件的信号)我都不会在接收器上收到任何信号。

我嵌入了 RCSwitch 库,并尝试按如下方式配置我的开关(此处以 PIN 13 为例 - 我还尝试了其他几个引脚):

mySwitch.enableReceive(13)

正如我在其他博客中看到的,可能需要将引脚号转换为其中断地址,因此我尝试了以下操作:

mySwitch.enableReceive(digitalPinToInterrupt(13))

结果总是一样的:串行监视器上一片死寂(启动消息等除外)。

我是不是使用了错误的库或者我在这里做错了什么?

我读到应该有一个名为 RFSwitch 的库,但我找到的唯一版本仅具有 433 Hz 发送器,而不具有接收器。

对于有关此问题的任何提示,我将不胜感激 - 我现在已经被困在这里好几个小时了...

我知道这已经很老了,也许你现在已经解决了这个问题,但也许它会对其他人有所帮助。我有同样的问题,帮助我的是设置 pinMode:

pinMode(GPIO_NUM_35, INPUT);
mySwitch.enableReceive(digitalPinToInterrupt(GPIO_NUM_35));

今天在 ESP32 开发板和 433MHZ 接收器和发送器上使用 RCSwitch 取得了成功。这是我在旅途中遇到的问题。

连接接收器(需要5V)

  • 如果使用Micro-USB供电,可以使用ESP32-VIN 5V
  • 您可以将 Receiver-DATA 连接到任何 ESP-32-Input-PIN 但是您可能会损坏您的 ESP32,因为它只允许 ~3.3V
    • 我首先尝试通过电阻器进行一些“临时”电平转换,但我猜它会降低速度太多 => 合适的电平转换器 (5V => 3.3V) 可能效果很好
    • 在引用 PIN“xx”时,我一直使用写在 ESP32-Dev-Board 上的 PIN 码“Dxx”
  • 您可以连接 ~17.3cm 的天线以扩大范围
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();

#define RXD2 27

void setup() {
  Serial.begin(115200);
  Serial.print("Ready to receive.");  
  mySwitch.enableReceive(RXD2); 
}

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.print( mySwitch.getReceivedProtocol() );
    Serial.print(" / ");
    Serial.println( mySwitch.getReceivedDelay() );

    mySwitch.resetAvailable();
  }
}

在您的 RC 和 Outlet 中可以通过 DIP 开关进行配置,您可能不需要整体连接接收器 - 您可以直接在 RCSwitch-Library 中插入 DIP 开关级别

连接发送器(只需 3.3V 即可)

  • 可以使用ESP32-3.3供电
  • 您可能需要仔细检查 PIN 标签 - 我很困惑,因为数据标签已关闭并且首先被解释为 GND | DATA | VCC 而不是 GND | VCC | DATA
  • 您可以连接 ~17.3cm 的天线以扩大范围
#include <Arduino.h>
#include <WiFi.h>
#include <RCSwitch.h>

#define TXD2 25

RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(115200);
  
  // Transmitter is connected to Arduino Pin #10  
  mySwitch.enableTransmit(TXD2);
  
  // Optional set protocol (default is 1, will work for most outlets)
  // mySwitch.setProtocol(2);

  // Optional set pulse length.
  mySwitch.setPulseLength(311);
  
  // Optional set number of transmission repetitions.
  // mySwitch.setRepeatTransmit(15);  
}

void loop() {
  /* See Example: TypeA_WithDIPSwitches */
  mySwitch.switchOn("01010", "10000");
  Serial.println("Switch On");
  delay(10000);
  mySwitch.switchOff("01010", "10000");
  Serial.println("Switch Off");
  delay(10000);
}

我还没有在 WiFi 处于活动状态时使用发送器或接收器。虽然我一直在阅读有关 WiFi 处于活动状态并通过 433Mhz 接收/发送的问题。

发送器必须有 5 V 电源才能走得更远,并且没有可能损坏 ESP32 和接收器的输出引脚。相反,必须连接到 3.3 V,因为它有一个输出到 ESP2(3.3 V 电源)并且接收器的输出不能超过 3.3 V,以免损坏 ESP32 的 GPIO 输入。

ESP32

  • 数据发送器(输入)转到:GPIO 5:pinMode(5, OUTPUT)
  • 数据接收器(输出),转到 GPIO 4:pinMode(4, INPUT)
  • 发送器电源:5 V
  • 接收器电源:3.3 V(不会损坏 ESP32 GPIO 4)