Question about ESP32-S23, its RX/TX ports and the use

I have an ESP-RS485 board for a garage door opener.
The manufacturer uses the two RX/TX pins GPIO17 and GPIO18 internally for serial communication with the garage door opener.
They have also provided the two ESP32-S2 TX/RX ports GPIO43 and GPIO44 on their board as a user option for expansion.
I would like to use these two ports for a display (Nextion).

Since I also want to connect a 433 MHz transmitter and receiver, I saw a note in ESPhome that an RX memory is used internally for communication.

Here’s the note ===>

On the ESP32 and ESP32-S2 variants, RMT memory is shared between RX and TX components. On other variants, RX and TX have dedicated RMT memory.

The Link ===>
Is it possible that if I’m already using both hardware RX/TX ports, I won’t be able to connect or use a 433 MHz transmitter and receiver at all?
I would connect the 433 MHz transmitter to GPIO07.
I still have GPIO pins 13, 14, 16, and 16 free.

What kind of? Simple ones don’t use serial.

That has nothing to do with serial RX/TX (UART).

I think, that’s the answere.
It’s actually just a simple 433MHz transmitter and receiver module that I’m using.

I was just confused when I read something about TX/RX in the manufacturer’s documentation.
They use sample code for an Arduino Uno, and it uses a virtual UART library… that’s why I thought you had to use an RX/TX pin or a soft-water serial port for these 433MHz modules.

I’ve never seen this in any of the ESPHOME examples for 433MHz transmitters and receivers.




That transmitter is decent, but throw that receiver as fast as you can in the trashcan.

1 Like

Hello,
the receiver is the most important component right now, and only once.
In need him onle 1 time…

I need to read a 433 MHz remote control with this component so that I can then use the transmitter to send the code via my ESP.
So I only need the receiver once.

Is it really not suitable for this one time?

I’ve noticed that I get what feels like 10,000 characters when I press just one button on the remote control.
I hope this isn’t the receiver’s fault.

What can I do?

i get now only this data if i push a button on my remot-control

18:53:45	[D]	[remote.beo4:086]	
Beo4: n_sym=369
18:53:45	[I]	[remote.pronto:231]	
Received Pronto: data=
18:53:45	[I]	[remote.pronto:233]	
0000 006D 00B9 0000 0076 0055 0074 0055 0074 0051 0078 004F 007A 004D 0074 0059 006E 0051 0072 0053 0075 004A 0079 0048 007A 004D 0077 004A 0077 0049 007A 0047 007A 0046 007A 004C 0073 0050 0071 004D 0073 004C 0073 004D 0073 0041 
18:53:45	[I]	[remote.pronto:233]	
007C 0047 0006 0006 006C 0048 0075 0045 0004 0005 0070 0049 0074 004D 0071 0044 0070 0046 0079 0046 006F 004A 0074 0043 0072 0051 006C 0047 006B 004A 0072 0047 006A 0046 0075 0042 0073 0042 0077 0044 006B 004E 006A 0043 0005 0004 
18:53:45	[I]	[remote.pronto:233]	
0063 0047 0071 0047 0069 0048 006E 003B 0071 0049 006C 0041 006D 0045 006F 003F 0070 0044 006D 003A 006F 003D 0074 003C 006E 0044 006D 003A 006E 0043 006A 003B 006C 003F 006D 0038 0070 003E 006E 003D 006B 003D 0067 003E 006A 003B 
18:53:45	[I]	[remote.pronto:233]	
0069 003A 006E 003C 0069 003E 006A 0041 006A 003A 006E 003E 006D 003F 0069 0043 0067 0041 0069 0040 0072 003C 006E 004A 0067 003B 006E 0046 006B 003E 006E 0046 006E 003E 006F 0048 006C 0041 0003 0003 0066 0048 006C 0047 006B 0046 
18:53:45	[I]	[remote.pronto:233]	
006F 0044 006E 0045 0071 0042 0003 0004 0068 0043 0003 0005 006A 0051 0064 0050 0067 0056 005F 0050 0067 0048 006E 004C 006A 0048 0075 0045 006D 004E 0073 0048 006C 004D 0074 0044 0071 004D 0078 0044 0072 0052 0071 0046 0071 004F 
18:53:46	[I]	[remote.pronto:233]	
0004 0003 006C 0046 0007 0006 0067 004C 0079 004E 006D 0053 0070 0053 0069 0051 0071 004E 0072 0055 006E 0050 0071 004E 0003 0004 006F 0051 0070 0051 0072 0052 0076 0055 006E 0053 0076 0050 0073 0049 0003 0003 0078 004F 0077 004A 
18:53:46	[I]	[remote.pronto:233]	
0008 0002 0077 0055 0071 004E 007D 004B 007B 004E 007C 004C 0080 004F 007B 0050 007B 004E 007C 0048 0084 0050 0080 004E 007D 004E 0078 0052 0083 004C 007A 005D 0079 004D 007F 0052 0083 0050 007D 0055 007F 004E 0080 0057 0081 0052 
18:53:46	[I]	[remote.pronto:233]	
007D 0052 0085 0053 007E 0053 0083 0058 007A 0050 0089 004E 0086 0051 0087 0055 0080 0051 0009 0001 007A 0051 0080 0058 007D 0053 0080 0052 0082 0052 0081 004F 0082 0051 007F 0052 007E 0052 007E 004E 0081 004F 0080 0052 007A 0052 
18:53:46	[I]	[remote.pronto:233]	
007D 004B 0082 0051 0181 
18:53:46	[W]	[component:453]	
remote_receiver took a long time for an operation (57 ms)

