Arduino ESP32 指南

Arduino ESP32 指南 > API > LED 控制

LED 控制 (LEDC)

LED 控制 (LEDC) 外设主要用于控制 LED 的强度,尽管它也可用于生成用于其他目的的 PWM 信号。

ESP32 SoC 具有 6 到 16 个通道(在 SoC 上有所不同,见下表),可以生成独立的波形,例如可用于驱动 RGB LED 设备。

ESP32 SoC Number of LEDC channels
ESP32 16
ESP32-S2 8
ESP32-S3 8
ESP32-C3 6
ESP32-C6 6
ESP32-H2 6

Arduino-ESP32 LEDC API  

ledcSetCLockSource

此功能用于设置 LEDC 外设时钟源。必须在使用任何 LEDC 通道之前调用。如果 SoC 支持,则默认时钟源为 XTAL clock (LEDC_USE_XTAL_CLK),否则为 AUTO clock (LEDC_AUTO_CLK)。

bool ledcSetClockSource(ledc_clk_cfg_t source);
  • source 选择 LEDC peripheral 的 clock source。
    • LEDC_APB_CLK - APB clock.
      LEDC_APB_CLK - APB 时钟。
    • LEDC_REF_CLK - REF clock.
      LEDC_REF_CLK - REF 时钟。

如果设置 clock source 成功,此函数将返回 true,否则将返回 false。

ledcGetClockSource

该函数用于获取 LEDC 外设时钟源。

ledc_clk_cfg_t ledcGetClockSource(void);

此函数将返回 LEDC 外设的时钟源。

ledcAttach  ledc 连接

此功能用于设置给定频率和分辨率的 LEDC 引脚。将自动选择 LEDC 通道。

bool ledcAttach(uint8_t pin, uint32_t freq, uint8_t resolution);
  • pin 选择 LEDC 引脚。
  • freq 选择 PWM 的频率。
  • 分辨率 选择 LEDC 通道的分辨率。
    • 范围为 1-14 位(ESP32 为 1-20 位)。

如果配置成功,此函数将返回 true。如果返回 false,则出错且未配置 LEDC 通道。

ledcAttachChannel

此功能用于设置给定频率、分辨率和通道的 LEDC 引脚。将多个 pins 连接到同一个 channel 将使它们共享相同的 duty cycle。给定频率,如果已配置通道,则将忽略分辨率。

bool ledcAttachChannel(uint8_t pin, uint32_t freq, uint8_t resolution, int8_t channel);
  • pin 选择 LEDC 引脚。
  • freq 选择 PWM 的频率。
  • 分辨率 选择 LEDC 通道的分辨率。
    • 范围为 1-14 位(ESP32 为 1-20 位)。
  • channel 选择 LEDC 通道。

如果配置成功,此函数将返回 true。如果返回 false,则出错且未配置 LEDC 通道。

ledcWrite  ledc 写入

此功能用于设置 LEDC 引脚的占空比。

bool ledcWrite(uint8_t pin, uint32_t duty);
  • pin 选择 LEDC 引脚。
  • duty 选择要为所选 LEDC 引脚设置的 duty。

如果设置 duty 成功,此函数将返回 true。如果返回 false,则发生错误且未设置 duty。

ledcWriteChannel  ledc 写入通道

此功能用于设置 LEDC 通道的占空比。

bool ledcWriteChannel(uint8_t channel, uint32_t duty);
  • channel 选择 LEDC 通道。
  • duty 选择要为所选 LEDC 通道设置的 duty。

如果设置 duty 成功,此函数将返回 true。如果返回 false,则发生错误且未设置 duty。

ledcRead  ledc 读取

此函数用于获取 LEDC 引脚的配置占空率。

uint32_t ledcRead(uint8_t pin);
  • pin 选择 LEDC 引脚以读取配置的 LEDC 占空比。

此函数将返回所选 LEDC 引脚的占空比设置。

ledcReadFreq

此函数用于获取 LEDC 通道的配置频率。

uint32_t ledcReadFreq(uint8_t pin);
  • pin 选择 LEDC pin 以读取配置的频率。

此函数将返回为所选 LEDC 引脚配置的频率。

ledcWriteTone

此功能用于将 LEDC 引脚设置为选定频率上的 50% PWM 音调。

uint32_t ledcWriteTone(uint8_t pin, uint32_t freq);
  • pin 选择 LEDC 引脚。
  • freq 选择 PWM 信号的频率。如果 frequency 为 0,则占空比将设置为 0。

此函数将返回为 LEDC 引脚设置的频率。如果返回 0,则发生错误,并且未配置 LEDC 引脚。

ledcWriteNote

此功能用于将 LEDC 引脚设置为特定音符。

uint32_t ledcWriteNote(uint8_t pin, note_t note, uint8_t octave);
  • pin 选择 LEDC 引脚。
  • 备注 选择要设置的注释。
