From 7e9ddf7ac724409630a0b4b5640a62c84e799e18 Mon Sep 17 00:00:00 2001 From: lygris Date: Thu, 13 Nov 2025 11:39:21 -0600 Subject: [PATCH 01/22] Add CC1101 docs --- content/components/_index.md | 1 + content/components/cc1101.md | 130 ++++++++++++++++++++++++++ content/components/images/cc1101.webp | Bin 0 -> 22576 bytes 3 files changed, 131 insertions(+) create mode 100644 content/components/cc1101.md create mode 100644 content/components/images/cc1101.webp diff --git a/content/components/_index.md b/content/components/_index.md index b00c2c89ff..ad39461cc4 100644 --- a/content/components/_index.md +++ b/content/components/_index.md @@ -1036,6 +1036,7 @@ Used for creating infrared (IR) or radio frequency (RF) remote control transmitt ESPHome to cellular networks. **Does not encompass Wi-Fi.** {{< imgtable >}} +"CC1101","components/cc1101","cc1101.webp","" "IR Remote Climate","components/climate/climate_ir","air-conditioner-ir.svg","dark-invert" "Remote Receiver","components/remote_receiver","remote.svg","dark-invert" "Remote Transmitter","components/remote_transmitter","remote.svg","dark-invert" diff --git a/content/components/cc1101.md b/content/components/cc1101.md new file mode 100644 index 0000000000..9b4e056142 --- /dev/null +++ b/content/components/cc1101.md @@ -0,0 +1,130 @@ +--- +title: CC1101 Low-Power Sub-1 GHz RF Transceiver +description: Instructions for setting up CC1101 RF Transceiver in ESPHome. +image: cc1101.webp +keywords: [cc1101] +--- + + +The **CC1101** component provides a driver for the **Texas Instruments CC1101** Sub-1 GHz RF Transceiver. +It allows you to transmit and receive raw RF signals (ASK/OOK, FSK, etc.) using the standard +[Remote Transmitter](remote_transmitter.md) and [Remote Receiver](remote_receiver.md) components. + +This component requires the [SPI Component](spi.md) to be enabled. + +{{< img src="cc1101.webp" alt="Image" width="50.0%" class="align-center" >}} + +## Component Configuration + +```yaml +# Minimal Example +cc1101: + cs_pin: GPIOXX + gdo0_pin: GPIOXX +```` + +## Configuration Variables + + - **cs\_pin** (**Required**, [Pin](pin.md)): The SPI Chip Select (CSN) pin connected to the module. + - **gdo0\_pin** (**Required**, [Pin](pin.md)): The GDO0 pin on the CC1101. This pin is used for sending and + receiving interrupt signals and raw data. + - **id** (*Optional*, [ID](id.md)): Manually specify the ID used for code generation. + - **output\_power** (*Optional*, float): The transmission power in dBm. Range: `-70` to `11`. Default: `11`. + - **rx\_attenuation** (*Optional*, enum): Internal RX attenuation. Options: `0dB`, `6dB`, `12dB`, `18dB`. + Default: `0dB`. + - **dc\_blocking\_filter** (*Optional*, boolean): Enable the digital DC blocking filter. Default: `True`. + - **tuner** (*Optional*): Fine-tuning for the radio frequency settings. See [Tuner Configuration](https://www.google.com/search?q=%23tuner-configuration). + - **agc** (*Optional*): Advanced Automatic Gain Control settings. See [AGC Configuration](https://www.google.com/search?q=%23agc-configuration). + +## Tuner Configuration + +```yaml +# Example Tuner Configuration +cc1101: + cs_pin: GPIOXX + gdo0_pin: GPIOXX + tuner: + frequency: 433.92MHz + modulation: ASK/OOK + bandwidth: 203kHz + symbol_rate: 5000 +``` + + - **frequency** (*Optional*, frequency): The operating frequency (e.g., `433.92MHz`). Range: `300MHz` to + `928MHz`. Default: `433.92MHz`. + - **bandwidth** (*Optional*, frequency): The receive filter bandwidth. Range: `58kHz` to `812kHz`. Default: + `203kHz`. + - **symbol\_rate** (*Optional*, int): The symbol rate in Baud. Range: `600` to `500000`. Default: `5000`. + - **modulation** (*Optional*, enum): The modulation format. Options: `ASK/OOK` (default), `2-FSK`, `4-FSK`, + `GFSK`, `MSK`. + - **deviation** (*Optional*, frequency): Frequency deviation for FSK/GFSK modulation. + - **channel** (*Optional*, int): Channel number (added to base frequency). + - **channel\_spacing** (*Optional*, frequency): Spacing between channels. + - **if\_frequency** (*Optional*, frequency): Intermediate Frequency. Default is optimized for 433MHz usage. + +## AGC Configuration +```yaml +# Example AGC Configuration +cc1101: + cs_pin: GPIOXX + gdo0_pin: GPIOXX + tuner: + frequency: 433.92MHz + modulation: ASK/OOK + bandwidth: 203kHz + symbol_rate: 5000 + agc: + magn_target: 24dB + max_lna_gain: 2.6dB + max_dvga_gan: -3 +``` + +Advanced users can fine-tune the Automatic Gain Control (AGC) settings. + + - **magn\_target** (*Optional*, dB): Target signal amplitude. Range: `24dB` to `42dB` in increments of 3(eg. `33dB`). + - **max\_lna\_gain** (*Optional*, dB): Maximum LNA gain reduction. Options: `Default`, `2.6dB`, `6.1dB`, `7.4dB`, `9.2dB`, `11.5dB`, `14.6dB`, `17.1dB`. + - **max\_dvga\_gain** (*Optional*, enum): Maximum Digital Variable Gain reduction. Options: `Default`, `-1`, `-2`, `-3`. + +## Integration with Remote Receiver/Transmitter + +To use the CC1101 for receiving or transmitting signals, you must configure the standard +[Remote Receiver](https://www.google.com/search?q=remote_receiver.md) or [Remote Transmitter](https://www.google.com/search?q=remote_transmitter.md) components to use the **GDO0 pin** +defined in your CC1101 configuration. + +```yaml +# Example: Receiving raw data via GDO0 +remote_receiver: + pin: GPIOXX # Must match the 'gdo0_pin' in cc1101 config or GDO2 pin if connected + dump: all + +# Example: Transmitting raw data via GDO0 +remote_transmitter: + pin: GPIOXX # Must match the 'gdo0_pin' in cc1101 config or GDO2 pin if connected + carrier_duty_percent: 100% +``` + +## Troubleshooting + +### "FF0F was found" Error + +If you see a log entry stating `FF0F was found` or similar invalid versions (e.g., `0000`, `FFFF`) during +setup, this indicates an SPI communication failure. + + * Check your wiring, especially the **MISO** and **CSN** lines. + * Ensure the module is powered with a stable 3.3V source. + * This component implements a "burst read" fix specifically to address this issue on some CC1101 silicon revisions, + so persistent errors are likely physical connection issues. + +### Reset Issues + +This component uses a robust, non-blocking state machine that polls the `CHIP_RDYn` signal on the MISO line during +startup. This prevents race conditions where the ESP32 might attempt to configure the chip before the crystal has +stabilized. If you experience timeouts during the `RES` command, check your power supply stability. + +## See Also + + - [I²C Bus](/components/i2c) + - [Remote Receiver](/components/remote_receiver) + - [Remote Transmitter](/components/remote_transmitter) + - [SPI Component](/components/spi) + - [CC1101 Datasheet](https://www.ti.com/lit/ds/symlink/cc1101.pdf) \ No newline at end of file diff --git a/content/components/images/cc1101.webp b/content/components/images/cc1101.webp new file mode 100644 index 0000000000000000000000000000000000000000..602fce4c5d62a017fb72c3c965f854d499114245 GIT binary patch literal 22576 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 Date: Thu, 13 Nov 2025 11:53:37 -0600 Subject: [PATCH 02/22] lint fixes --- content/components/cc1101.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index 9b4e056142..7795ed2db7 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -5,7 +5,6 @@ image: cc1101.webp keywords: [cc1101] --- - The **CC1101** component provides a driver for the **Texas Instruments CC1101** Sub-1 GHz RF Transceiver. It allows you to transmit and receive raw RF signals (ASK/OOK, FSK, etc.) using the standard [Remote Transmitter](remote_transmitter.md) and [Remote Receiver](remote_receiver.md) components. @@ -21,6 +20,7 @@ This component requires the [SPI Component](spi.md) to be enabled. cc1101: cs_pin: GPIOXX gdo0_pin: GPIOXX + ```` ## Configuration Variables @@ -28,10 +28,12 @@ cc1101: - **cs\_pin** (**Required**, [Pin](pin.md)): The SPI Chip Select (CSN) pin connected to the module. - **gdo0\_pin** (**Required**, [Pin](pin.md)): The GDO0 pin on the CC1101. This pin is used for sending and receiving interrupt signals and raw data. + - **id** (*Optional*, [ID](id.md)): Manually specify the ID used for code generation. - **output\_power** (*Optional*, float): The transmission power in dBm. Range: `-70` to `11`. Default: `11`. - **rx\_attenuation** (*Optional*, enum): Internal RX attenuation. Options: `0dB`, `6dB`, `12dB`, `18dB`. Default: `0dB`. + - **dc\_blocking\_filter** (*Optional*, boolean): Enable the digital DC blocking filter. Default: `True`. - **tuner** (*Optional*): Fine-tuning for the radio frequency settings. See [Tuner Configuration](https://www.google.com/search?q=%23tuner-configuration). - **agc** (*Optional*): Advanced Automatic Gain Control settings. See [AGC Configuration](https://www.google.com/search?q=%23agc-configuration). @@ -52,17 +54,21 @@ cc1101: - **frequency** (*Optional*, frequency): The operating frequency (e.g., `433.92MHz`). Range: `300MHz` to `928MHz`. Default: `433.92MHz`. + - **bandwidth** (*Optional*, frequency): The receive filter bandwidth. Range: `58kHz` to `812kHz`. Default: `203kHz`. + - **symbol\_rate** (*Optional*, int): The symbol rate in Baud. Range: `600` to `500000`. Default: `5000`. - **modulation** (*Optional*, enum): The modulation format. Options: `ASK/OOK` (default), `2-FSK`, `4-FSK`, `GFSK`, `MSK`. + - **deviation** (*Optional*, frequency): Frequency deviation for FSK/GFSK modulation. - **channel** (*Optional*, int): Channel number (added to base frequency). - **channel\_spacing** (*Optional*, frequency): Spacing between channels. - **if\_frequency** (*Optional*, frequency): Intermediate Frequency. Default is optimized for 433MHz usage. ## AGC Configuration + ```yaml # Example AGC Configuration cc1101: @@ -127,4 +133,4 @@ stabilized. If you experience timeouts during the `RES` command, check your powe - [Remote Receiver](/components/remote_receiver) - [Remote Transmitter](/components/remote_transmitter) - [SPI Component](/components/spi) - - [CC1101 Datasheet](https://www.ti.com/lit/ds/symlink/cc1101.pdf) \ No newline at end of file + - [CC1101 Datasheet](https://www.ti.com/lit/ds/symlink/cc1101.pdf) From 193427e96726e72e8d94ac37a23bc26e266bce3f Mon Sep 17 00:00:00 2001 From: lygris Date: Thu, 13 Nov 2025 12:05:45 -0600 Subject: [PATCH 03/22] More lint fixes --- content/components/cc1101.md | 52 ++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index 7795ed2db7..4be55b8fed 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -25,18 +25,18 @@ cc1101: ## Configuration Variables - - **cs\_pin** (**Required**, [Pin](pin.md)): The SPI Chip Select (CSN) pin connected to the module. - - **gdo0\_pin** (**Required**, [Pin](pin.md)): The GDO0 pin on the CC1101. This pin is used for sending and - receiving interrupt signals and raw data. +- **cs\_pin** (**Required**, [Pin](pin.md)): The SPI Chip Select (CSN) pin connected to the module. +- **gdo0\_pin** (**Required**, [Pin](pin.md)): The GDO0 pin on the CC1101. This pin is used for sending and + receiving interrupt signals and raw data. - - **id** (*Optional*, [ID](id.md)): Manually specify the ID used for code generation. - - **output\_power** (*Optional*, float): The transmission power in dBm. Range: `-70` to `11`. Default: `11`. - - **rx\_attenuation** (*Optional*, enum): Internal RX attenuation. Options: `0dB`, `6dB`, `12dB`, `18dB`. - Default: `0dB`. +- **id** (*Optional*, [ID](id.md)): Manually specify the ID used for code generation. +- **output\_power** (*Optional*, float): The transmission power in dBm. Range: `-70` to `11`. Default: `11`. +- **rx\_attenuation** (*Optional*, enum): Internal RX attenuation. Options: `0dB`, `6dB`, `12dB`, `18dB`. + Default: `0dB`. - - **dc\_blocking\_filter** (*Optional*, boolean): Enable the digital DC blocking filter. Default: `True`. - - **tuner** (*Optional*): Fine-tuning for the radio frequency settings. See [Tuner Configuration](https://www.google.com/search?q=%23tuner-configuration). - - **agc** (*Optional*): Advanced Automatic Gain Control settings. See [AGC Configuration](https://www.google.com/search?q=%23agc-configuration). +- **dc\_blocking\_filter** (*Optional*, boolean): Enable the digital DC blocking filter. Default: `True`. +- **tuner** (*Optional*): Fine-tuning for the radio frequency settings. See [Tuner Configuration](https://www.google.com/search?q=%23tuner-configuration). +- **agc** (*Optional*): Advanced Automatic Gain Control settings. See [AGC Configuration](https://www.google.com/search?q=%23agc-configuration). ## Tuner Configuration @@ -52,20 +52,20 @@ cc1101: symbol_rate: 5000 ``` - - **frequency** (*Optional*, frequency): The operating frequency (e.g., `433.92MHz`). Range: `300MHz` to +- **frequency** (*Optional*, frequency): The operating frequency (e.g., `433.92MHz`). Range: `300MHz` to `928MHz`. Default: `433.92MHz`. - - **bandwidth** (*Optional*, frequency): The receive filter bandwidth. Range: `58kHz` to `812kHz`. Default: +- **bandwidth** (*Optional*, frequency): The receive filter bandwidth. Range: `58kHz` to `812kHz`. Default: `203kHz`. - - **symbol\_rate** (*Optional*, int): The symbol rate in Baud. Range: `600` to `500000`. Default: `5000`. - - **modulation** (*Optional*, enum): The modulation format. Options: `ASK/OOK` (default), `2-FSK`, `4-FSK`, +- **symbol\_rate** (*Optional*, int): The symbol rate in Baud. Range: `600` to `500000`. Default: `5000`. +- **modulation** (*Optional*, enum): The modulation format. Options: `ASK/OOK` (default), `2-FSK`, `4-FSK`, `GFSK`, `MSK`. - - **deviation** (*Optional*, frequency): Frequency deviation for FSK/GFSK modulation. - - **channel** (*Optional*, int): Channel number (added to base frequency). - - **channel\_spacing** (*Optional*, frequency): Spacing between channels. - - **if\_frequency** (*Optional*, frequency): Intermediate Frequency. Default is optimized for 433MHz usage. +- **deviation** (*Optional*, frequency): Frequency deviation for FSK/GFSK modulation. +- **channel** (*Optional*, int): Channel number (added to base frequency). +- **channel\_spacing** (*Optional*, frequency): Spacing between channels. +- **if\_frequency** (*Optional*, frequency): Intermediate Frequency. Default is optimized for 433MHz usage. ## AGC Configuration @@ -87,9 +87,9 @@ cc1101: Advanced users can fine-tune the Automatic Gain Control (AGC) settings. - - **magn\_target** (*Optional*, dB): Target signal amplitude. Range: `24dB` to `42dB` in increments of 3(eg. `33dB`). - - **max\_lna\_gain** (*Optional*, dB): Maximum LNA gain reduction. Options: `Default`, `2.6dB`, `6.1dB`, `7.4dB`, `9.2dB`, `11.5dB`, `14.6dB`, `17.1dB`. - - **max\_dvga\_gain** (*Optional*, enum): Maximum Digital Variable Gain reduction. Options: `Default`, `-1`, `-2`, `-3`. +- **magn\_target** (*Optional*, dB): Target signal amplitude. Range: `24dB` to `42dB` in increments of 3(eg. `33dB`). +- **max\_lna\_gain** (*Optional*, dB): Maximum LNA gain reduction. Options: `Default`, `2.6dB`, `6.1dB`, `7.4dB`, `9.2dB`, `11.5dB`, `14.6dB`, `17.1dB`. +- **max\_dvga\_gain** (*Optional*, enum): Maximum Digital Variable Gain reduction. Options: `Default`, `-1`, `-2`, `-3`. ## Integration with Remote Receiver/Transmitter @@ -129,8 +129,8 @@ stabilized. If you experience timeouts during the `RES` command, check your powe ## See Also - - [I²C Bus](/components/i2c) - - [Remote Receiver](/components/remote_receiver) - - [Remote Transmitter](/components/remote_transmitter) - - [SPI Component](/components/spi) - - [CC1101 Datasheet](https://www.ti.com/lit/ds/symlink/cc1101.pdf) +- [I²C Bus](/components/i2c) +- [Remote Receiver](/components/remote_receiver) +- [Remote Transmitter](/components/remote_transmitter) +- [SPI Component](/components/spi) +- [CC1101 Datasheet](https://www.ti.com/lit/ds/symlink/cc1101.pdf) From db07657502df02a5c6e56d7e33d5740697163892 Mon Sep 17 00:00:00 2001 From: lygris Date: Thu, 13 Nov 2025 12:08:32 -0600 Subject: [PATCH 04/22] final lint fixes --- content/components/cc1101.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index 4be55b8fed..c37e0e7b10 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -116,9 +116,9 @@ remote_transmitter: If you see a log entry stating `FF0F was found` or similar invalid versions (e.g., `0000`, `FFFF`) during setup, this indicates an SPI communication failure. - * Check your wiring, especially the **MISO** and **CSN** lines. - * Ensure the module is powered with a stable 3.3V source. - * This component implements a "burst read" fix specifically to address this issue on some CC1101 silicon revisions, +- Check your wiring, especially the **MISO** and **CSN** lines. +- Ensure the module is powered with a stable 3.3V source. +- This component implements a "burst read" fix specifically to address this issue on some CC1101 silicon revisions, so persistent errors are likely physical connection issues. ### Reset Issues From ae1a4e5dff3e7b35d1a4f7d8594bd8cd3a83d19a Mon Sep 17 00:00:00 2001 From: lygris Date: Thu, 13 Nov 2025 12:17:50 -0600 Subject: [PATCH 05/22] fix img to be standard html --- content/components/cc1101.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index c37e0e7b10..32009a584c 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -11,7 +11,7 @@ It allows you to transmit and receive raw RF signals (ASK/OOK, FSK, etc.) using This component requires the [SPI Component](spi.md) to be enabled. -{{< img src="cc1101.webp" alt="Image" width="50.0%" class="align-center" >}} +Image ## Component Configuration From 88c38719b46f54cac64450e956d05d014b477e3c Mon Sep 17 00:00:00 2001 From: lygris Date: Sat, 15 Nov 2025 10:29:35 -0600 Subject: [PATCH 06/22] update with settings name changes --- content/components/cc1101.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index 32009a584c..bcb6088164 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -47,19 +47,19 @@ cc1101: gdo0_pin: GPIOXX tuner: frequency: 433.92MHz - modulation: ASK/OOK - bandwidth: 203kHz + modulation_type: ASK/OOK + filter_bandwidth: 203kHz symbol_rate: 5000 ``` - **frequency** (*Optional*, frequency): The operating frequency (e.g., `433.92MHz`). Range: `300MHz` to `928MHz`. Default: `433.92MHz`. -- **bandwidth** (*Optional*, frequency): The receive filter bandwidth. Range: `58kHz` to `812kHz`. Default: +- **filter_bandwidth** (*Optional*, frequency): The receive filter bandwidth. Range: `58kHz` to `812kHz`. Default: `203kHz`. - **symbol\_rate** (*Optional*, int): The symbol rate in Baud. Range: `600` to `500000`. Default: `5000`. -- **modulation** (*Optional*, enum): The modulation format. Options: `ASK/OOK` (default), `2-FSK`, `4-FSK`, +- **modulation_type** (*Optional*, enum): The modulation format. Options: `ASK/OOK` (default), `2-FSK`, `4-FSK`, `GFSK`, `MSK`. - **deviation** (*Optional*, frequency): Frequency deviation for FSK/GFSK modulation. @@ -76,8 +76,8 @@ cc1101: gdo0_pin: GPIOXX tuner: frequency: 433.92MHz - modulation: ASK/OOK - bandwidth: 203kHz + modulation_type: ASK/OOK + filter_bandwidth: 203kHz symbol_rate: 5000 agc: magn_target: 24dB From bcdd7d6748abf49d31ada9a0955959bb4ea56087 Mon Sep 17 00:00:00 2001 From: lygris Date: Sat, 15 Nov 2025 16:03:10 -0600 Subject: [PATCH 07/22] Update Docs to match latest commit. --- content/components/cc1101.md | 157 ++++++++++++++++++----------------- 1 file changed, 82 insertions(+), 75 deletions(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index bcb6088164..9876798d7a 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -20,112 +20,119 @@ This component requires the [SPI Component](spi.md) to be enabled. cc1101: cs_pin: GPIOXX gdo0_pin: GPIOXX - -```` + frequency: 433.92MHz +``` ## Configuration Variables -- **cs\_pin** (**Required**, [Pin](pin.md)): The SPI Chip Select (CSN) pin connected to the module. -- **gdo0\_pin** (**Required**, [Pin](pin.md)): The GDO0 pin on the CC1101. This pin is used for sending and - receiving interrupt signals and raw data. +### Hardware Settings -- **id** (*Optional*, [ID](id.md)): Manually specify the ID used for code generation. -- **output\_power** (*Optional*, float): The transmission power in dBm. Range: `-70` to `11`. Default: `11`. -- **rx\_attenuation** (*Optional*, enum): Internal RX attenuation. Options: `0dB`, `6dB`, `12dB`, `18dB`. - Default: `0dB`. + - **cs\_pin** (**Required**, [Pin](pin.md)): The SPI Chip Select (CSN) pin connected to the module. + - **gdo0\_pin** (**Required**, [Pin](pin.md)): The pin connected to **GDO0** on the CC1101. + - **Note:** On ESP32, `remote_transmitter` **must** use the pin connected to **GDO0** to transmit successfully. -- **dc\_blocking\_filter** (*Optional*, boolean): Enable the digital DC blocking filter. Default: `True`. -- **tuner** (*Optional*): Fine-tuning for the radio frequency settings. See [Tuner Configuration](https://www.google.com/search?q=%23tuner-configuration). -- **agc** (*Optional*): Advanced Automatic Gain Control settings. See [AGC Configuration](https://www.google.com/search?q=%23agc-configuration). +### General Settings -## Tuner Configuration + - **frequency** (*Optional*, frequency): The operating frequency. Range: `300MHz` to `928MHz`. Default: `433.92MHz`. + - **output\_power** (*Optional*, float): The transmission power in dBm. Range: `-30` to `11`. Default: `10`. + - **modulation\_type** (*Optional*, enum): The modulation format. Options: `ASK/OOK` (default), `2-FSK`, `4-FSK`, `GFSK`, `MSK`. + - **symbol\_rate** (*Optional*, int): The symbol rate in Baud. Range: `600` to `500000`. Default: `5000`. + - **rx\_attenuation** (*Optional*, enum): Internal RX attenuation. Options: `0dB`, `6dB`, `12dB`, `18dB`. Default: `0dB`. + - **dc\_blocking\_filter** (*Optional*, boolean): Enable the digital DC blocking filter. Default: `True`. -```yaml -# Example Tuner Configuration -cc1101: - cs_pin: GPIOXX - gdo0_pin: GPIOXX - tuner: - frequency: 433.92MHz - modulation_type: ASK/OOK - filter_bandwidth: 203kHz - symbol_rate: 5000 -``` +### Tuner Settings + + - **filter\_bandwidth** (*Optional*, frequency): The receive filter bandwidth. Range: `58kHz` to `812kHz`. Default: `203kHz`. + - **fsk\_deviation** (*Optional*, frequency): Frequency deviation for FSK/GFSK modulation. + + - **channel** (*Optional*, int): Channel number (added to base frequency). + - **channel\_spacing** (*Optional*, frequency): Spacing between channels. + - **if\_frequency** (*Optional*, frequency): Intermediate Frequency. Default is optimized for 433MHz usage. + + + + + + +### AGC (Automatic Gain Control) Settings -- **frequency** (*Optional*, frequency): The operating frequency (e.g., `433.92MHz`). Range: `300MHz` to - `928MHz`. Default: `433.92MHz`. +Advanced users can fine-tune the AGC dynamics. -- **filter_bandwidth** (*Optional*, frequency): The receive filter bandwidth. Range: `58kHz` to `812kHz`. Default: - `203kHz`. + - **magn\_target** (*Optional*, dB): Target signal amplitude. Range: `24dB` to `42dB` in increments of 3(eg. `33dB`). + - **max\_lna\_gain** (*Optional*, dB): Maximum LNA gain reduction. Options: `Default`, `2.6dB`, `6.1dB`, `7.4dB`, `9.2dB`, `11.5dB`, `14.6dB`, `17.1dB`. + - **max\_dvga\_gain** (*Optional*, enum): Maximum Digital Variable Gain reduction. Options: `Default`, `-1`, `-2`, `-3`. + - **lna\_priority** (*Optional*, boolean): If true, decrease LNA gain before DVGA gain. + - **carrier\_sense\_abs\_thr** (*Optional*, int): Absolute RSSI threshold for Carrier Sense. + - **carrier\_sense\_rel\_thr** (*Optional*, enum): Relative RSSI threshold for Carrier Sense. + - **filter\_length\_fsk\_msk** (*Optional*, enum): Averaging length for FSK/MSK. + - **filter\_length\_ask\_ook** (*Optional*, enum): Averaging length for ASK/OOK. + - **freeze** (*Optional*, enum): AGC gain freeze behavior. + - **wait\_time** (*Optional*, enum): AGC wait time. + - **hyst\_level** (*Optional*, enum): AGC hysteresis level. -- **symbol\_rate** (*Optional*, int): The symbol rate in Baud. Range: `600` to `500000`. Default: `5000`. -- **modulation_type** (*Optional*, enum): The modulation format. Options: `ASK/OOK` (default), `2-FSK`, `4-FSK`, - `GFSK`, `MSK`. +## Actions -- **deviation** (*Optional*, frequency): Frequency deviation for FSK/GFSK modulation. -- **channel** (*Optional*, int): Channel number (added to base frequency). -- **channel\_spacing** (*Optional*, frequency): Spacing between channels. -- **if\_frequency** (*Optional*, frequency): Intermediate Frequency. Default is optimized for 433MHz usage. +This component provides actions to control the radio state, primarily used for coordinating transmission. -## AGC Configuration + - **cc1101.begin\_tx**: Wakes the radio and forces it into TX mode. This **must** be called before `remote_transmitter` starts sending data. + - **cc1101.end\_tx**: Puts the radio back into RX mode and resets the pin configuration to safe defaults. + - **cc1101.reset**: Resets the CC1101 chip and re-applies configuration. + +### Example Transmit Button ```yaml -# Example AGC Configuration -cc1101: - cs_pin: GPIOXX - gdo0_pin: GPIOXX - tuner: - frequency: 433.92MHz - modulation_type: ASK/OOK - filter_bandwidth: 203kHz - symbol_rate: 5000 - agc: - magn_target: 24dB - max_lna_gain: 2.6dB - max_dvga_gan: -3 +button: + - platform: template + name: "Send Signal" + on_press: + # 1. Wake up radio and enter TX mode (Blocking wait) + - cc1101.begin_tx: + + # 2. Send data using standard Remote Transmitter + - remote_transmitter.transmit_raw: + code: [1000, -1000, 1000, -1000] + repeat: 5 + + # 3. Return to RX mode + - cc1101.end_tx: ``` -Advanced users can fine-tune the Automatic Gain Control (AGC) settings. +## Integration with Remote Receiver/Transmitter -- **magn\_target** (*Optional*, dB): Target signal amplitude. Range: `24dB` to `42dB` in increments of 3(eg. `33dB`). -- **max\_lna\_gain** (*Optional*, dB): Maximum LNA gain reduction. Options: `Default`, `2.6dB`, `6.1dB`, `7.4dB`, `9.2dB`, `11.5dB`, `14.6dB`, `17.1dB`. -- **max\_dvga\_gain** (*Optional*, enum): Maximum Digital Variable Gain reduction. Options: `Default`, `-1`, `-2`, `-3`. +### Wiring for ESP32 (Split Pins) -## Integration with Remote Receiver/Transmitter +The ESP32 RMT peripheral requires exclusive access to the TX pin. You cannot share a single pin for both RX and TX easily. -To use the CC1101 for receiving or transmitting signals, you must configure the standard -[Remote Receiver](https://www.google.com/search?q=remote_receiver.md) or [Remote Transmitter](https://www.google.com/search?q=remote_transmitter.md) components to use the **GDO0 pin** -defined in your CC1101 configuration. + * **GDO0 (Pin 3)**: Connect to the pin used by `remote_transmitter`. + * **GDO2 (Pin 8)**: Connect to the pin used by `remote_receiver`. ```yaml -# Example: Receiving raw data via GDO0 -remote_receiver: - pin: GPIOXX # Must match the 'gdo0_pin' in cc1101 config or GDO2 pin if connected - dump: all +cc1101: + gdo0_pin: GPIOXX # CC1101 GDO0 -# Example: Transmitting raw data via GDO0 remote_transmitter: - pin: GPIOXX # Must match the 'gdo0_pin' in cc1101 config or GDO2 pin if connected + pin: GPIOXX # Must match GDO0 carrier_duty_percent: 100% + +remote_receiver: + pin: GPIOXX2 # CC1101 GDO2 + dump: all ``` +### Wiring for ESP8266 (Single Pin) + +On ESP8266, you can wire **GDO0** to a single GPIO and use it for both TX and RX. + ## Troubleshooting ### "FF0F was found" Error -If you see a log entry stating `FF0F was found` or similar invalid versions (e.g., `0000`, `FFFF`) during -setup, this indicates an SPI communication failure. - -- Check your wiring, especially the **MISO** and **CSN** lines. -- Ensure the module is powered with a stable 3.3V source. -- This component implements a "burst read" fix specifically to address this issue on some CC1101 silicon revisions, - so persistent errors are likely physical connection issues. +If you see a log entry stating `FF0F`, `0000`, or `FFFF` during setup, this indicates an SPI communication failure. Check your wiring (MISO/MOSI/CS). -### Reset Issues +### No Signal during Transmit -This component uses a robust, non-blocking state machine that polls the `CHIP_RDYn` signal on the MISO line during -startup. This prevents race conditions where the ESP32 might attempt to configure the chip before the crystal has -stabilized. If you experience timeouts during the `RES` command, check your power supply stability. +1. **Check Pinout:** Ensure `remote_transmitter` is assigned to the pin physically connected to **GDO0**. The CC1101 **only** supports transmission via GDO0. ## See Also @@ -133,4 +140,4 @@ stabilized. If you experience timeouts during the `RES` command, check your powe - [Remote Receiver](/components/remote_receiver) - [Remote Transmitter](/components/remote_transmitter) - [SPI Component](/components/spi) -- [CC1101 Datasheet](https://www.ti.com/lit/ds/symlink/cc1101.pdf) +- [CC1101 Datasheet](https://www.ti.com/lit/ds/symlink/cc1101.pdf) \ No newline at end of file From 623264ff5213c45e51fa3b32c1ab68e4d73fe8a8 Mon Sep 17 00:00:00 2001 From: lygris Date: Tue, 18 Nov 2025 21:32:55 -0600 Subject: [PATCH 08/22] Requested Fixes --- content/components/cc1101.md | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index 9876798d7a..aa3c92f493 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -100,9 +100,23 @@ button: ## Integration with Remote Receiver/Transmitter -### Wiring for ESP32 (Split Pins) +### Wiring for Single Pin Usage -The ESP32 RMT peripheral requires exclusive access to the TX pin. You cannot share a single pin for both RX and TX easily. +Wire **GDO0** to a single GPIO and use it for both TX and RX. +```yaml +cc1101: + gdo0_pin: GPIOXX # CC1101 GDO0 + +remote_transmitter: + pin: GPIOXX # Must match GDO0 + carrier_duty_percent: 100% + +remote_receiver: + pin: GPIOXX # CC1101 GDO0 + dump: all +``` + +### Wiring for Split Pin Usage * **GDO0 (Pin 3)**: Connect to the pin used by `remote_transmitter`. * **GDO2 (Pin 8)**: Connect to the pin used by `remote_receiver`. @@ -116,14 +130,10 @@ remote_transmitter: carrier_duty_percent: 100% remote_receiver: - pin: GPIOXX2 # CC1101 GDO2 + pin: GPIOXX # CC1101 GDO2 dump: all ``` -### Wiring for ESP8266 (Single Pin) - -On ESP8266, you can wire **GDO0** to a single GPIO and use it for both TX and RX. - ## Troubleshooting ### "FF0F was found" Error From 39f3e19c42d4100a031fa98db9520c038eae414b Mon Sep 17 00:00:00 2001 From: lygris Date: Tue, 18 Nov 2025 21:44:37 -0600 Subject: [PATCH 09/22] missed these ones --- content/components/cc1101.md | 47 ++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index aa3c92f493..df6e766c98 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -105,14 +105,36 @@ button: Wire **GDO0** to a single GPIO and use it for both TX and RX. ```yaml cc1101: - gdo0_pin: GPIOXX # CC1101 GDO0 + gdo0_pin: + pin: + number: GPIOXX # CC1101 GDO0 + mode: + input: true + output: true + pullup: true + open_drain: true + allow_other_uses: true remote_transmitter: - pin: GPIOXX # Must match GDO0 + pin: + number: GPIOXX # Must match GDO0 + mode: + input: true + output: true + pullup: true + open_drain: true + allow_other_uses: true carrier_duty_percent: 100% remote_receiver: - pin: GPIOXX # CC1101 GDO0 + pin: + number: GPIOXX # Must match GDO0 + mode: + input: true + output: true + pullup: true + open_drain: true + allow_other_uses: true dump: all ``` @@ -123,10 +145,25 @@ remote_receiver: ```yaml cc1101: - gdo0_pin: GPIOXX # CC1101 GDO0 + gdo0_pin: + pin: + number: GPIOXX # Must match GDO0 + mode: + input: true + output: true + pullup: true + open_drain: true + allow_other_uses: true remote_transmitter: - pin: GPIOXX # Must match GDO0 + pin: + number: GPIOXX # Must match GDO0 + mode: + input: true + output: true + pullup: true + open_drain: true + allow_other_uses: true carrier_duty_percent: 100% remote_receiver: From 8d076327fe9d312ff788f574587cce0ef94ad59b Mon Sep 17 00:00:00 2001 From: lygris Date: Tue, 18 Nov 2025 21:49:33 -0600 Subject: [PATCH 10/22] lint fixes --- content/components/cc1101.md | 73 ++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 36 deletions(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index df6e766c98..e09ed1226b 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -27,75 +27,75 @@ cc1101: ### Hardware Settings - - **cs\_pin** (**Required**, [Pin](pin.md)): The SPI Chip Select (CSN) pin connected to the module. - - **gdo0\_pin** (**Required**, [Pin](pin.md)): The pin connected to **GDO0** on the CC1101. - - **Note:** On ESP32, `remote_transmitter` **must** use the pin connected to **GDO0** to transmit successfully. +- **cs\_pin** (**Required**, [Pin](pin.md)): The SPI Chip Select (CSN) pin connected to the module. +- **gdo0\_pin** (**Required**, [Pin](pin.md)): The pin connected to **GDO0** on the CC1101. +- **Note:** `remote_transmitter` **must** use the pin connected to **GDO0** to transmit successfully. ### General Settings - - **frequency** (*Optional*, frequency): The operating frequency. Range: `300MHz` to `928MHz`. Default: `433.92MHz`. - - **output\_power** (*Optional*, float): The transmission power in dBm. Range: `-30` to `11`. Default: `10`. - - **modulation\_type** (*Optional*, enum): The modulation format. Options: `ASK/OOK` (default), `2-FSK`, `4-FSK`, `GFSK`, `MSK`. - - **symbol\_rate** (*Optional*, int): The symbol rate in Baud. Range: `600` to `500000`. Default: `5000`. - - **rx\_attenuation** (*Optional*, enum): Internal RX attenuation. Options: `0dB`, `6dB`, `12dB`, `18dB`. Default: `0dB`. - - **dc\_blocking\_filter** (*Optional*, boolean): Enable the digital DC blocking filter. Default: `True`. +- **frequency** (*Optional*, frequency): The operating frequency. Range: `300MHz` to `928MHz`. Default: `433.92MHz`. +- **output\_power** (*Optional*, float): The transmission power in dBm. Range: `-30` to `11`. Default: `10`. +- **modulation\_type** (*Optional*, enum): The modulation format. Options: `ASK/OOK` (default), `2-FSK`, `4-FSK`, `GFSK`, `MSK`. +- **symbol\_rate** (*Optional*, int): The symbol rate in Baud. Range: `600` to `500000`. Default: `5000`. +- **rx\_attenuation** (*Optional*, enum): Internal RX attenuation. Options: `0dB`, `6dB`, `12dB`, `18dB`. Default: `0dB`. +- **dc\_blocking\_filter** (*Optional*, boolean): Enable the digital DC blocking filter. Default: `True`. ### Tuner Settings - - **filter\_bandwidth** (*Optional*, frequency): The receive filter bandwidth. Range: `58kHz` to `812kHz`. Default: `203kHz`. - - **fsk\_deviation** (*Optional*, frequency): Frequency deviation for FSK/GFSK modulation. +- **filter\_bandwidth** (*Optional*, frequency): The receive filter bandwidth. Range: `58kHz` to `812kHz`. Default: `203kHz`. +- **fsk\_deviation** (*Optional*, frequency): Frequency deviation for FSK/GFSK modulation. - - **channel** (*Optional*, int): Channel number (added to base frequency). - - **channel\_spacing** (*Optional*, frequency): Spacing between channels. - - **if\_frequency** (*Optional*, frequency): Intermediate Frequency. Default is optimized for 433MHz usage. +- **channel** (*Optional*, int): Channel number (added to base frequency). +- **channel\_spacing** (*Optional*, frequency): Spacing between channels. +- **if\_frequency** (*Optional*, frequency): Intermediate Frequency. Default is optimized for 433MHz usage. +- **pktlen** (*Optional*, int): Packet length config. --> ### AGC (Automatic Gain Control) Settings Advanced users can fine-tune the AGC dynamics. - - **magn\_target** (*Optional*, dB): Target signal amplitude. Range: `24dB` to `42dB` in increments of 3(eg. `33dB`). - - **max\_lna\_gain** (*Optional*, dB): Maximum LNA gain reduction. Options: `Default`, `2.6dB`, `6.1dB`, `7.4dB`, `9.2dB`, `11.5dB`, `14.6dB`, `17.1dB`. - - **max\_dvga\_gain** (*Optional*, enum): Maximum Digital Variable Gain reduction. Options: `Default`, `-1`, `-2`, `-3`. - - **lna\_priority** (*Optional*, boolean): If true, decrease LNA gain before DVGA gain. - - **carrier\_sense\_abs\_thr** (*Optional*, int): Absolute RSSI threshold for Carrier Sense. - - **carrier\_sense\_rel\_thr** (*Optional*, enum): Relative RSSI threshold for Carrier Sense. - - **filter\_length\_fsk\_msk** (*Optional*, enum): Averaging length for FSK/MSK. - - **filter\_length\_ask\_ook** (*Optional*, enum): Averaging length for ASK/OOK. - - **freeze** (*Optional*, enum): AGC gain freeze behavior. - - **wait\_time** (*Optional*, enum): AGC wait time. - - **hyst\_level** (*Optional*, enum): AGC hysteresis level. +- **magn\_target** (*Optional*, dB): Target signal amplitude. Range: `24dB` to `42dB` in increments of 3(eg. `33dB`). +- **max\_lna\_gain** (*Optional*, dB): Maximum LNA gain reduction. Options: `Default`, `2.6dB`, `6.1dB`, `7.4dB`, `9.2dB`, `11.5dB`, `14.6dB`, `17.1dB`. +- **max\_dvga\_gain** (*Optional*, enum): Maximum Digital Variable Gain reduction. Options: `Default`, `-1`, `-2`, `-3`. +- **lna\_priority** (*Optional*, boolean): If true, decrease LNA gain before DVGA gain. +- **carrier\_sense\_abs\_thr** (*Optional*, int): Absolute RSSI threshold for Carrier Sense. +- **carrier\_sense\_rel\_thr** (*Optional*, enum): Relative RSSI threshold for Carrier Sense. +- **filter\_length\_fsk\_msk** (*Optional*, enum): Averaging length for FSK/MSK. +- **filter\_length\_ask\_ook** (*Optional*, enum): Averaging length for ASK/OOK. +- **freeze** (*Optional*, enum): AGC gain freeze behavior. +- **wait\_time** (*Optional*, enum): AGC wait time. +- **hyst\_level** (*Optional*, enum): AGC hysteresis level. ## Actions This component provides actions to control the radio state, primarily used for coordinating transmission. - - **cc1101.begin\_tx**: Wakes the radio and forces it into TX mode. This **must** be called before `remote_transmitter` starts sending data. - - **cc1101.end\_tx**: Puts the radio back into RX mode and resets the pin configuration to safe defaults. - - **cc1101.reset**: Resets the CC1101 chip and re-applies configuration. +- **cc1101.begin\_tx**: Wakes the radio and forces it into TX mode. This **must** be called before `remote_transmitter` starts sending data. +- **cc1101.end\_tx**: Puts the radio back into RX mode and resets the pin configuration to safe defaults. +- **cc1101.reset**: Resets the CC1101 chip and re-applies configuration. ### Example Transmit Button ```yaml button: - - platform: template +- platform: template name: "Send Signal" on_press: # 1. Wake up radio and enter TX mode (Blocking wait) - - cc1101.begin_tx: + - cc1101.begin_tx: # 2. Send data using standard Remote Transmitter - - remote_transmitter.transmit_raw: + - remote_transmitter.transmit_raw: code: [1000, -1000, 1000, -1000] repeat: 5 # 3. Return to RX mode - - cc1101.end_tx: + - cc1101.end_tx: ``` ## Integration with Remote Receiver/Transmitter @@ -103,6 +103,7 @@ button: ### Wiring for Single Pin Usage Wire **GDO0** to a single GPIO and use it for both TX and RX. + ```yaml cc1101: gdo0_pin: @@ -140,8 +141,8 @@ remote_receiver: ### Wiring for Split Pin Usage - * **GDO0 (Pin 3)**: Connect to the pin used by `remote_transmitter`. - * **GDO2 (Pin 8)**: Connect to the pin used by `remote_receiver`. +- **GDO0 (Pin 3)**: Connect to the pin used by `remote_transmitter`. +- **GDO2 (Pin 8)**: Connect to the pin used by `remote_receiver`. ```yaml cc1101: @@ -187,4 +188,4 @@ If you see a log entry stating `FF0F`, `0000`, or `FFFF` during setup, this indi - [Remote Receiver](/components/remote_receiver) - [Remote Transmitter](/components/remote_transmitter) - [SPI Component](/components/spi) -- [CC1101 Datasheet](https://www.ti.com/lit/ds/symlink/cc1101.pdf) \ No newline at end of file +- [CC1101 Datasheet](https://www.ti.com/lit/ds/symlink/cc1101.pdf) From 8059126a62d8ca42adb792c93623b2fc8fc630d5 Mon Sep 17 00:00:00 2001 From: lygris Date: Tue, 18 Nov 2025 21:51:49 -0600 Subject: [PATCH 11/22] moar lint fixes --- content/components/cc1101.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index e09ed1226b..fdfa973d59 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -180,7 +180,7 @@ If you see a log entry stating `FF0F`, `0000`, or `FFFF` during setup, this indi ### No Signal during Transmit -1. **Check Pinout:** Ensure `remote_transmitter` is assigned to the pin physically connected to **GDO0**. The CC1101 **only** supports transmission via GDO0. +1. **Check Pinout:** Ensure `remote_transmitter` is assigned to the pin physically connected to **GDO0**. The CC1101 **only** supports transmission via GDO0. ## See Also From f6a156c8730d0be3c73ff6f8b141de3ca812140c Mon Sep 17 00:00:00 2001 From: lygris Date: Tue, 18 Nov 2025 21:56:34 -0600 Subject: [PATCH 12/22] add begin/end tx actions to examples --- content/components/cc1101.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index fdfa973d59..fa42bb6589 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -126,6 +126,12 @@ remote_transmitter: open_drain: true allow_other_uses: true carrier_duty_percent: 100% + on_transmit: + then: + - cc1101.begin_tx: + on_complete: + then: + - cc1101.end_tx: remote_receiver: pin: @@ -166,6 +172,12 @@ remote_transmitter: open_drain: true allow_other_uses: true carrier_duty_percent: 100% + on_transmit: + then: + - cc1101.begin_tx: + on_complete: + then: + - cc1101.end_tx: remote_receiver: pin: GPIOXX # CC1101 GDO2 From 9488c628af06c70430ab80efd8f1f5797548b6c3 Mon Sep 17 00:00:00 2001 From: lygris Date: Tue, 18 Nov 2025 22:01:25 -0600 Subject: [PATCH 13/22] Remove some commented lines and fix lint error --- content/components/cc1101.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index fa42bb6589..494db25924 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -44,15 +44,9 @@ cc1101: - **filter\_bandwidth** (*Optional*, frequency): The receive filter bandwidth. Range: `58kHz` to `812kHz`. Default: `203kHz`. - **fsk\_deviation** (*Optional*, frequency): Frequency deviation for FSK/GFSK modulation. - - **channel** (*Optional*, int): Channel number (added to base frequency). - **channel\_spacing** (*Optional*, frequency): Spacing between channels. - **if\_frequency** (*Optional*, frequency): Intermediate Frequency. Default is optimized for 433MHz usage. - - - - - ### AGC (Automatic Gain Control) Settings @@ -192,7 +186,7 @@ If you see a log entry stating `FF0F`, `0000`, or `FFFF` during setup, this indi ### No Signal during Transmit -1. **Check Pinout:** Ensure `remote_transmitter` is assigned to the pin physically connected to **GDO0**. The CC1101 **only** supports transmission via GDO0. +- **Check Pinout:** Ensure `remote_transmitter` is assigned to the pin physically connected to **GDO0**. The CC1101 **only** supports transmission via GDO0. ## See Also From b9d07e60db8c8a83b807a2bb8caedfad052ca3a1 Mon Sep 17 00:00:00 2001 From: lygris Date: Wed, 19 Nov 2025 08:24:17 -0600 Subject: [PATCH 14/22] Fix transmitter config example --- content/components/cc1101.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index 494db25924..7ea6f4c1be 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -80,16 +80,9 @@ button: - platform: template name: "Send Signal" on_press: - # 1. Wake up radio and enter TX mode (Blocking wait) - - cc1101.begin_tx: - - # 2. Send data using standard Remote Transmitter - remote_transmitter.transmit_raw: code: [1000, -1000, 1000, -1000] repeat: 5 - - # 3. Return to RX mode - - cc1101.end_tx: ``` ## Integration with Remote Receiver/Transmitter @@ -122,9 +115,13 @@ remote_transmitter: carrier_duty_percent: 100% on_transmit: then: + - cc1101.set_idle: + - remote_transmitter.digital_write: false - cc1101.begin_tx: on_complete: then: + - cc1101.set_idle: + - remote_transmitter.digital_write: true - cc1101.end_tx: remote_receiver: @@ -147,7 +144,6 @@ remote_receiver: ```yaml cc1101: gdo0_pin: - pin: number: GPIOXX # Must match GDO0 mode: input: true @@ -168,9 +164,13 @@ remote_transmitter: carrier_duty_percent: 100% on_transmit: then: + - cc1101.set_idle: + - remote_transmitter.digital_write: false - cc1101.begin_tx: on_complete: then: + - cc1101.set_idle: + - remote_transmitter.digital_write: true - cc1101.end_tx: remote_receiver: From 7d0f999a2d0b78969b79906562375695d3661a02 Mon Sep 17 00:00:00 2001 From: lygris Date: Wed, 19 Nov 2025 08:30:27 -0600 Subject: [PATCH 15/22] Fix image link --- content/components/cc1101.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index 7ea6f4c1be..f354b2a653 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -1,7 +1,7 @@ --- title: CC1101 Low-Power Sub-1 GHz RF Transceiver description: Instructions for setting up CC1101 RF Transceiver in ESPHome. -image: cc1101.webp +image: images/cc1101.webp keywords: [cc1101] --- @@ -11,7 +11,7 @@ It allows you to transmit and receive raw RF signals (ASK/OOK, FSK, etc.) using This component requires the [SPI Component](spi.md) to be enabled. -Image +Image ## Component Configuration From 95de05ca76ee87eb0b41692ed3839064e5eb0972 Mon Sep 17 00:00:00 2001 From: lygris Date: Wed, 19 Nov 2025 08:34:37 -0600 Subject: [PATCH 16/22] actually fix image link --- content/components/cc1101.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index f354b2a653..ba945d5a93 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -1,7 +1,7 @@ --- title: CC1101 Low-Power Sub-1 GHz RF Transceiver description: Instructions for setting up CC1101 RF Transceiver in ESPHome. -image: images/cc1101.webp +image: /components/images/cc1101.webp keywords: [cc1101] --- @@ -11,7 +11,7 @@ It allows you to transmit and receive raw RF signals (ASK/OOK, FSK, etc.) using This component requires the [SPI Component](spi.md) to be enabled. -Image +Image ## Component Configuration From 2723afa3f4820b6e80434e788ef5f181e5a68cb2 Mon Sep 17 00:00:00 2001 From: lygris Date: Wed, 19 Nov 2025 08:45:17 -0600 Subject: [PATCH 17/22] Add missing Idle action description. --- content/components/cc1101.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index ba945d5a93..08448efa91 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -72,6 +72,7 @@ This component provides actions to control the radio state, primarily used for c - **cc1101.begin\_tx**: Wakes the radio and forces it into TX mode. This **must** be called before `remote_transmitter` starts sending data. - **cc1101.end\_tx**: Puts the radio back into RX mode and resets the pin configuration to safe defaults. - **cc1101.reset**: Resets the CC1101 chip and re-applies configuration. +- **cc1101.set_idle**: Puts the radio into idle state. ### Example Transmit Button From 5506883c8d114d0dede8a82fe2e31d00c5c5076f Mon Sep 17 00:00:00 2001 From: lygris Date: Wed, 19 Nov 2025 12:07:26 -0600 Subject: [PATCH 18/22] Update for new code commit --- content/components/cc1101.md | 158 ++++++++++++++++++----------------- 1 file changed, 82 insertions(+), 76 deletions(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index 08448efa91..f24b3103ea 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -16,106 +16,114 @@ This component requires the [SPI Component](spi.md) to be enabled. ## Component Configuration ```yaml -# Minimal Example +# Minimal Example (DUAL_PIN is the default operation_mode) cc1101: cs_pin: GPIOXX - gdo0_pin: GPIOXX frequency: 433.92MHz ``` ## Configuration Variables ### Hardware Settings +- **cs_pin** (**Required**, [Pin](pin.md)): The SPI Chip Select (CSN) pin connected to the module. -- **cs\_pin** (**Required**, [Pin](pin.md)): The SPI Chip Select (CSN) pin connected to the module. -- **gdo0\_pin** (**Required**, [Pin](pin.md)): The pin connected to **GDO0** on the CC1101. -- **Note:** `remote_transmitter` **must** use the pin connected to **GDO0** to transmit successfully. +- **operation_mode** (Optional, enum): Defines the role of the CC1101 GDO pins based on your wiring setup. This is crucial for correct TX/RX operation. + - `DUAL_PIN` (Default): Configures the module for separate TX and RX data pins. Internally sets GDO0 (Module Pin 3) for TX Data Input and GDO2 (Module Pin 8) for RX Data Output. This is the recommended mode. + - `SINGLE_PIN`: Configures GDO0 (Module Pin 3) for bi-directional Serial I/O and sets GDO2 to high impedance. This mode requires only one MCU GPIO pin for both TX and RX. ### General Settings - **frequency** (*Optional*, frequency): The operating frequency. Range: `300MHz` to `928MHz`. Default: `433.92MHz`. -- **output\_power** (*Optional*, float): The transmission power in dBm. Range: `-30` to `11`. Default: `10`. -- **modulation\_type** (*Optional*, enum): The modulation format. Options: `ASK/OOK` (default), `2-FSK`, `4-FSK`, `GFSK`, `MSK`. -- **symbol\_rate** (*Optional*, int): The symbol rate in Baud. Range: `600` to `500000`. Default: `5000`. -- **rx\_attenuation** (*Optional*, enum): Internal RX attenuation. Options: `0dB`, `6dB`, `12dB`, `18dB`. Default: `0dB`. -- **dc\_blocking\_filter** (*Optional*, boolean): Enable the digital DC blocking filter. Default: `True`. +- **output_power** (*Optional*, float): The transmission power in dBm. Range: `-30` to `11`. Default: `10`. +- **modulation_type** (*Optional*, enum): The modulation format. Options: `ASK/OOK` (default), `2-FSK`, `4-FSK`, `GFSK`, `MSK`. +- **symbol_rate** (*Optional*, int): The symbol rate in Baud. Range: `600` to `500000`. Default: `5000`. +- **rx_attenuation** (*Optional*, enum): Internal RX attenuation. Options: `0dB`, `6dB`, `12dB`, `18dB`. Default: `0dB`. +- **dc_blocking_filter** (*Optional*, boolean): Enable the digital DC blocking filter. Default: `True`. ### Tuner Settings -- **filter\_bandwidth** (*Optional*, frequency): The receive filter bandwidth. Range: `58kHz` to `812kHz`. Default: `203kHz`. -- **fsk\_deviation** (*Optional*, frequency): Frequency deviation for FSK/GFSK modulation. +- **filter_bandwidth** (*Optional*, frequency): The receive filter bandwidth. Range: `58kHz` to `812kHz`. Default: `203kHz`. +- **fsk_deviation** (*Optional*, frequency): Frequency deviation for FSK/GFSK modulation. - **channel** (*Optional*, int): Channel number (added to base frequency). -- **channel\_spacing** (*Optional*, frequency): Spacing between channels. -- **if\_frequency** (*Optional*, frequency): Intermediate Frequency. Default is optimized for 433MHz usage. -- **pktlen** (*Optional*, int): Packet length config. --> +- **channel_spacing** (*Optional*, frequency): Spacing between channels. +- **if_frequency** (*Optional*, frequency): Intermediate Frequency. Default is optimized for 433MHz usage. +- **pktlen** (*Optional*, int): Packet length config. ### AGC (Automatic Gain Control) Settings Advanced users can fine-tune the AGC dynamics. -- **magn\_target** (*Optional*, dB): Target signal amplitude. Range: `24dB` to `42dB` in increments of 3(eg. `33dB`). -- **max\_lna\_gain** (*Optional*, dB): Maximum LNA gain reduction. Options: `Default`, `2.6dB`, `6.1dB`, `7.4dB`, `9.2dB`, `11.5dB`, `14.6dB`, `17.1dB`. -- **max\_dvga\_gain** (*Optional*, enum): Maximum Digital Variable Gain reduction. Options: `Default`, `-1`, `-2`, `-3`. -- **lna\_priority** (*Optional*, boolean): If true, decrease LNA gain before DVGA gain. -- **carrier\_sense\_abs\_thr** (*Optional*, int): Absolute RSSI threshold for Carrier Sense. -- **carrier\_sense\_rel\_thr** (*Optional*, enum): Relative RSSI threshold for Carrier Sense. -- **filter\_length\_fsk\_msk** (*Optional*, enum): Averaging length for FSK/MSK. -- **filter\_length\_ask\_ook** (*Optional*, enum): Averaging length for ASK/OOK. +- **magn_target** (*Optional*, dB): Target signal amplitude. Range: `24dB` to `42dB` in increments of 3(eg. `33dB`). +- **max_lna_gain** (*Optional*, dB): Maximum LNA gain reduction. Options: `Default`, `2.6dB`, `6.1dB`, `7.4dB`, `9.2dB`, `11.5dB`, `14.6dB`, `17.1dB`. +- **max_dvga_gain** (*Optional*, enum): Maximum Digital Variable Gain reduction. Options: `Default`, `-1`, `-2`, `-3`. +- **lna_priority** (*Optional*, boolean): If true, decrease LNA gain before DVGA gain. +- **carrier_sense_abs_thr** (*Optional*, int): Absolute RSSI threshold for Carrier Sense. +- **carrier_sense_rel_thr** (*Optional*, enum): Relative RSSI threshold for Carrier Sense. +- **filter_length_fsk_msk** (*Optional*, enum): Averaging length for FSK/MSK. +- **filter_length_ask_ook** (*Optional*, enum): Averaging length for ASK/OOK. - **freeze** (*Optional*, enum): AGC gain freeze behavior. -- **wait\_time** (*Optional*, enum): AGC wait time. -- **hyst\_level** (*Optional*, enum): AGC hysteresis level. +- **wait_time** (*Optional*, enum): AGC wait time. +- **hyst_level** (*Optional*, enum): AGC hysteresis level. ## Actions This component provides actions to control the radio state, primarily used for coordinating transmission. -- **cc1101.begin\_tx**: Wakes the radio and forces it into TX mode. This **must** be called before `remote_transmitter` starts sending data. -- **cc1101.end\_tx**: Puts the radio back into RX mode and resets the pin configuration to safe defaults. +- **cc1101.begin_tx**: Wakes the radio and forces it into TX mode. This **must** be called before `remote_transmitter` starts sending data. +- **cc1101.end_tx**: Puts the radio back into RX mode and resets the pin configuration to safe defaults. - **cc1101.reset**: Resets the CC1101 chip and re-applies configuration. - **cc1101.set_idle**: Puts the radio into idle state. -### Example Transmit Button +## Integration with Remote Receiver/Transmitter + +### 1. Dual Pin Wiring (operation_mode: DUAL_PIN) +This mode is recommended for simplicity and clarity. The CC1101 chip handles the input/output logic internally, requiring minimal external pin configuration. + +- **GDO0 (Module Pin 3)**: Connect to the MCU pin used by `remote_transmitter`. +- **GDO2 (Module Pin 8)**: Connect to the MCU pin used by `remote_receiver`. ```yaml -button: -- platform: template - name: "Send Signal" - on_press: - - remote_transmitter.transmit_raw: - code: [1000, -1000, 1000, -1000] - repeat: 5 -``` +cc1101: + cs_pin: GPIOXX -## Integration with Remote Receiver/Transmitter +remote_transmitter: + pin: GPIOXX # Must match GDO0 + carrier_duty_percent: 100% + on_transmit: + then: + - cc1101.set_idle: + - remote_transmitter.digital_write: false + - cc1101.begin_tx: + on_complete: + then: + - cc1101.set_idle: + - remote_transmitter.digital_write: true + - cc1101.end_tx: -### Wiring for Single Pin Usage +remote_receiver: + pin: GPIOXX # CC1101 GDO2 + dump: all +``` -Wire **GDO0** to a single GPIO and use it for both TX and RX. +### 2. Single Pin Wiring - Push-Pull (with State Switching) +This mode requires only one MCU GPIO pin connected to GDO0 (Module Pin 3). Since the MCU pin operates in Push-Pull mode, manual switching between Input and Output logic is required inside the automation to avoid conflicts. + +- **GDO0 (Module Pin 3)**: Connect to a single MCU GPIO pin. +- **GDO2 (Module Pin 8)**: Leave disconnected. ```yaml cc1101: - gdo0_pin: - pin: - number: GPIOXX # CC1101 GDO0 - mode: - input: true - output: true - pullup: true - open_drain: true - allow_other_uses: true + cs_pin: GPIOXX + operation_mode: SINGLE_PIN remote_transmitter: - pin: + pin: number: GPIOXX # Must match GDO0 - mode: - input: true - output: true - pullup: true - open_drain: true allow_other_uses: true carrier_duty_percent: 100% on_transmit: then: + - remote_receiver.disable: - cc1101.set_idle: - remote_transmitter.digital_write: false - cc1101.begin_tx: @@ -124,37 +132,28 @@ remote_transmitter: - cc1101.set_idle: - remote_transmitter.digital_write: true - cc1101.end_tx: + - remote_receiver.enable: remote_receiver: - pin: + pin: number: GPIOXX # Must match GDO0 - mode: - input: true - output: true - pullup: true - open_drain: true allow_other_uses: true dump: all ``` -### Wiring for Split Pin Usage +### 3. Single Pin Wiring - Open Drain +This mode also requires only one MCU GPIO pin connected to GDO0 (Module Pin 3), but is simpler as the Open Drain configuration automatically handles the logic state switching without needing complex on_transmit/on_complete automation logic. -- **GDO0 (Pin 3)**: Connect to the pin used by `remote_transmitter`. -- **GDO2 (Pin 8)**: Connect to the pin used by `remote_receiver`. +- **GDO0 (Module Pin 3)**: Connect to a single MCU GPIO pin configured as Open Drain. +- **GDO2 (Module Pin 8)**: Leave disconnected. ```yaml cc1101: - gdo0_pin: - number: GPIOXX # Must match GDO0 - mode: - input: true - output: true - pullup: true - open_drain: true - allow_other_uses: true + cs_pin: GPIOXX + operation_mode: SINGLE_PIN remote_transmitter: - pin: + pin: number: GPIOXX # Must match GDO0 mode: input: true @@ -162,6 +161,7 @@ remote_transmitter: pullup: true open_drain: true allow_other_uses: true + eot_level: false carrier_duty_percent: 100% on_transmit: then: @@ -175,19 +175,25 @@ remote_transmitter: - cc1101.end_tx: remote_receiver: - pin: GPIOXX # CC1101 GDO2 + pin: + number: GPIOXX # Must match GDO0 + mode: + input: true + output: true + pullup: true + open_drain: true + allow_other_uses: true dump: all ``` ## Troubleshooting ### "FF0F was found" Error - If you see a log entry stating `FF0F`, `0000`, or `FFFF` during setup, this indicates an SPI communication failure. Check your wiring (MISO/MOSI/CS). ### No Signal during Transmit - -- **Check Pinout:** Ensure `remote_transmitter` is assigned to the pin physically connected to **GDO0**. The CC1101 **only** supports transmission via GDO0. +- **Check Pinout**: For all modes, the data line must be connected to GDO0 (Module Pin 3), as the CC1101 chip only supports transmission input via the GDO0 pin. +- **Check Pin Mode**: If using the Single Pin Push-Pull mode, ensure your on_transmit/on_complete logic correctly flips the pin's status. ## See Also From 282a759292c132a6f530143e346c7977acf91ae4 Mon Sep 17 00:00:00 2001 From: lygris Date: Thu, 20 Nov 2025 12:56:55 -0600 Subject: [PATCH 19/22] lint fixes --- content/components/cc1101.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index f24b3103ea..1bc4b2484a 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -25,8 +25,8 @@ cc1101: ## Configuration Variables ### Hardware Settings -- **cs_pin** (**Required**, [Pin](pin.md)): The SPI Chip Select (CSN) pin connected to the module. +- **cs_pin** (**Required**, [Pin](pin.md)): The SPI Chip Select (CSN) pin connected to the module. - **operation_mode** (Optional, enum): Defines the role of the CC1101 GDO pins based on your wiring setup. This is crucial for correct TX/RX operation. - `DUAL_PIN` (Default): Configures the module for separate TX and RX data pins. Internally sets GDO0 (Module Pin 3) for TX Data Input and GDO2 (Module Pin 8) for RX Data Output. This is the recommended mode. - `SINGLE_PIN`: Configures GDO0 (Module Pin 3) for bi-directional Serial I/O and sets GDO2 to high impedance. This mode requires only one MCU GPIO pin for both TX and RX. @@ -77,6 +77,7 @@ This component provides actions to control the radio state, primarily used for c ## Integration with Remote Receiver/Transmitter ### 1. Dual Pin Wiring (operation_mode: DUAL_PIN) + This mode is recommended for simplicity and clarity. The CC1101 chip handles the input/output logic internally, requiring minimal external pin configuration. - **GDO0 (Module Pin 3)**: Connect to the MCU pin used by `remote_transmitter`. @@ -106,6 +107,7 @@ remote_receiver: ``` ### 2. Single Pin Wiring - Push-Pull (with State Switching) + This mode requires only one MCU GPIO pin connected to GDO0 (Module Pin 3). Since the MCU pin operates in Push-Pull mode, manual switching between Input and Output logic is required inside the automation to avoid conflicts. - **GDO0 (Module Pin 3)**: Connect to a single MCU GPIO pin. @@ -142,6 +144,7 @@ remote_receiver: ``` ### 3. Single Pin Wiring - Open Drain + This mode also requires only one MCU GPIO pin connected to GDO0 (Module Pin 3), but is simpler as the Open Drain configuration automatically handles the logic state switching without needing complex on_transmit/on_complete automation logic. - **GDO0 (Module Pin 3)**: Connect to a single MCU GPIO pin configured as Open Drain. @@ -189,9 +192,11 @@ remote_receiver: ## Troubleshooting ### "FF0F was found" Error + If you see a log entry stating `FF0F`, `0000`, or `FFFF` during setup, this indicates an SPI communication failure. Check your wiring (MISO/MOSI/CS). ### No Signal during Transmit + - **Check Pinout**: For all modes, the data line must be connected to GDO0 (Module Pin 3), as the CC1101 chip only supports transmission input via the GDO0 pin. - **Check Pin Mode**: If using the Single Pin Push-Pull mode, ensure your on_transmit/on_complete logic correctly flips the pin's status. From b92f78a6781539f69936591ad30007c60fc15f85 Mon Sep 17 00:00:00 2001 From: lygris Date: Fri, 21 Nov 2025 16:13:59 -0600 Subject: [PATCH 20/22] Update to match latest component config --- content/components/cc1101.md | 53 +++++++++++++++++------------------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index 1bc4b2484a..4cd7da33ec 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -16,7 +16,7 @@ This component requires the [SPI Component](spi.md) to be enabled. ## Component Configuration ```yaml -# Minimal Example (DUAL_PIN is the default operation_mode) +# Minimal Example cc1101: cs_pin: GPIOXX frequency: 433.92MHz @@ -27,9 +27,6 @@ cc1101: ### Hardware Settings - **cs_pin** (**Required**, [Pin](pin.md)): The SPI Chip Select (CSN) pin connected to the module. -- **operation_mode** (Optional, enum): Defines the role of the CC1101 GDO pins based on your wiring setup. This is crucial for correct TX/RX operation. - - `DUAL_PIN` (Default): Configures the module for separate TX and RX data pins. Internally sets GDO0 (Module Pin 3) for TX Data Input and GDO2 (Module Pin 8) for RX Data Output. This is the recommended mode. - - `SINGLE_PIN`: Configures GDO0 (Module Pin 3) for bi-directional Serial I/O and sets GDO2 to high impedance. This mode requires only one MCU GPIO pin for both TX and RX. ### General Settings @@ -76,9 +73,11 @@ This component provides actions to control the radio state, primarily used for c ## Integration with Remote Receiver/Transmitter -### 1. Dual Pin Wiring (operation_mode: DUAL_PIN) +The component automatically configures the GDO pins to support both dual and single pin wiring schemes without any extra configuration. -This mode is recommended for simplicity and clarity. The CC1101 chip handles the input/output logic internally, requiring minimal external pin configuration. +### 1. Dual Pin Wiring (Recommended) + +This is the simplest and recommended wiring scheme. It uses separate pins for transmitting and receiving data. - **GDO0 (Module Pin 3)**: Connect to the MCU pin used by `remote_transmitter`. - **GDO2 (Module Pin 8)**: Connect to the MCU pin used by `remote_receiver`. @@ -106,13 +105,16 @@ remote_receiver: dump: all ``` -### 2. Single Pin Wiring - Push-Pull (with State Switching) +### 2. Single Pin Wiring -This mode requires only one MCU GPIO pin connected to GDO0 (Module Pin 3). Since the MCU pin operates in Push-Pull mode, manual switching between Input and Output logic is required inside the automation to avoid conflicts. +This wiring scheme uses a single MCU pin for both transmitting and receiving data, connected to GDO0. This requires careful configuration of the `remote_transmitter` and `remote_receiver` to avoid conflicts. Using an open-drain pin mode is recommended to simplify the setup. - **GDO0 (Module Pin 3)**: Connect to a single MCU GPIO pin. - **GDO2 (Module Pin 8)**: Leave disconnected. +#### Single Pin with Open-Drain (Recommended for Single Pin) +This is the recommended method for single-pin wiring as it avoids complex automations to switch pin modes. + ```yaml cc1101: cs_pin: GPIOXX @@ -121,11 +123,16 @@ cc1101: remote_transmitter: pin: number: GPIOXX # Must match GDO0 + mode: + input: true + output: true + pullup: true + open_drain: true allow_other_uses: true + eot_level: false carrier_duty_percent: 100% on_transmit: then: - - remote_receiver.disable: - cc1101.set_idle: - remote_transmitter.digital_write: false - cc1101.begin_tx: @@ -134,40 +141,34 @@ remote_transmitter: - cc1101.set_idle: - remote_transmitter.digital_write: true - cc1101.end_tx: - - remote_receiver.enable: remote_receiver: pin: number: GPIOXX # Must match GDO0 + mode: + input: true + output: true + pullup: true + open_drain: true allow_other_uses: true dump: all ``` -### 3. Single Pin Wiring - Open Drain - -This mode also requires only one MCU GPIO pin connected to GDO0 (Module Pin 3), but is simpler as the Open Drain configuration automatically handles the logic state switching without needing complex on_transmit/on_complete automation logic. - -- **GDO0 (Module Pin 3)**: Connect to a single MCU GPIO pin configured as Open Drain. -- **GDO2 (Module Pin 8)**: Leave disconnected. +#### Single Pin with Push-Pull +This method requires automations to manually enable and disable the receiver around transmissions to prevent the transmitter from receiving its own signals. ```yaml cc1101: cs_pin: GPIOXX - operation_mode: SINGLE_PIN remote_transmitter: pin: number: GPIOXX # Must match GDO0 - mode: - input: true - output: true - pullup: true - open_drain: true allow_other_uses: true - eot_level: false carrier_duty_percent: 100% on_transmit: then: + - remote_receiver.disable: - cc1101.set_idle: - remote_transmitter.digital_write: false - cc1101.begin_tx: @@ -176,15 +177,11 @@ remote_transmitter: - cc1101.set_idle: - remote_transmitter.digital_write: true - cc1101.end_tx: + - remote_receiver.enable: remote_receiver: pin: number: GPIOXX # Must match GDO0 - mode: - input: true - output: true - pullup: true - open_drain: true allow_other_uses: true dump: all ``` From be2fe85ed9248915a15cff5677624c2e4e4d974b Mon Sep 17 00:00:00 2001 From: lygris Date: Fri, 21 Nov 2025 16:18:02 -0600 Subject: [PATCH 21/22] lint fixes --- content/components/cc1101.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index 4cd7da33ec..3bce0425c5 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -113,6 +113,7 @@ This wiring scheme uses a single MCU pin for both transmitting and receiving dat - **GDO2 (Module Pin 8)**: Leave disconnected. #### Single Pin with Open-Drain (Recommended for Single Pin) + This is the recommended method for single-pin wiring as it avoids complex automations to switch pin modes. ```yaml @@ -155,6 +156,7 @@ remote_receiver: ``` #### Single Pin with Push-Pull + This method requires automations to manually enable and disable the receiver around transmissions to prevent the transmitter from receiving its own signals. ```yaml From 343b0f6a128f70c662f9f0a44b16ade9a5d8f168 Mon Sep 17 00:00:00 2001 From: lygris Date: Tue, 25 Nov 2025 16:21:04 -0600 Subject: [PATCH 22/22] fix links --- content/components/cc1101.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/components/cc1101.md b/content/components/cc1101.md index 3bce0425c5..f7cc18dd12 100644 --- a/content/components/cc1101.md +++ b/content/components/cc1101.md @@ -7,9 +7,9 @@ keywords: [cc1101] The **CC1101** component provides a driver for the **Texas Instruments CC1101** Sub-1 GHz RF Transceiver. It allows you to transmit and receive raw RF signals (ASK/OOK, FSK, etc.) using the standard -[Remote Transmitter](remote_transmitter.md) and [Remote Receiver](remote_receiver.md) components. +[Remote Transmitter](/components/remote_transmitter) and [Remote Receiver](/components/remote_receiver) components. -This component requires the [SPI Component](spi.md) to be enabled. +This component requires the [SPI Component](/components/spi) to be enabled. Image @@ -26,7 +26,7 @@ cc1101: ### Hardware Settings -- **cs_pin** (**Required**, [Pin](pin.md)): The SPI Chip Select (CSN) pin connected to the module. +- **cs_pin** (**Required**, [Pin](/guides/configuration-types/#pin)): The SPI Chip Select (CSN) pin connected to the module. ### General Settings