首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RCSwitch库在ESP32 NodeMCU上似乎不适用于433 Hz接收机

RCSwitch库在ESP32 NodeMCU上似乎不适用于433 Hz接收机
EN

Stack Overflow用户
提问于 2020-07-27 21:37:18
回答 3查看 4.2K关注 0票数 1

我对阿迪诺很陌生,尤其是ESP32。但是--在我收到提示“使用Arduino”之前,我决定选择ESP32,因为它的大小和连接到无线局域网的能力。

然而,我正试图为我的水族馆建造一些控制箱,在第一次设计中,它应该通过遥控插座来控制各种灯具和雨水泵。为此,我得到了一个ESP32 NodeMCU、一个RTC时间模块(它似乎工作得很好)和一个433赫兹接收/发送端集。

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

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

代码语言:javascript
复制
mySwitch.enableReceive(13)

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

代码语言:javascript
复制
mySwitch.enableReceive(digitalPinToInterrupt(13))

结果总是一样的:串行监视器上的死寂(除了引导消息,等等)。

我是用错了图书馆还是做错了什么?

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

如果有任何关于这个问题的提示,我会非常感激的--我已经被困在这里好几个小时了.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-03 03:47:11

今天,RCSwitch在ESP32开发板和433 and接收器和发送器上都取得了成功。以下是我在旅途中遇到的绊脚石。

连接接收器(需要5V)

  • 您可以使用ESP 32-VIN作为5V,如果使用Micro来供电
  • ,您可以将接收器-数据连接到任何ESP-32输入- PIN ,但是您可能会损坏ESP32,因为它只允许使用一些“临时”电平通过电阻,但我想它会降低速度过快的=> A适当电平移位器(5V => 3.3V)可能会很好地解决

H19当引用PIN "xx“时,我只是使用了PIN-号。写在ESP32-Dev-Board上的Dxx“

  • 您可以连接一个~17.3cm的天线以提高距离

代码语言:javascript
复制
#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和插座中的可以由DIP开关配置,您可能不需要连接整个接收器-您可以直接在RCSwitch Library中插入DIP开关级别。

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

您可以使用use 32-3.3来供电GND | VCC | DATA

  • You

  • ,您可能需要再次检查PIN标签我感到困惑,因为数据标签被关闭,并且首先被解释为GND | DATA | VCC而不是GND | DATA | VCC可以连接一个~17.3cm的天线以提高距离

代码语言:javascript
复制
#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是活跃的,并通过433 via接收/发送。

票数 1
EN

Stack Overflow用户

发布于 2020-12-08 23:15:57

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

代码语言:javascript
复制
pinMode(GPIO_NUM_35, INPUT);
mySwitch.enableReceive(digitalPinToInterrupt(GPIO_NUM_35));
票数 3
EN

Stack Overflow用户

发布于 2021-01-07 14:55:41

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

ESP32

数据发送(输入)转到: GPIO 5:pinMode(5, OUTPUT)

  • The数据接收(输出),转到GPIO 4:pinMode(4, INPUT)

  • Sender供应:5
  • 接收器供应:3.3V(不损坏ESP32 GPIO 4)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63123935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档