But I don’t think I can do anything with this data…
From what I’ve read, I should receive some kind of HEX data format.
like that
{“Data”:“0xFFD55F”,“Bits”:24,“Protocol”:1,“Pulse”:151}

That receiver is trash, but if it works, you can try with it. What kind of device you are trying to receive? If you don’t know the protocol, set it dump: raw.

I Think now i get a good result
from that crazy Receiver
If i put very close the remote control to the receiver then the result looks like clear.
i have 4 Buttosn on my rtemot controle
+, -, ON, OFF
there is the result

Jetzt aber # fernbedienung ganz nahe ranhalten
+ ===>
[20:54:32.805][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='0001110001011110000010001111000'
[20:54:34.340][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000100011110000'
[20:54:34.377][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000100011110000'
[20:54:34.414][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000100011110000'
[20:54:34.451][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000100011110000'
[20:54:35.659][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000100011110000'
[20:54:35.697][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000100011110000'
[20:54:35.736][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000100011110000'
[20:54:35.787][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000100011110000'

- =======>
[20:55:37.530][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000001010001000'
[20:55:37.573][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000001010001000'
[20:55:37.612][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000001010001000'
[20:55:37.650][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000001010001000'
[20:55:37.708][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000001010001000'
[20:55:37.746][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000001010001000'
[20:55:37.784][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000001010001000'
[20:55:37.820][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000001010001000'
[20:55:37.858][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000001010001000'
[20:55:37.896][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000001010001000'
[20:55:37.935][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000001010001000'
[20:55:37.972][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000001010001000'
[20:55:38.028][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000001010001000'

ON ======>
[20:56:31.831][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100001000110110000'
[20:56:31.882][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100001000110110000'
[20:56:31.920][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100001000110110000'
[20:56:31.958][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100001000110110000'
[20:56:31.995][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100001000110110000'
[20:56:32.033][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100001000110110000'
[20:56:32.074][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100001000110110000'
[20:56:32.113][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100001000110110000'
[20:56:32.165][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100001000110110000'
[20:56:32.204][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100001000110110000'
[20:56:32.243][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100001000110110000'
[20:56:32.282][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100001000110110000'
[20:56:32.319][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100001000110110000'

OFF ====>
[20:57:12.089][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000010100001000'
[20:57:12.126][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000010100001000'
[20:57:12.165][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000010100001000'
[20:57:12.217][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000010100001000'
[20:57:12.257][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000010100001000'
[20:57:12.294][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000010100001000'
[20:57:12.334][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000010100001000'
[20:57:12.370][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000010100001000'
[20:57:12.408][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000010100001000'
[20:57:12.445][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000010100001000'
[20:57:12.500][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000010100001000'
[20:57:12.537][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000010100001000'
[20:57:12.575][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=1 data='00011100010111100000010100001000'

and ther is the coderemote_receiver:

remote_receiver:
  pin: GPIO18
  dump: rc_switch
  # Settings to optimize recognition of RF devices
  tolerance: 50%
  # filter: 250us
  idle: 4ms
  #rmt_channel: 2

at the next days i try to send tany code then i will see work or not

edit:
i found the code sample from there

but the remote control, i put i like 3 or max 5cm in front of that crazy 433MHZ Receiver

After several failed attempts, I managed to continue using the old remote controls for my 433MHz sockets at home with the following modules:


(For example: https://de.aliexpress.com/item/1005006004929446.html)

I first tried using modules that looked like yours and failed. I’m afraid francisp is right, and the modules pictured aren’t exactly the best choice.

Button codes at my system:
Frontmost 8 numbers: Device address: for example 00010100 (switch positions 1-5)
Middle 8 are numbers: Pressed button
Button A: 00000101
Button B: 00010001
Button C: 00010100
Button D: 00010101

Last 8 numbers:
Pressed ON => End = 01010001
Pressed OFF => End = 01010100

#Living room
MHZ433_A__ON: “00010100 00000101 01010001”
MHZ433_A_OFF: “00010100 00000101 01010100”
MHZ433_B__ON: “00010100 00010001 01010001”
MHZ433_B_OFF: “00010100 00010001 01010100”
MHZ433_C__ON: “00010100 00010100 01010001”
MHZ433_C_OFF: “00010100 00010100 01010100”
MHZ433_D__ON: “00010100 00010101 01010001”
MHZ433_D_OFF: “00010100 00010101 01010100”

My setting (found by try and error):

substitutions:
  MHZ433_A__ON: "000101000000010101010001" 
  MHZ433_A_OFF: "000101000000010101010100" 
  MHZ433_B__ON: "000101000001000101010001" 
  MHZ433_B_OFF: "000101000001000101010100" 
  MHZ433_C__ON: "000101000001010001010001" 
  MHZ433_C_OFF: "000101000001010001010100" 
  MHZ433_D__ON: "000101000001010101010001" 
  MHZ433_D_OFF: "000101000001010101010100" 

remote_transmitter:
  pin: D8 #GPIO15
  carrier_duty_percent: 100%
 
remote_receiver:
  pin: D7 #GPIO13
  dump: rc_switch
  tolerance: 90%
  filter: 250us
  idle: 4ms
  buffer_size: 500b


binary_sensor:

  - platform: remote_receiver
    name: "433MHZ_A_ON_REC"
    rc_switch_raw:
      protocol: 1
      code: '$MHZ433_A__ON'  #A-ON

    on_press:
      then:
        - switch.turn_on: MHZ433_A_Switch_State   #Switch on Template-Switch for Homeassistant display

1 Like

Signals look good, same reception 13 times repeated.
Ok, Rc_switch with 50% tolerance is not best way to clone some code if that’s your approach. Try with raw.

1 Like

There are plenty of decent superheterodyne receivers on AE for $1-2.
But every time it starts with MX-05V here… :wink:

1 Like

Many Thanks @ LutzDe

i will send back that crazy Receiver (amazon is possible)

I’ve been looking for 433 MHz modules like the ones you recommended.
I’ve found some interesting ones.
So, these are the STX882 transmitter + SRX882.

A user who reviewed them on Amazon said that they work correctly when the VCC pin is connected to the CS pin…
those were the Rockyin STX882 transmitter + SRX882 modules.

I also found the
QIACHIP Wireless RX480E Transmitter & Receiver 433 MHz Modules…
they have the most positive reviews.
Almost 200 users can’t be as wrong as just 5.

I’ve attached some pictures.
I think this topic keeps coming up for some people who are having trouble with it.

I’m going to test your module and the RX480E.

At the same time, I’ll test whether the codes my Crazy Receiver spewed out actually work. I’ll do that until the others arrive.

Thank you so much for your support.
This helped me a lot.
Also, thanks to @francisp

There are many decent devices available for $1/pc. They are all better than mx-05v.
https://aliexpress.com/item/1005003436580019.html

But you got decent reception from yours, don’t hurry to buy new ones if it’s just one time approach.

1 Like

I received my new 433MHz receiver and transmitter today, which were recommended to me by @LutzDe (the receiver is the improved version 2.0).

Over the past few days, I’ve done some more research and testing.

For example, I tried sending the clean codes (see above) that I was able to read from the receiver (32-bit) with the remote control at a distance of about 5cm to the diesel heater.

The heater didn’t respond!

The heater I have is a VEVOR diesel heater from 2025 (only with Wi-Fi, no Bluetooth) for garages and RVs, and apparently widely used here in Europe.

This heater can be controlled with 433 MHz transmitters using ESP and Arduino, as shown in several YouTube videos.

Unfortunately, these videos still use 24-bit code, and I don’t know if they now require this pulse length for transmission.

I’ve included excerpts from my code below.

I might need to add repetitions to the transmission. I hope I can somehow read the pulse length so I can transmit it as well.

I’ve now found some articles about transmission here (which were also co-authored by @LutzDe).
and pulse-lengh
Link to the solution (Pulse and resolt from dump)

They mention pulse length.

So it could be that my device also requires this exact pulse length.

Unfortunately, it seems ESPHome doesn’t provide this crucial information. Pulse length not in the dump: all. I’d have to flash my ESPs with Tasmota for that.

Damn, unfortunately, these Lait Tasmota Webtools aren’t compatible even though they’re on the Tasmota compatibility list… I think…

I have an ESP32-S2-mini-1 (also known as ESP32-S2-Saola-2)

and it didn’t like my D1-mini ESP8266 clone either.

I think I still have a brand new, unopened Mini lying around in the basement. I’ll have to try that one too.

Do you have any other ideas?

I’ll post an update here in the next few days once I’ve connected the new receiver and transmitter.

Best regards,
Achim

### works with crazy receiver if the remot-control only only 5cm far..... but i get a clean binary result and a clean dump-all result, without the pulse-lengh
remote_receiver:
  pin: GPIO18
  #dump: all # rc_switch
  dump: # dump: all
    - rc_switch 
  # Settings to optimize recognition of RF devices
  tolerance: 50%
  # filter: 250us
  idle: 4ms
  #rmt_channel: 2

# not work
remote_transmitter:
  pin: GPIO17
  carrier_duty_percent: 50% # change from 100%  to 50%

 #  substitutions: 
#  MHZ433_A__ON: "00011100010111100001000110110000" binary_sensor:
  - platform: remote_receiver
    name: "433MHZ_A_ON_REC_1"
    rc_switch_raw:
      protocol: 1
      code: '$MHZ433_A__ON_1'  #A-ON
button:
#### RC Switch Raw
  - platform: template
    name: "Heizung An Button 1"
    on_press:
      - remote_transmitter.transmit_rc_switch_raw:
          code: "00011100010111100001000110110000"
          #code: "1C5E11B0"
          protocol: 
            pulse_length: 393
          repeat:
            times: 25
            wait_time: 0s

dump: raw

and post the log here.

Hello everyone,

Everything is working perfectly now!

Thank you so much for your help and tips.

I have one more request, which I’ll mention at the bottom.

Here’s what I did:

I now have the SRX882 and STX882 modules, which @LutzDe recommended above.

I also tested these two modules with a Tasmota-flashed ESP8266 to determine the pulse length.

This was the output when pressing the “+” button on the Vevor diesel heater’s remote control:

23:26:43.409 MQT: tele/tasmota_723F18/RESULT = {"Time":"2025-10-29T23:26:43","RfReceived":{"Data":"0x1C5E08F0","Bits":32,"Protocol":1,"Pulse":255}}

The pulse length was identical for “-”, “ON”, and “OFF”. It was always 255.

I then converted the received data using a hex-to-binary converter and compared it to my previous values.

They all matched.

I then inserted the converted binary codes with the pulse length into ESPHome, and lo and behold, everything works perfectly.
The transmit and receive performance of the STX882 and SRX882 modules is excellent.

Here’s the code ==>

remote_receiver:
  pin: GPIO18
  #dump: all # rc_switch
  dump: # dump: all
    - rc_switch 
  # Settings to optimize recognition of RF devices
  tolerance: 50%
  # filter: 250us
  idle: 4ms
  #rmt_channel: 2

# not work
remote_transmitter:
  pin: GPIO17
  carrier_duty_percent: 100% # change from 100%  to 50%

button:
#### RC Switch Raw
  - platform: template
    name: Heizung An
    on_press:
      - remote_transmitter.transmit_rc_switch_raw:   
          code: '00011100010111100001000110110000'
          protocol: 
            pulse_length: 255
          repeat:
            times: 5
            wait_time: 0s
  - platform: template
    name: Heizung Aus
    on_press:
      - remote_transmitter.transmit_rc_switch_raw:   
          code: '00011100010111100000010100001000'
          protocol: 
            pulse_length: 255
          repeat:
            times: 5
            wait_time: 0s
  - platform: template
    name: Heizleistung Plus
    on_press:
      - remote_transmitter.transmit_rc_switch_raw:   
          code: '00011100010111100000100011110000'
          protocol: 
            pulse_length: 255
          repeat:
            times: 5
            wait_time: 0s
  - platform: template
    name: Heizleistung Minus
    on_press:
      #- script.call: heizleistung_1
      - remote_transmitter.transmit_rc_switch_raw:   
          code: '00011100010111100000001010001000'
          protocol: 
            pulse_length: 255
          repeat:
            times: 5
            wait_time: 0s

I’m not very familiar with ESPHome and have a request.

My heater has “+” and “-” buttons.
I can adjust the heating power from 1 to 10.
After switching it on, the device is always set to 10.
I also have temperature sensors, etc.

I don’t want to have to switch the device on and off every time, but rather just adjust it up or down to a specific power level.

Since the heater returns the heating power setting, I would need to add an automation or script that always sets everything to the value 1 when adjusting the heating power, and then increases the heating power to X from there.

So, I would have to execute “-” (minus) 9 times to ensure I’m at 1, and then, for example, 4 “+” commands to reach heating power level 5.
And so forth .

This ESPHome-Code i try but i get a lot errors.

  - platform: template
    name: Heizungleistung Minus
    on_press:
      #- script.call: heizleistung_1
      - remote_transmitter.transmit_rc_switch_raw:   
          code: '00011100010111100000001010001000'
          protocol: 
            pulse_length: 255
          repeat:
            times: 5
            wait_time: 0s
  - platform: template
    name: Heizleistung 50%
    on_press:
      - script.call: heizleistung_5

script:
  - id: heizleistung_5
    then:
      - repeat:
            count: 9 # Set the heating power with minus-code to 1
              - remote_transmitter.transmit_rc_switch_raw:   
                  code: '00011100010111100000001010001000' 
                  protocol: 
                    pulse_length: 255
                  repeat:
                    times: 5
                    wait_time: 0s
      - repeat:
            count: 4 # Set the heating power with plus-code to 5
              - remote_transmitter.transmit_rc_switch_raw:   
                  code: '00011100010111100000100011110000' 
                  protocol: 
                    pulse_length: 255
                  repeat:
                    times: 5
                    wait_time: 0s
    then:
      - logger.log: "Aktion wiederholt"
      - delay: 1s

What i do wrong?

Your repeat has bad indentation and missing then:, also you need to add some delay between repeats. I don’t know the delay length, because you never posted what I asked.
Try like this:

script:
  - id: heizleistung_5
    then:
      - repeat:
          count: 9
          then:
            - remote_transmitter.transmit_rc_switch_raw:   
                code: '00011100010111100000001010001000' 
                protocol: 
                  pulse_length: 255
                repeat:
                  times: 5
                  wait_time: 0s
            - delay: 250ms

      - repeat:
          count: 4
          then:
            - remote_transmitter.transmit_rc_switch_raw:   
                code: '00011100010111100000100011110000'
                protocol: 
                  pulse_length: 255
                repeat:
                  times: 5
                  wait_time: 0s
            - delay: 250ms

      - logger.log: "Aktion wiederholt"
      - delay: 1s
1 Like