Hi everyone,
I'm trying to control a 433MHz RF ceiling fan using an ESP32 + CC1101 module with ESPHome. I based my hardware wiring and initial config entirely on this excellent project by Daedilus:
GitHub - Daedilus/cc1101-esp32-esphome-fan-controller: Automate dumb ceiling fans using CC1101 RF transceiver, ESP32, and ESPHOME ยท GitHub
ESPHome version: 2026.5.1
The problem
I can receive the remote's signal perfectly โ the code is always the same (not rolling code), and both the RC Switch and Pronto formats look clean and consistent:
Received RCSwitch Raw: protocol=1 data='00011111000000100011000110111'
Pronto: 0000 006D 001E 0000 000D 002B 000D 002B 000D 002B 0029 000F 002A 000E
002A 000E 002B 000E 0029 000E 000F 002A 000D 002B 000D 002B 000D 002B 000E 002A
000D 002B 0029 000F 000D 002C 000D 002B 000D 002B 0029 000F 002A 000F 000D 002B
000E 002A 000E 002A 002A 000F 0029 000F 000D 002B 0029 000E 0029 000F 002A 000E 000E 009B
However, when I press the button to transmit that same code, the remote_receiver only picks up this:
Pronto: 0000 006D 0001 0000 000A 009B
What I've figured out so far
After some debugging I confirmed:
The CC1101 IS transmitting RF โ I verified this by putting the chip into continuous TX mode for 3 seconds with cc1101.begin_tx + delay: 3000ms. During those 3 seconds the original remote stopped working, which means the CC1101 is definitely emitting at 433.92MHz and interfering.
That's a single very short pulse โ not the actual RF signal being transmitted.
Current ESPHome config
esphome:
name: ventilador-rf
friendly_name: Ventilador_RF
esp32:
board: esp32dev
framework:
type: esp-idf
advanced:
sram1_as_iram: true
logger:
level: INFO
api:
encryption:
key: ""
ota:
- platform: esphome
password: ""
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Ventilador-Rf Fallback Hotspot"
password: "XsIBKqupR2Iu"
captive_portal:
spi:
clk_pin: GPIO14
mosi_pin: GPIO23
miso_pin: GPIO19
interface: hardware
cc1101:
id: cc1101_radio
cs_pin: GPIO32
frequency: 433.92MHz
output_power: 11
remote_transmitter:
id: rf_tx
pin: GPIO26 # GDO0
carrier_duty_percent: 100%
non_blocking: False
on_transmit:
then:
- cc1101.begin_tx:
id: cc1101_radio
- delay: 2ms
on_complete:
then:
- cc1101.begin_rx:
id: cc1101_radio
remote_receiver:
- id: rf_rx
pin: GPIO25 # GDO2
dump: all
tolerance: 25%
filter: 250us
idle: 4ms
buffer_size: 10kb
rmt_symbols: 96
on_rc_switch:
- logger.log:
format: "CC1101 Received: protocol=%d, code=0x%llX"
args: [x.protocol, x.code]
radio_frequency:
- platform: ir_rf_proxy
name: RF Transmitter 433MHz
frequency: 433.92MHz
remote_transmitter_id: rf_tx
- platform: ir_rf_proxy
name: RF Receiver 433MHz
frequency: 433.92MHz
remote_receiver_id: rf_rx
button:
- platform: template
name: Master Fan Off
on_press:
- remote_transmitter.transmit_rc_switch_raw:
code: '00011111000000100011000110111'
protocol: 1
repeat:
times: 10
wait_time: 10ms
- platform: template
name: Test TX continuo
on_press:
- cc1101.begin_tx
- delay: 3000ms
- cc1101.begin_rx
Any help appreciated! ![]()