-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
CC1101 docs #5614
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
lygris
wants to merge
23
commits into
esphome:next
Choose a base branch
from
lygris:cc1101-docs
base: next
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
CC1101 docs #5614
Changes from all commits
Commits
Show all changes
23 commits
Select commit
Hold shift + click to select a range
7e9ddf7
Add CC1101 docs
lygris e94a724
lint fixes
lygris 193427e
More lint fixes
lygris db07657
final lint fixes
lygris ae1a4e5
fix img to be standard html
lygris 88c3871
update with settings name changes
lygris bcdd7d6
Update Docs to match latest commit.
lygris 623264f
Requested Fixes
lygris 39f3e19
missed these ones
lygris 8d07632
lint fixes
lygris 8059126
moar lint fixes
lygris f6a156c
add begin/end tx actions to examples
lygris 9488c62
Remove some commented lines and fix lint error
lygris b9d07e6
Fix transmitter config example
lygris 7d0f999
Fix image link
lygris 95de05c
actually fix image link
lygris 2723afa
Add missing Idle action description.
lygris 5506883
Update for new code commit
lygris 282a759
lint fixes
lygris b92f78a
Update to match latest component config
lygris be2fe85
lint fixes
lygris 919901d
Merge branch 'next' into cc1101-docs
swoboda1337 343b0f6
fix links
lygris File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,208 @@ | ||||||||
| --- | ||||||||
| title: CC1101 Low-Power Sub-1 GHz RF Transceiver | ||||||||
| description: Instructions for setting up CC1101 RF Transceiver in ESPHome. | ||||||||
| image: /components/images/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](/components/remote_transmitter) and [Remote Receiver](/components/remote_receiver) components. | ||||||||
|
|
||||||||
| This component requires the [SPI Component](/components/spi) to be enabled. | ||||||||
|
|
||||||||
| <img src="/components/images/cc1101.webp" alt="Image" width="50.0%" class="align-center"> | ||||||||
|
|
||||||||
| ## Component Configuration | ||||||||
|
|
||||||||
| ```yaml | ||||||||
| # Minimal Example | ||||||||
| cc1101: | ||||||||
| cs_pin: GPIOXX | ||||||||
| frequency: 433.92MHz | ||||||||
| ``` | ||||||||
|
|
||||||||
| ## Configuration Variables | ||||||||
|
|
||||||||
| ### Hardware Settings | ||||||||
|
|
||||||||
| - **cs_pin** (**Required**, [Pin](/guides/configuration-types/#pin)): The SPI Chip Select (CSN) pin connected to the module. | ||||||||
|
|
||||||||
| ### 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`. | ||||||||
|
|
||||||||
| ### 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. | ||||||||
| - **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. | ||||||||
|
|
||||||||
| ## 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.set_idle**: Puts the radio into idle state. | ||||||||
|
|
||||||||
| ## Integration with Remote Receiver/Transmitter | ||||||||
|
|
||||||||
| The component automatically configures the GDO pins to support both dual and single pin wiring schemes without any extra 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`. | ||||||||
|
|
||||||||
| ```yaml | ||||||||
| cc1101: | ||||||||
| cs_pin: GPIOXX | ||||||||
|
|
||||||||
| 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: | ||||||||
|
|
||||||||
| remote_receiver: | ||||||||
| pin: GPIOXX # CC1101 GDO2 | ||||||||
| dump: all | ||||||||
| ``` | ||||||||
|
|
||||||||
| ### 2. Single Pin Wiring | ||||||||
|
|
||||||||
| 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 | ||||||||
| 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% | ||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||
| 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: | ||||||||
swoboda1337 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||
|
|
||||||||
| remote_receiver: | ||||||||
| pin: | ||||||||
| number: GPIOXX # Must match GDO0 | ||||||||
| mode: | ||||||||
| input: true | ||||||||
| output: true | ||||||||
| pullup: true | ||||||||
| open_drain: true | ||||||||
| allow_other_uses: true | ||||||||
| dump: all | ||||||||
| ``` | ||||||||
|
|
||||||||
swoboda1337 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||
| #### 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 | ||||||||
|
|
||||||||
| remote_transmitter: | ||||||||
| pin: | ||||||||
| number: GPIOXX # Must match GDO0 | ||||||||
| 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: | ||||||||
| on_complete: | ||||||||
| then: | ||||||||
| - cc1101.set_idle: | ||||||||
| - remote_transmitter.digital_write: true | ||||||||
| - cc1101.end_tx: | ||||||||
| - remote_receiver.enable: | ||||||||
|
|
||||||||
| remote_receiver: | ||||||||
| pin: | ||||||||
| number: GPIOXX # Must match GDO0 | ||||||||
| 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**: 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 | ||||||||
|
|
||||||||
| - [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) | ||||||||
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.