Multiple 443mhz Receiver s fail

Hello everyone,
I am trying to sniff signals from a 433mhz remote . I have bought several pieces of hardware trying to achieve this.

Micro Controllers

  • Arduino Uno R3
  • Esp32 wroom 32

Other hardware

2 TTL Adapters

433 Hardware

  • Generic MX-RM-5V receiver and fs1000a transmitter (I attached 17cm cable to each as antenna)
  • Cc1001 transceiver - Set of two (screwed on black antennas)
  • Heterodyne transmitter and transceiver (added included antennas)

So far I have failed to receive any signal from my remote or any of the senders.

Both Microcontrollers work fine with basic tests like blink.

When trying to attach the cc1001 to the esp32 I seems to be stuck in a bit loop, from what I understand die to me using a special pin to attach the transceiver that triggers it.

There are multiple versions of libraries for each of the components being recommend, I am unsure which ones to use.

I tried to do a basic sender circuit with the fs1000a an a battery and a switch as well as a basic Receiver with a transistor and a second power source.

What I am looking for is guidance for a most basic setup to check if any of my 433mhz components work. I have a basic multi meter but not an osciloskope. The remote works obviously as the lamp can be controlled.

What we’re looking for is an annotated schematic abd the code you’re working with.

A link to the instructions or datasheet for your RF modules wil help.

1 Like

To test if the receivers are working you could use an audio recording setup, e.g. audacity. This can replace an oscilloscope for your purposes because the data rate on the receiver output is low enough.

1 Like

Try the Swiss Guy, he is Mr LORA.https://www.youtube.com/@AndreasSpiess

2 Likes

Makes, sense. here is one I tried

+-----------+
|  MX-RM-5V |
|   \\\     |
|           |
|   +-+     |
|   |O|     |
|   +-+     |--   1 VCC 
|   ___     |--   2 Data
|  |___|    |--   3 Data
+-----------+--   4 Ground         




                                  +-----+
     +----[PWR]-------------------| USB |--+
     |                            +-----+  |
     |         GND/RST2  [ ][ ]            |
     |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |   C5 
     |          5V/MISO2 [ ][ ]  A4/SDA[ ] |   C4 
     |                             AREF[ ] |
     |                              GND[ ] |
     | [ ]N/C                    SCK/13[ ] |   B5
     | [ ]IOREF                 MISO/12[ ] |   .
     | [ ]RST                   MOSI/11[ ]~|   .
     | [ ]3V3    +---+               10[ ]~|   .
     | [1]5v     | A |                9[ ]~|   .
     | [4]GND   -| R |-               8[ ] |   B0
     | [ ]GND   -| D |-                    |
     | [ ]Vin   -| U |-               7[ ] |   D7
     |          -| I |-               6[ ]~|   .
     | [ ]A0    -| N |-               5[ ]~|   .
     | [ ]A1    -| O |-               4[ ] |   .
     | [ ]A2     +---+           INT1/3[ ]~|   .
     | [ ]A3                     INT0/2[2] |   .
     | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |   .
     | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |   D0
     |            [ ] [ ] [ ]              |
     |  UNO_R3    GND MOSI 5V  ____________/
      \_______________________/          

arduino acii art source HTTP://BUSYDUCKS.COM/ASCII-ART-ARDUINOS

/*
  Example for receiving
  File > Examples > RC_Switch > ReceiveDemo_Advanced
  https://github.com/sui77/rc-switch/
  

*/

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2
}

void loop() {
  if (mySwitch.available()) {
    output(mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength(), mySwitch.getReceivedDelay(), mySwitch.getReceivedRawdata(),mySwitch.getReceivedProtocol());
    mySwitch.resetAvailable();
  }
}
/*
  Simple example for receiving
    File > Examples > RC_Switch > ReceiveDemo_Simple
  https://github.com/sui77/rc-switch/
*/

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2
}

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.println( mySwitch.getReceivedProtocol() );

    mySwitch.resetAvailable();
  }
}

Okay sounds good, how do I get the signal in? I searched the web, but not sure how I am to get the signal inside my PC . Am I understanding correctly that I should use a headphone jack of broken headphones with some resistors to attach the receiver?

There are standard tools for this, I just can't remember where I learned about it but it involves SDR (Software Defined Radio)

I think this is what you need
https://www.youtube.com/watch?v=LE1CvGWqSsw

The first one is crap. CC1101 is quite complicated to use.
Third one looks like the best option here, wiring and coding is simple.

For recording connect the output of the receiver with a headphone jack and plug it into audio line input of your PC.
You need two wires, one for ground and one for the signal. A headphone jack usually has 3 solder pins (ground, stereo left, stereo right). Connect the receiver output via a resistor (about 2 k) to one of the stereo pins.

Thanks everyone for your input so far.
The RX470c-v01 "Superheterodyne" receiver gave a lot less noise than the MX-RM-5V, but both worked.

I attached it to 5V and the signal via a 220 ohm resistor

          +-----------------------------+
          |     RX470C-V01 Receiver     |
          |                             |
          |  GND  o---------------------+-------------------+
          |                             |                   |
          |  VCC  o----[5V from power module]               |
          |                             |                   |
          |  OUT  o----[220Ω]----+------|----> TIP (jack)   |
          +----------------------+      |                   |
                                        |                   |
                                   GND (shared)-------------> SLEEVE (jack)
                                                       
                                             [3.5mm Audio Jack]
                                            TIP —> Data (via 220Ω)
                                            RING —> (optional, same as tip or NC)
                                            SLEEVE —> GND