NOTE_C NOTE_Cs NOTE_D NOTE_Eb NOTE_E NOTE_F
NOTE_Fs NOTE_G NOTE_Gs NOTE_A NOTE_Bb NOTE_B
  • 八度音程 选择 八度音程 作为音符。

此函数将根据音符和八度输入返回为 LEDC 引脚配置的频率。如果返回 0,则发生错误,并且未配置 LEDC 通道。

ledcDetach  ledc 分离

此功能用于将引脚从 LEDC 上分离。

bool ledcDetach(uint8_t pin);
  • pin 选择 LEDC 引脚。

如果分离成功,则此函数返回 true。如果返回 false,则发生错误,并且 pin 未分离。

ledcChangeFrequency

此功能用于设置 LEDC 引脚的频率。

uint32_t ledcChangeFrequency(uint8_t pin, uint32_t freq, uint8_t resolution);
  • pin 选择 LEDC 引脚。
  • freq 选择 PWM 的频率。
  • 分辨率 选择 LEDC 通道的分辨率。
    • 范围为 1-14 位(ESP32 为 1-20 位)。

此函数将返回为 LEDC 通道配置的频率。如果返回 0,则发生错误,并且未设置 LEDC 通道频率。

ledcOutputInvert

此功能用于设置 LEDC 引脚的反相输出。

bool ledcOutputInvert(uint8_t pin, bool out_invert);
  • pin 选择 LEDC 引脚。
  • out_invert select ,如果输出应该反转(true = 反转输出)。

如果设置反转输出成功,则此函数返回 true。如果返回 false,则发生错误并且未设置反相输出。

ledcFade  ledc 淡化

此功能用于设置和启动 LEDC 引脚的淡入淡出。

bool ledcFade(uint8_t pin, uint32_t start_duty, uint32_t target_duty, int max_fade_time_ms);
  • pin 选择 LEDC 引脚。
  • start_duty 选择淡化的起始职责。
  • target_duty 选择淡入淡出的目标值。
  • max_fade_time_ms 选择淡化的最长时间。

如果配置成功,此函数将返回 true。如果返回 false,则发生错误,并且未配置/启动 LEDC 淡入淡出。

ledcFadeWithInterrupt

此功能用于设置和启动带中断的 LEDC 引脚的淡入淡出。

bool ledcFadeWithInterrupt(uint8_t pin, uint32_t start_duty, uint32_t target_duty, int max_fade_time_ms, void (*userFunc)(void));
  • pin 选择 LEDC 引脚。
  • start_duty 选择淡化的起始职责。
  • target_duty 选择淡入淡出的目标值。
  • max_fade_time_ms 选择淡化的最长时间。
  • userFunc 函数。

如果配置成功,此函数将返回 true,并淡出启动。如果返回 false,则发生错误,并且未配置/启动 LEDC 淡入淡出。

ledcFadeWithInterruptArg

此函数用于使用参数设置和启动带中断的 LEDC 引脚的淡入淡出。

bool ledcFadeWithInterruptArg(uint8_t pin, uint32_t start_duty, uint32_t target_duty, int max_fade_time_ms, void (*userFunc)(void*), void * arg);
  • pin 选择 LEDC 引脚。
  • start_duty 选择淡化的起始职责。
  • target_duty 选择淡入淡出的目标值。
  • max_fade_time_ms 选择淡化的最长时间。
  • userFunc 函数。
  • arg 指针指向 interrupt 参数。

如果配置成功,此函数将返回 true,并淡出启动。如果返回 false,则发生错误,并且未配置/启动 LEDC 淡入淡出。

analogWrite

此函数用于在引脚上写入模拟值 (PWM 波形)。它与 Arduinos analogWrite 功能兼容。

void analogWrite(uint8_t pin, int value);
  • pin 选择 GPIO 引脚。
  • value 选择 PWM 的占空比。* 范围从 0(始终关闭)到 255(始终打开)。

analogWriteResolution

此功能用于设置所选 analogWrite 引脚的分辨率。

void analogWriteResolution(uint8_t pin, uint8_t resolution);
  • pin 选择 GPIO 引脚。
  • resolution 为模拟通道选择分辨率。

analogWriteFrequency (模拟写入频率)

此功能用于设置所选 analogWrite 引脚的频率。

void analogWriteFrequency(uint8_t pin, uint32_t freq);
  • pin 选择 GPIO 引脚。
  • freq 选择 PWM 的频率。

Example Applications  示例应用

LEDC fade example:  LEDC 淡化示例:

examples/AnalogOut/LEDCFade/LEDCFade.ino

LEDC software fade example:
LEDC 软件淡化示例:

examples/AnalogOut/LEDCSoftwareFade/LEDCSoftwareFade.ino  

LEDC 写入 RGB 示例:

examples/AnalogOut/ledcWrite_RGB/ledcWrite_RGB.ino