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)
我对 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)