跳转到内容

ESP32 LEDC 输出

LEDC 输出组件将 ESP32 的 LEDC PWM 通道暴露为输出组件。

LEDC 的频率范围为 10Hz 到 40MHz——但是,较高频率需要较小的位深度,这意味着对于约 300kHz 以上的频率,输出不是很精确。

  • pin (必填, Pin):使用 LEDC 的引脚。只能是 GPIO0-GPIO33。

  • id (必填, ID):此输出组件使用的 id。

  • frequency (可选, 频率):运行 LEDC 通道定时器的频率。默认为 1kHz

  • 所有其他选项来自 Output

高级选项:

  • channel (可选, 整数):手动设置要使用的 LEDC 通道。 两个相邻的通道共享同一个定时器。默认为自动选择。

注意:为两个或更多输出配置自定义频率时,请确保为每个输出手动指定通道 0、2、4、6。这将避免自动选择产生的问题,自动选择会选择具有共享定时器的相邻通道。详见 issues#3114

  • phase_angle (可选, 浮点数):为此定时器的另一个通道设置相角。 范围 0-360°,默认为 0°
# 示例配置条目
output:
- platform: ledc
pin: GPIOXX
id: gpio_
# 在灯光中的示例用法
light:
- platform: monochromatic
output: gpio_19
name: "Kitchen Light"
# 配置输出
output:
- platform: ledc
######################################################
# 蜂鸣器的一只脚连接到 GPIO12,另一只脚连接到 GND
######################################################
pin: GPIO12
id: buzzer
# 在自动化中的示例用法
on_press:
then:
######################################################
# 必须在设置频率和电平之前开启
######################################################
- output.turn_on: buzzer
######################################################
# 频率设置波形大小
######################################################
- output.ledc.set_frequency:
id: buzzer
frequency: "1kHz"
######################################################
# level 设置 PWM 开启的时间百分比
######################################################
- output.set_level:
id: buzzer
level: "50%"

要获得最高可用频率同时保持相同的位深度,建议选择以下频率之一。

较高的位深度意味着灯光有更多可用的步骤从一个值变化到另一个值。这在灯光低于 10% 且需要长时间过渡时尤其明显,例如缓慢关闭。

频率位深度过渡可用步数
1220Hz1665536
2441Hz1532768
4882Hz1416384
9765Hz138192
19531Hz124096

例如,ESP8266 通常的频率为 1000Hz,分辨率为 10 位。 这意味着每个值之间只有 4 个步骤。

动作允许您在运行时手动更改 LEDC 通道的频率。使用场景包括控制无源蜂鸣器(用于音调控制)。

on_...:
- output.ledc.set_frequency:
id: ledc_output
frequency: 100Hz

配置变量:

  • id (必填, ID):要更改的 LEDC 输出的 ID。
  • frequency (必填, 可模板化, 频率):要设置的频率,单位 Hz。