RF Bridge using ESP32

Is it possible to create an RF Bridge using an ESP32?
If so, what is the process?

What do you mean by "RF Bridge"?

ESPHome supports a number of RF platforms with components for receiving and transmitting.

As well as components for specific chipsets/devices:

There's even a "Ready Made Project" for RF built on the M5 Stack line of ESP32 devices. Just FYI, this project uses the RF Proxy integration, which is still in its infancy. So, it probably won't be what you are looking for right now. At least, not without additional configuration.

There's also OpenMQTTGateway's RF Gateway which works with HA over MQTT.

Sorry, I am looking to control RF devices in HA.

Thanks, for the information. Really appreciate it. I'm sure i will have additional questions.

Will a device like this allow me to use RF with HA? Such as for a Ceiling fan and light?

I used a CC1101 with a ESP32

Here is my code.. Once setup you can login to the web portal and view the logs of remote button presses and just copy them to send the command.

esphome:
  name: fancontroller
  friendly_name: FanController

esp32:
  board: esp32dev
  framework:
    type: esp-idf

# Enable logging
logger:
#  level: VERY_VERBOSE

# Enable Home Assistant API
api:
  encryption:
    key: ""

ota:
  - platform: esphome
    password: ""

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Fancontroller Fallback Hotspot"
    password: ""

captive_portal:
web_server:

globals:
  - id: learned_code
    type: std::vector<int32_t>
    restore_value: no
  - id: learning_mode
    type: bool
    initial_value: 'true'
  - id: signal_learned
    type: bool
    initial_value: 'true'
spi:
  clk_pin: GPIO18
  mosi_pin: GPIO23
  miso_pin: GPIO19

cc1101:
  cs_pin: GPIO05
  id: cc1101_module
  frequency: 433.92 MHz



remote_receiver:
  id: rf_receiver
  pin: GPIO15  # Must match GDO2
  dump: rc_switch
  tolerance: 50%
  filter: 250us
  idle: 4ms


remote_transmitter:
  pin: GPIO21
  # RF uses a 100% carrier signal
  carrier_duty_percent: 100%
  id: rf_transmitter
  on_transmit: 
    then:
      - cc1101.begin_tx:
  on_complete: 
    then:
      - cc1101.begin_rx:

button:
  - platform: template
    name: "Fan OFF"
    on_press:
      - remote_transmitter.transmit_rc_switch_raw:
          protocol: 1
          code: "11101100110111110000000100110010"
          repeat: 3

  - platform: template
    name: "Fan Speed 1"
    on_press:
      - remote_transmitter.transmit_rc_switch_raw:
          protocol: 1
          code: "11101100110111110000010000110111"
          repeat: 3

  - platform: template
    name: "Fan Speed 2"
    on_press:
      - remote_transmitter.transmit_rc_switch_raw:
          protocol: 1
          code: "11101100110111110000101000111001"
          repeat: 3

  - platform: template
    name: "Fan Speed 3"
    on_press:
      - remote_transmitter.transmit_rc_switch_raw:
          protocol: 1
          code: "11101100110111110000100000111011"
          repeat: 3

  - platform: template
    name: "Fan Speed 4"
    on_press:
      - remote_transmitter.transmit_rc_switch_raw:
          protocol: 1
          code: "11101100110111110000110000111111"
          repeat: 3

  - platform: template
    name: "Fan Speed 5"
    on_press:
      - remote_transmitter.transmit_rc_switch_raw:
          protocol: 1
          code: "11101100110111110000011000110101"
          repeat: 3

  - platform: template
    name: "Fan Speed 6"
    on_press:
      - remote_transmitter.transmit_rc_switch_raw:
          protocol: 1
          code: "11101100110111110000010100110110"
          repeat: 3
  - platform: template
    name: "Fan Speed Reverse"
    on_press:
      - remote_transmitter.transmit_rc_switch_raw:
          protocol: 1
          code: "11101100110111110001000100100010"
          repeat: 3

Thank you so much, will give it a try.

btw, what is the distance of RF? Does it need to be in the same room?

I have my cc1101 in a storage room in a basement that reaches to a outdoor ceiling fan thats about 60ft away and goes through 2 walls.. range is alot better than i thought it would be.

Yes, the Sonofr RF bridge R2 can easily be converted to ESPhome and it is quite easy to do.
There are several guides even some video ones.
You might need an adapter to program it, but it is cheap.

Thank to everyone.
I have a bunch of ESP32 chips, so I just ordered the CC1101 and give that a try. If that fails, will go with Sonos RF Bridge.

I have completed the setup. i am no able to see anything from webui when pressing buttons on my remote. The remote says 434Mhz.
Is there a way to test the radio and configuration of my setup?

That code on post #6 doesn't show you anything in UI, see your esphome logs. That code is not for bridge and it was ripped from something that supposed to learn signals...