Now the question for me is, how do I make sense of the signal

According to this guide

I am looking at a pulse position modulation (ppm) signal. I decoded one of the Buttons signal by hand.

So the signal is:
0000 1100 1111 0001 0001 1000 1110 10111

What do I do now? rtl_433 does not mention opening audio files in the documentation. Do I need to do this by hand for all buttons? Since I am now certain that the receiver works fine, I should be able to make it play nice with the Arduino, no? And what do I do now to send this signal? In case anyone is curious to listen to my remote, I included the on key for your enjoyment.
on_key.wav.zip (622,5 KB)

Post the raw signal here, including all timings.

@kmin I uploaded the .wav file in the zip archive,what do you mean by raw signal?

Sorry for that, I don't open zip files.
You could post the raw signal here.

@kmin maybe you mean something like this?

record raw timings

#define DATA_PIN 2

void setup() {
  Serial.begin(115200);
  pinMode(DATA_PIN, INPUT);
  Serial.println("Ready to capture signal...");
}

void loop() {
  static uint32_t lastTime = 0;
  static int lastState = HIGH;
  static bool capturing = false;
  static uint32_t lastPulseTime = 0;

  int state = digitalRead(DATA_PIN);
  uint32_t now = micros();

  if (state != lastState) {
    uint32_t duration = now - lastTime;
    lastTime = now;

    // Ignore very short blips (noise)
    if (duration > 100) {
      if (!capturing) {
        Serial.println("\n--- Start of Signal ---");
        capturing = true;
      }

      Serial.print("State: ");
      Serial.print(state);
      Serial.print(" Duration: ");
      Serial.println(duration);

      lastPulseTime = now;
    }

    lastState = state;
  }

  // Stop capturing if there's been a long silence (>10 ms)
  if (capturing && (now - lastPulseTime > 10000)) {
    Serial.println("--- End of Signal ---\n");
    capturing = false;
  }
}

22:54:20.600 -> State: 1 Duration: 3276
22:54:20.600 -> State: 0 Duration: 976
22:54:20.600 -> State: 1 Duration: 3108
22:54:20.600 -> State: 0 Duration: 1056
22:54:20.600 -> State: 1 Duration: 3000
22:54:20.600 -> State: 0 Duration: 1252
22:54:20.600 -> State: 1 Duration: 2124
22:54:20.600 -> State: 0 Duration: 2260
22:54:20.600 -> State: 1 Duration: 1988
22:54:20.631 -> State: 0 Duration: 2124
22:54:20.631 -> State: 1 Duration: 2488
22:54:20.631 -> State: 0 Duration: 1764
22:54:20.631 -> State: 1 Duration: 2312
22:54:20.631 -> State: 0 Duration: 1936
22:54:20.631 -> State: 1 Duration: 3152
22:54:20.631 -> State: 0 Duration: 1100
22:54:20.631 -> State: 1 Duration: 2124
22:54:20.631 -> State: 0 Duration: 2408
22:54:20.631 -> State: 1 Duration: 2516
22:54:20.631 -> State: 0 Duration: 1452
22:54:20.631 -> State: 1 Duration: 2608
22:54:20.631 -> State: 0 Duration: 8332
22:54:20.631 -> State: 1 Duration: 3960
22:54:20.663 -> State: 0 Duration: 520
22:54:20.663 -> State: 1 Duration: 512
22:54:20.663 -> State: 0 Duration: 512
22:54:20.663 -> State: 1 Duration: 1544
22:54:20.663 -> State: 0 Duration: 1792
22:54:20.663 -> State: 1 Duration: 3280
22:54:20.663 -> State: 0 Duration: 968
22:54:20.663 -> State: 1 Duration: 3112
22:54:20.663 -> State: 0 Duration: 1056
22:54:20.663 -> State: 1 Duration: 3000
22:54:20.663 -> State: 0 Duration: 1248
22:54:20.663 -> State: 1 Duration: 2124
22:54:20.663 -> State: 0 Duration: 2268
22:54:20.695 -> State: 1 Duration: 1984
22:54:20.695 -> State: 0 Duration: 2132
22:54:20.695 -> State: 1 Duration: 2480
22:54:20.695 -> State: 0 Duration: 1764

you need to know what code and what protocol your remote is working with. Looking at your examples it could be Manchester coding. But there are further methods used by other remotes, i.e. pulse width.
Some time ago I researched about wheater sensors the result of which is attached as word document - in German.
For Oregon Scientific sensors an Arduino sketch also is attached.
If your remote is not contained in the word document then internet search should help.
WeatherSensors.zip (770.0 KB)

The sketch I sent to you is not complete. Attached now a lot of header files and examples.
ookDecoder-master.zip (27.0 KB)

Have you read the data sheets on the different receivers to understand how they operate? Most, if not all will require a synchronizing stream of bits before any data can be decoded from the received RF signal. The data sheets will tell you what is required. If the receiver requirement and the transmitter requirements are not compatible, there will be no data or it will be miss-interpreted. The data part of the signal will likely be 8-bit, but will not have start-stop bits like async serial data.

The challenge is that I have a remote for a color LED lamp that I want to emulate, but I don't have access to the proper documentation.

I have researched the components I bought, only the CC1101 documentation is worth writing home about.

That signal looks pretty much NEC IR-signal. Could be that they replaced IR remote with RF leaving the signal untouched. Can you post the high/low times from that capture?

Edit: It's 33bit signal, so some custom protocol.

How many signals you need to capture/transmit?