Skip to content

Commit c609591

Browse files
authored
Merge branch 'next' into ringbuf_flash_idf6
2 parents 5582e82 + e9d2054 commit c609591

File tree

15 files changed

+369
-26
lines changed

15 files changed

+369
-26
lines changed

content/changelog/2025.11.0.md

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,15 @@ HTTP request actions now pass trigger variables correctly into `on_response` and
382382

383383
- **ESP32 brownout protection**: ESP-IDF now reduces PHY TX power during brownout to prevent boot loops. Can be disabled with `sdkconfig_options: CONFIG_ESP_PHY_REDUCE_TX_POWER: n` if needed. [#11306](https://github.com/esphome/esphome/pull/11306)
384384

385-
- **ESP32-S3 PSRAM**: PSRAM mode is now required when multiple PSRAM modes are available (ESP32-S3 only). Users must explicitly choose PSRAM mode in configuration. [#11470](https://github.com/esphome/esphome/pull/11470)
385+
- **ESP32 PSRAM**: PSRAM is no longer auto-loaded by components that depend on it (such as `esp32_camera`, `speaker`, and `media_player`). Users must now explicitly add a `psram:` configuration block to their YAML. Additionally, for ESP32-S3, the `mode` option is now required since S3 supports both quad and octal modes. Typically, 2MB PSRAM uses `quad` mode while 8 or 16MB uses `octal` mode—check your module's datasheet. Example configuration:
386+
387+
```yaml
388+
psram:
389+
mode: octal # Required for ESP32-S3, use 'quad' or 'octal'
390+
speed: 80MHz
391+
```
392+
393+
[#11470](https://github.com/esphome/esphome/pull/11470)
386394

387395
### Component Behavior Changes
388396

@@ -518,6 +526,25 @@ The 2025.11 release blog posts include comprehensive migration examples for comm
518526

519527
<!-- markdownlint-disable MD013 -->
520528

529+
## Release 2025.11.3 - December 3
530+
531+
<details>
532+
<summary></summary>
533+
534+
- [build] Don't clear pio cache unless requested [esphome#11966](https://github.com/esphome/esphome/pull/11966) by [@clydebarrow](https://github.com/clydebarrow)
535+
- [usb_uart] Wake main loop immediately when USB data arrives [esphome#12148](https://github.com/esphome/esphome/pull/12148) by [@bdraco](https://github.com/bdraco)
536+
- [espnow] Initialize LwIP stack when running without WiFi component [esphome#12169](https://github.com/esphome/esphome/pull/12169) by [@bdraco](https://github.com/bdraco)
537+
- [helpers] Add conversion from FixedVector to std::vector [esphome#12179](https://github.com/esphome/esphome/pull/12179) by [@clydebarrow](https://github.com/clydebarrow)
538+
- [hlk_fm22x] Fix Action::play method signatures [esphome#12192](https://github.com/esphome/esphome/pull/12192) by [@bdraco](https://github.com/bdraco)
539+
- [mopeka_pro_check] Fix negative temperatures [esphome#12198](https://github.com/esphome/esphome/pull/12198) by [@swoboda1337](https://github.com/swoboda1337)
540+
- [ade7953] Apply voltage_gain setting to both channels [esphome#12180](https://github.com/esphome/esphome/pull/12180) by [@dlitz](https://github.com/dlitz)
541+
- [core] Fix clean all on windows [esphome#12217](https://github.com/esphome/esphome/pull/12217) by [@swoboda1337](https://github.com/swoboda1337)
542+
- [rtl87xx] Fix AsyncTCP compilation by upgrading FreeRTOS to 8.2.3 [esphome#12230](https://github.com/esphome/esphome/pull/12230) by [@swoboda1337](https://github.com/swoboda1337)
543+
- [analog_threshold] Fix oscillation when using invert filter [esphome#12251](https://github.com/esphome/esphome/pull/12251) by [@swoboda1337](https://github.com/swoboda1337)
544+
- [rtl87xx] Fix FreeRTOS version for RTL8720C boards [esphome#12261](https://github.com/esphome/esphome/pull/12261) by [@swoboda1337](https://github.com/swoboda1337)
545+
546+
</details>
547+
521548
## Release 2025.11.2 - November 27
522549

523550
<details>

content/components/_index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,6 +1042,7 @@ Used for creating infrared (IR) or radio frequency (RF) remote control transmitt
10421042
ESPHome to cellular networks. **Does not encompass Wi-Fi.**
10431043

10441044
{{< imgtable >}}
1045+
"CC1101","components/cc1101","cc1101.webp",""
10451046
"IR Remote Climate","components/climate/climate_ir","air-conditioner-ir.svg","dark-invert"
10461047
"Remote Receiver","components/remote_receiver","remote.svg","dark-invert"
10471048
"Remote Transmitter","components/remote_transmitter","remote.svg","dark-invert"

content/components/cc1101.md

Lines changed: 248 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,248 @@
1+
---
2+
title: CC1101 Low-Power Sub-1 GHz RF Transceiver
3+
description: Instructions for setting up CC1101 RF Transceiver in ESPHome.
4+
image: /components/images/cc1101-full.webp
5+
keywords: [cc1101]
6+
---
7+
8+
The **CC1101** component provides a driver for the **Texas Instruments CC1101** Sub-1 GHz RF Transceiver
9+
([datasheet](https://www.ti.com/lit/ds/symlink/cc1101.pdf)). The CC1101 is a low-cost, low-power radio
10+
chip commonly used for wireless communication in the 300-928 MHz frequency bands, including the popular
11+
315 MHz, 433 MHz, 868 MHz, and 915 MHz ISM bands.
12+
13+
The **CC1101** supports multiple modulation schemes (ASK/OOK, 2-FSK, 4-FSK, GFSK, MSK), configurable data
14+
rates from 600 to 500,000 baud, and adjustable output power from -30 dBm to +11 dBm. It connects to
15+
ESPHome via the [SPI Bus](/components/spi) and integrates with the
16+
[Remote Transmitter](/components/remote_transmitter) and
17+
[Remote Receiver](/components/remote_receiver) components for encoding and decoding RF protocols.
18+
19+
{{< img src="cc1101-full.webp" alt="CC1101 Module" width="50.0%" class="align-center" >}}
20+
21+
## Component Configuration
22+
23+
```yaml
24+
# Minimal Example
25+
cc1101:
26+
cs_pin: GPIOXX
27+
frequency: 433.92MHz
28+
```
29+
30+
## Configuration Variables
31+
32+
### Hardware Settings
33+
34+
- **cs_pin** (**Required**, [Pin](/guides/configuration-types/#pin)):
35+
The SPI Chip Select (CSN) pin connected to the module.
36+
37+
### General Settings
38+
39+
- **frequency** (*Optional*, frequency): The operating frequency.
40+
Range: `300MHz` to `928MHz`. Defaults to `433.92MHz`.
41+
- **output_power** (*Optional*, float): The transmission power in dBm.
42+
Range: `-30` to `11`. Defaults to `10`.
43+
- **modulation_type** (*Optional*, enum): The modulation format.
44+
Options: `ASK/OOK` (default), `2-FSK`, `4-FSK`, `GFSK`, `MSK`.
45+
- **symbol_rate** (*Optional*, int): The symbol rate in Baud.
46+
Range: `600` to `500000`. Defaults to `5000`.
47+
- **rx_attenuation** (*Optional*, enum): Internal RX attenuation.
48+
Options: `0dB`, `6dB`, `12dB`, `18dB`. Defaults to `0dB`.
49+
- **dc_blocking_filter** (*Optional*, boolean): Enable the digital DC blocking filter. Defaults to `true`.
50+
51+
### Tuner Settings
52+
53+
- **filter_bandwidth** (*Optional*, frequency): The receive filter bandwidth.
54+
Range: `58kHz` to `812kHz`. Defaults to `203kHz`.
55+
- **fsk_deviation** (*Optional*, frequency): Frequency deviation for FSK/GFSK modulation.
56+
- **channel** (*Optional*, int): Channel number (added to base frequency). Defaults to `0`.
57+
- **channel_spacing** (*Optional*, frequency): Spacing between channels. Defaults to `200kHz`.
58+
- **if_frequency** (*Optional*, frequency): Intermediate Frequency. Defaults to `153kHz`.
59+
- **pktlen** (*Optional*, int): Packet length configuration. Sets the expected packet size for
60+
fixed-length packet mode. Range: `1` to `255`. Not typically needed for OOK/ASK modulation.
61+
62+
### AGC (Automatic Gain Control) Settings
63+
64+
Advanced users can fine-tune the AGC dynamics. The AGC automatically adjusts receiver gain to handle
65+
signals of varying strength. These settings control how aggressively and quickly the gain adapts.
66+
See the [CC1101 Datasheet](https://www.ti.com/lit/ds/symlink/cc1101.pdf) for detailed information.
67+
68+
- **magn_target** (*Optional*, dB): Target signal amplitude for the AGC loop. Higher values increase
69+
sensitivity but may cause clipping on strong signals.
70+
Range: `24dB` to `42dB` in increments of 3 (e.g., `33dB`). Defaults to `42dB`.
71+
- **max_lna_gain** (*Optional*, dB): Limits the maximum LNA (Low Noise Amplifier) gain. Use to prevent
72+
saturation in high-signal environments. Defaults to `Default`.
73+
Options: `Default`, `2.6dB`, `6.1dB`, `7.4dB`, `9.2dB`, `11.5dB`, `14.6dB`, `17.1dB`.
74+
- **max_dvga_gain** (*Optional*, enum): Limits the maximum DVGA (Digital Variable Gain Amplifier) gain.
75+
Options: `Default`, `-1`, `-2`, `-3`. Defaults to `-3`.
76+
- **lna_priority** (*Optional*, boolean): If true, reduce LNA gain before DVGA gain when decreasing
77+
overall gain. Useful for optimizing noise figure. Defaults to `false`.
78+
- **carrier_sense_abs_thr** (*Optional*, int): Absolute RSSI threshold for carrier sense. The radio
79+
considers a carrier present when RSSI exceeds this level.
80+
- **carrier_sense_rel_thr** (*Optional*, enum): Relative RSSI threshold for carrier sense, compared
81+
to the current noise floor. Options: `Default`, `+6dB`, `+10dB`, `+14dB`.
82+
- **filter_length_fsk_msk** (*Optional*, enum): Averaging length for AGC in FSK/MSK modes.
83+
Longer values provide more stable gain but slower response. Options: `8`, `16`, `32`, `64`.
84+
- **filter_length_ask_ook** (*Optional*, enum): Averaging length for AGC in ASK/OOK modes.
85+
Longer values provide more stable gain but slower response. Options: `4dB`, `8dB`, `12dB`, `16dB`.
86+
- **freeze** (*Optional*, enum): Controls when AGC gain is frozen (held constant).
87+
Options: `Default`, `On Sync`, `Analog Only`, `Analog And Digital`.
88+
- **wait_time** (*Optional*, enum): Time to wait after a gain change before allowing another adjustment.
89+
Options: `8`, `16`, `24`, `32`. Defaults to `32`.
90+
- **hyst_level** (*Optional*, enum): Hysteresis level to prevent gain oscillation on borderline signals.
91+
Options: `None`, `Low`, `Medium`, `High`.
92+
93+
## Actions
94+
95+
This component provides actions to control the radio state, primarily used for coordinating transmission.
96+
97+
- **cc1101.begin_tx**: Puts the radio into TX mode. Must be called before transmitting.
98+
- **cc1101.begin_rx**: Puts the radio into RX mode. Call after transmitting to resume receiving.
99+
- **cc1101.set_idle**: Puts the radio into an idle state. In single-pin configurations, this should be
100+
called before switching between TX and RX modes to ensure clean state transitions.
101+
- **cc1101.reset**: Resets the CC1101 chip and re-applies configuration.
102+
103+
## Integration with Remote Receiver/Transmitter
104+
105+
The component automatically configures the GDO pins to support both dual and single pin wiring schemes
106+
without any extra configuration.
107+
108+
### 1. Dual Pin Wiring (Recommended)
109+
110+
This is the simplest and recommended wiring scheme. It uses separate pins for transmitting and receiving data.
111+
112+
- **GDO0 (Module Pin 3)**: Connect to the MCU pin used by `remote_transmitter`.
113+
- **GDO2 (Module Pin 8)**: Connect to the MCU pin used by `remote_receiver`.
114+
115+
```yaml
116+
cc1101:
117+
cs_pin: GPIOXX
118+
119+
remote_transmitter:
120+
pin: GPIOXX # Must match GDO0
121+
carrier_duty_percent: 100%
122+
on_transmit:
123+
then:
124+
- cc1101.begin_tx
125+
on_complete:
126+
then:
127+
- cc1101.begin_rx
128+
129+
remote_receiver:
130+
pin: GPIOXX # CC1101 GDO2
131+
dump: all
132+
```
133+
134+
### 2. Single Pin Wiring
135+
136+
This wiring scheme uses a single MCU pin for both transmitting and receiving data, connected to GDO0.
137+
This requires careful configuration of the `remote_transmitter` and `remote_receiver` to avoid conflicts.
138+
Using an open-drain pin mode is recommended to simplify the setup.
139+
140+
- **GDO0 (Module Pin 3)**: Connect to a single MCU GPIO pin.
141+
- **GDO2 (Module Pin 8)**: Leave disconnected.
142+
143+
#### Single Pin with Open-Drain
144+
145+
ESP32 must use this method when using single-pin wiring. The shared pin should be set to open-drain with a
146+
pullup. The `eot_level` option (from `remote_transmitter`) controls the pin state after transmission
147+
completes - setting it to `false` keeps the pin low until explicitly released. In addition to setting the
148+
CC1101 mode in `on_transmit`/`on_complete`, the pin should be driven low before `begin_tx` and released
149+
before `begin_rx`.
150+
151+
```yaml
152+
cc1101:
153+
cs_pin: GPIOXX
154+
155+
remote_receiver:
156+
pin:
157+
number: GPIOXX # Must match GDO0
158+
mode:
159+
input: true
160+
output: true
161+
pullup: true
162+
open_drain: true
163+
allow_other_uses: true
164+
dump: all
165+
166+
remote_transmitter:
167+
pin:
168+
number: GPIOXX # Must match GDO0
169+
mode:
170+
input: true
171+
output: true
172+
pullup: true
173+
open_drain: true
174+
allow_other_uses: true
175+
eot_level: false
176+
carrier_duty_percent: 100%
177+
on_transmit:
178+
then:
179+
- cc1101.set_idle
180+
- remote_transmitter.digital_write: false
181+
- cc1101.begin_tx
182+
on_complete:
183+
then:
184+
- cc1101.set_idle
185+
- remote_transmitter.digital_write: true
186+
- cc1101.begin_rx
187+
```
188+
189+
#### Single Pin with Mode Switching
190+
191+
This method requires lambdas to manually switch the pin mode between input and output around transmissions.
192+
On boot, the pin must be set to input mode so the receiver can operate.
193+
194+
```yaml
195+
esphome:
196+
on_boot:
197+
- priority: 0
198+
then:
199+
- lambda: id(rx_pin)->pin_mode(gpio::FLAG_INPUT);
200+
201+
cc1101:
202+
cs_pin: GPIOXX
203+
204+
remote_receiver:
205+
pin:
206+
id: rx_pin
207+
number: GPIOXX # Must match GDO0
208+
allow_other_uses: true
209+
dump: all
210+
211+
remote_transmitter:
212+
pin:
213+
id: tx_pin
214+
number: GPIOXX # Must match GDO0
215+
allow_other_uses: true
216+
carrier_duty_percent: 100%
217+
on_transmit:
218+
then:
219+
- cc1101.set_idle
220+
- lambda: id(tx_pin)->pin_mode(gpio::FLAG_OUTPUT);
221+
- cc1101.begin_tx
222+
on_complete:
223+
then:
224+
- cc1101.set_idle
225+
- lambda: id(rx_pin)->pin_mode(gpio::FLAG_INPUT);
226+
- cc1101.begin_rx
227+
```
228+
229+
## Troubleshooting
230+
231+
### "FF0F was found" Error
232+
233+
If you see a log entry stating `FF0F`, `0000`, or `FFFF` during setup, this indicates an SPI
234+
communication failure. Check your wiring (MISO/MOSI/CS).
235+
236+
### No Signal during Transmit
237+
238+
- **Check Pinout**: For all modes, the data line must be connected to GDO0 (Module Pin 3),
239+
as the CC1101 chip only supports transmission input via the GDO0 pin.
240+
- **Check Pin Mode**: If using the Single Pin with Mode Switching method,
241+
ensure your `on_transmit`/`on_complete` logic correctly flips the pin mode.
242+
243+
## See Also
244+
245+
- [Remote Receiver](/components/remote_receiver)
246+
- [Remote Transmitter](/components/remote_transmitter)
247+
- [SPI Component](/components/spi)
248+
- [CC1101 Datasheet](https://www.ti.com/lit/ds/symlink/cc1101.pdf)

content/components/climate/climate_ir.md

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ The Daikin ARC remotes (`daikin_arc` climate, `daikin_arc417`, `daikin_arc480` p
131131

132132
### `gree`
133133

134-
- **model** (**Required**, string): GREE has a few different protocols depending on model. One of these will work for you.
134+
- **model** (**Required**, string): GREE has a few different protocols depending on model. One of these will likely work for you:
135135

136136
- `generic`
137137
- `yan`
@@ -142,14 +142,38 @@ The Daikin ARC remotes (`daikin_arc` climate, `daikin_arc417`, `daikin_arc480` p
142142
- `yag`
143143

144144
```yaml
145-
# Example configuration entry
145+
# Example configuration entry for climate only
146146
climate:
147147
- platform: gree
148148
name: "AC"
149+
id: my_gree_ac
149150
sensor: room_temperature
150151
model: yan
151152
```
152153

154+
Models `yan`, `yaa`, `yac` and `yac1fb9` support a couple of additional features which can be controlled with switches:
155+
156+
- **gree_id** (**Required**, [ID](/guides/configuration-types#id)): Specify the ID of the `gree` climate to which these swicthes should belong.
157+
- **light** (*Optional*, [Switch](/components/switch#config-switch)): To turn off indoor unit display/LED at night for complete room darkness.
158+
- **turbo** (*Optional*, [Switch](/components/switch#config-switch)): For maximum fan speed and fastest results.
159+
- **health** (*Optional*, [Switch](/components/switch#config-switch)): Removal of dust and germs from the environment by ionizing the air flowing through the blades.
160+
- **xfan** (*Optional*, [Switch](/components/switch#config-switch)): Prevention of excess moisture in the machine that cause mold, mildew, and unpleasant odors. Indoor fan will keep running for short period after turning turn off the AC, to dry the blades.
161+
162+
```yaml
163+
# Example configuration entry for switches of the climate
164+
switch:
165+
- platform: gree
166+
gree_id: my_gree_ac
167+
light:
168+
name: "AC Lights"
169+
turbo:
170+
name: "AC Turbo"
171+
health:
172+
name: "AC Health"
173+
xfan:
174+
name: "AC X-Fan"
175+
```
176+
153177
{{< anchor "midea_ir" >}}
154178

155179
### `midea_ir`

content/components/esp32_camera.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ params:
1010
The `esp32_camera` component allows you to use ESP32-based camera boards in ESPHome that
1111
directly integrate into Home Assistant through the native API.
1212

13-
Requires an {{< docref "/components/i2c" >}} to be set up.
13+
Requires an {{< docref "/components/i2c" >}} and {{< docref "/components/psram" >}} to be configured.
1414

1515
```yaml
1616
# Example configuration entry

content/components/ethernet.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,20 @@ ethernet:
240240
power_pin: GPIO5
241241
```
242242

243+
**DFRobot Edge101** and **ESP32-DOWD-V3**:
244+
245+
```yaml
246+
ethernet:
247+
type: IP101
248+
mdc_pin: GPIO4
249+
mdio_pin: GPIO13
250+
clk:
251+
pin: GPIO0
252+
mode: CLK_EXT_IN
253+
power_pin: GPIO2
254+
phy_addr: 1
255+
```
256+
243257
**AiThinker ESP32-G Gateway**:
244258

245259
```yaml
38.4 KB
Loading

content/components/psram.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ psram:
2323
## Configuration variables
2424
2525
- **mode** (*Optional*): Defines the operating mode the PSRAM should utilize. One of `quad`, `octal` or `hex`.
26-
Defaults to `quad` for ESP32 and `hex` for ESP32-P4. ESP32-S3 has no default and *requires* this option to be set.
26+
Defaults to `quad` for ESP32, ESP32-C5, ESP32-S2 and `hex` for ESP32-P4. ESP32-S3 has no default and *requires* this option to be set.
2727
See notes below.
2828
- **speed** (*Optional*, int): The speed at which the PSRAM should operate. One of `40MHz` (default), `80MHz` or `120MHz`.
2929
- **enable_ecc** (*Optional*, bool): For octal mode, enable ECC (Error Correction Code) for the PSRAM (default is off.)
@@ -39,7 +39,7 @@ psram:
3939

4040
## Modes
4141

42-
The ESP32 PSRAM is only available in `quad` mode, and ESP32-P4 only supports `hex` mode. These are the defaults
42+
The ESP32, ESP32-C5 and ESP32-S2 PSRAM is only available in `quad` mode, and ESP32-P4 only supports `hex` mode. These are the defaults
4343
when using those variants. For ESP32-S3, the `mode` option is required and must be set to `quad` or `octal`.
4444
Typically on ESP32-S3 modules, a 2MB PSRAM will use quad mode, while 8 or 16MB will use octal mode, but check
4545
the datasheet for the module you are using to be sure.

0 commit comments

Comments
 (0)