Somethings not right, getting a failure with the C1101 module.
Also noticed when i started, PIN 1 is suppose to be 3.3 on the C1101, but on my module 1 is gnd and 2 is 3.3v

[17:48:40][I][logger:122]: Log initialized
[17:48:40][C][safe_mode:189]: Unsuccessful boot attempts: 0
[17:48:40][D][preferences:148]: Writing 1 items: 0 cached, 1 written, 0 failed
[17:48:40][I][app:060]: Running through setup()
[17:48:40][D][spi_device:395]: mode 0, data_rate 1000kHz
[17:48:40][D][cc1101:148]: CC1101 found! Chip ID: 0x0000
[17:48:40][E][cc1101:150]: Failed to verify CC1101.
[17:48:40][E][component:277]: cc1101 was marked as failed
[17:48:40][E][component:389]: cc1101 set Error flag: unspecified
[17:48:40][C][wifi:645]: Starting
[17:48:40][D][wifi:1303]: Starting scan
[17:48:40][C][component:237]: Setup wifi took 104ms
[17:48:40][W][component:382]: api set Warning flag: waiting for client connection
[17:48:40][I][app:117]: setup() finished successfully!
[17:48:40][W][component:382]: wifi set Warning flag: scanning for networks
[17:48:40][I][app:151]: ESPHome version 2026.6.0 compiled on 2026-06-18 17:28:16 -0400
[17:48:41][I][app:158]: ESP32 Chip: ESP32 rev3.1, 2 core(s)
[17:48:41][W][app:171]: Chip rev >= 3.0 detected. Set minimum_chip_revision: "3.1" under esp32 > framework > advanced to reduce binary size
[17:48:41][W][app:198]: Bootloader supports SRAM1 as IRAM (+40KB). Set sram1_as_iram: true under esp32 > framework > advanced
[17:48:41][C][logger:219]: Logger:
[17:48:41][C][logger:219]:   Max Level: DEBUG
[17:48:41][C][logger:219]:   Initial Level: DEBUG
[17:48:41][C][logger:226]:   Log Baud Rate: 115200
[17:48:41][C][logger:226]:   Hardware UART: UART0
[17:48:41][C][logger:235]:   Task Log Buffer Size: 768 bytes
[17:48:41][C][spi:066]: SPI bus:
[17:48:41][C][spi:152]:   CLK Pin: GPIO18
[17:48:41][C][spi:152]:   SDI Pin: GPIO19
[17:48:41][C][spi:152]:   SDO Pin: GPIO23
[17:48:41][C][spi:074]:   Using HW SPI: SPI2_HOST
[17:48:41][C][cc1101:241]: CC1101:
[17:48:41][C][cc1101:241]:   Chip ID: 0x0000
[17:48:41][C][cc1101:241]:   Frequency: 433919840 Hz
[17:48:41][C][cc1101:241]:   Channel: 0
[17:48:41][C][cc1101:241]:   Modulation: ASK/OOK
[17:48:41][C][cc1101:241]:   Symbol Rate: 4996 baud
[17:48:41][C][cc1101:241]:   Filter Bandwidth: 203125.0 Hz
[17:48:41][C][cc1101:241]:   Output Power: 9.6 dBm
[17:48:41][C][cc1101:152]:   CS Pin: GPIO5
[17:48:41][E][component:216]:   cc1101 is marked FAILED: unspecified
[17:48:41][C][remote_receiver.esp32:120]: Remote Receiver:
[17:48:41][C][remote_receiver.esp32:120]:   Clock resolution: 1000000 hz
[17:48:41][C][remote_receiver.esp32:120]:   RMT symbols: 192
[17:48:41][C][remote_receiver.esp32:120]:   Filter symbols: 0
[17:48:41][C][remote_receiver.esp32:120]:   Receive symbols: 192
[17:48:41][C][remote_receiver.esp32:120]:   Tolerance: 50%
[17:48:41][C][remote_receiver.esp32:120]:   Carrier frequency: 0 hz
[17:48:41][C][remote_receiver.esp32:120]:   Carrier duty: 100%
[17:48:41][C][remote_receiver.esp32:120]:   Filter out pulses shorter than: 250 us
[17:48:41][C][remote_receiver.esp32:120]:   Signal is done after 4000 us of no changes
[17:48:41][C][remote_receiver.esp32:152]:   Pin: GPIO4
[17:48:41][C][remote_transmitter:060]: Remote Transmitter:
[17:48:41][C][remote_transmitter:061]:   Clock resolution: 1000000 hz
[17:48:41][C][remote_transmitter:061]:   RMT symbols: 64
[17:48:41][C][remote_transmitter:152]:   Pin: GPIO2

Got some fans working.
ESP32 Bluetooth Proxy along with HACS-Home Assistant BLE ADV Ceiling Fan / Lamps. Seems as some of my fans are running at 2.4ghz.

Still working on the 433ghz Fans which are Hunter.