【问题标题】:RCSwitch library seemingly not working for 433 Hz receiver on ESP32 NodeMCURCSwitch 库似乎不适用于 ESP32 NodeMCU 上的 433 Hz 接收器
【发布时间】:2020-11-17 07:01:16
【问题描述】:

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

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

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

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

mySwitch.enableReceive(13)

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

mySwitch.enableReceive(digitalPinToInterrupt(13))

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

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

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

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

【问题讨论】:

    标签: arduino arduino-ide esp32


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      今天在 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.3 厘米的天线以扩大范围
      #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 即可)

      • 可以使用ESP32-3.3供电
      • 您可能需要仔细检查 PIN 标签 - 我很困惑,因为 DATA-Label 已关闭并且首先被解释为 GND | DATA | VCC 而不是 GND | VCC | DATA
      • 您可以连接约 17.3 厘米的天线以扩大范围
      #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 接收/发送的问题。

      【讨论】:

      • 感谢您的详细回答-我将在本周末或下周试一试。但是,我的 ESP32 的 3V 和 5V 是一样的,所以应该没问题。
      • 安全总比抱歉... ESP32 板将在 Vin 上提供 5V 电源 - 仅当通过 USB 供电时。 ESP32 芯片仅提供 3.3V 输出 - 该芯片仅在 3.3V 上运行 (see here)。祝你好运:)
      【解决方案3】:

      发送器必须有 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)

      【讨论】:

      • 实际上我尝试了带有 Esp32-GPIOs 3.3V 的接收器,这对我来说还不够——接收器需要 5V 的数据表要求。发件人还说可以使用 3.5V - 12V - 似乎越多越好。但是你对使用接收器的 5V 输出来冒险/损坏你的 Esp32 是正确的——在我的情况下,ESP32 处理 5V,但我不知道它在这种情况下能存活多久。使用 5V -> 3.3V 电平转换器可能会更好,最后是receiver-OUT(5V) -&gt; LevelShifter(5V=&gt;3.3V) -&gt; Esp32-IN(3.3V)
      猜你喜欢
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 2017-01-20
      • 2023-02-10
      • 2020-06-16
      相关资源
      最近更新 更多