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.