跳转到内容

NeoPixelBus 灯

WARNING

NeoPixelBus 无法与 ESP-IDF 配合使用。

对于无时钟灯,您可以使用 Esp32 Rmt Led Strip,对于 SPI LED,请参见 Spi Led Strip

neopixelbus 灯光平台允许您在 ESPHome 中为可单独寻址的灯(如 NeoPixel 或 WS2812)创建 RGB 灯。

它与 Fastled 平台非常相似。 实际上,大多数可寻址灯都可以通过两个灯光平台支持。 区别在于它们使用不同的库:fastled 平台使用 FastLED 库,而此组件内部使用 NeoPixelBus 库。

# 配置示例
light:
- platform: neopixelbus
type: GRB
variant: WS2811
pin: GPIOXX
num_leds: 60
name: "NeoPixel Light"

基本选项:

  • num_leds (必需, 整数): 连接的 LED 数量。

类型选项:

  • type (可选, 字符串): 灯的类型。用于指定它是 RGBW 还是 RGB 灯以及颜色的顺序。默认为 GRB。如果您有带白色通道的灯和/或颜色顺序错误,请更改此选项。

  • variant (必需, 字符串): 灯的芯片组。

    支持以下选项:

    • 800KBPS(通用选项,推荐用于没有明确支持的芯片组)
    • 400KBPS
    • WS2811
    • WS2812
    • WS2812X
    • WS2813
    • SK6812
    • TM1814
    • TM1829
    • TM1914
    • APA106
    • LC8812

    此外,还支持以下双线芯片组(设置 data_pinclock_pin):

    • WS2801
    • DotStar
    • LPD6803
    • LPD8806
    • P9813
  • method (可选, 字符串): 用于传输数据的方法。默认情况下,ESPHome 将尝试使用此芯片组、ESP 平台和给定引脚可用的最佳方法。更多信息请参见方法

  • invert (可选, 布尔值): 反转数据输出,用于 n 型晶体管。默认为 no

引脚选项:

某些芯片组有两个数据引脚需要连接,其他只有一个。如果您有一根线,只需指定 pin,否则同时指定 clock_pindata_pin

  • pin (必需, 引脚): 灯的数据线引脚。

  • clock_pin (*必需, 引脚): 双线灯的时钟线引脚。

  • data_pin (必需, 引脚): 双线灯的数据线引脚。

  • 所有其他选项来自灯光组件

WARNING

在 ESP8266 上,强烈建议将灯带连接到引脚 GPIO3 以减少闪烁。

NeoPixelBus 支持不同的方法将像素数据传输到灯带,具体取决于芯片组、ESP 平台和引脚。

每种方法在稳定性和速度方面都有自己的优缺点。默认情况下,ESPHome 将选择设备上可用的最佳方法。但是,您可以通过手动提供 method 选项来覆盖此设置。

light:
- platform: neopixelbus
# ...
method:
type: esp8266_uart
bus: 0
async: false

使用 type 配置变量选择使用的方法。其他配置设置因方法而异:

  • bit_bang: 最简单的方法,在所有平台上可用。但是,它可能会产生相当多的闪烁,因此不推荐使用。在 ESP8266 上,支持引脚 GPIO0-GPIO15,在 ESP32 上支持引脚 GPIO0-GPIO31。

  • esp8266_dma: ESP8266 的推荐方法。仅在引脚 GPIO3 上可用。

  • esp8266_uart: ESP8266 的替代方法,使用 UART 外设发送数据。在引脚 GPIO1 上可用于总线 0,在引脚 GPIO2 上可用于总线 1。其他选项:

    • bus (可选, 整数): 要使用的 UART 总线。如果为 0,记录器 baud_rate 选项必须设置为 0,并且通过 USB/串口的日志将无法工作。

    • async (可选, 布尔值): 使用异步传输。默认为 false。如果启用,即使使用总线 1,也必须禁用记录器。

  • esp32_i2s: ESP32 的推荐方法,但在 ESP32-C3 或 ESP32-S3 上不可用。在所有输出引脚上可用。其他选项:

    • bus (可选): 要使用的 I2S 总线。ESP32 有总线 0 或 1 可用,但 ESP32-S2 只有总线 0。可选 01dynamic
  • esp32_rmt: ESP32 的替代方法,使用 RMT 外设发送数据。在所有输出引脚上可用。其他选项:

    • channel (可选): 要使用的 RMT 通道。ESP32 有通道 0-7,ESP32-C3 有 0-1,ESP32-S2 有 0-3,ESP32-S3 有 0-3。在 ESP32 上默认为 6,在其他 ESP32 变体上默认为 1。

以下方法仅适用于双线芯片(指定 data_pinclock_pin):

  • spi: 使用硬件 SPI 接口传输数据。在两个 ESP 平台上可用。其他选项:

    • bus (可选, 字符串): 在 ESP32 上可以选择要使用的 SPI 总线。可选 vspihspi
    • speed (可选, 整数): 发送数据的频率。默认为 10MHz。可选 40MHz20MHz10MHz5MHz2MHz1MHz500KHz

    在 ESP8266 上,data_pin 只能使用 GPIO13,clock_pin 只能使用 GPIO14。

出于历史原因,method 键也接受由单个值组成的简写语法。不再推荐使用此方法,但在此记录以供参考。可能的值有:

  • ESP8266_DMA(用于 esp8266_dma
  • ESP8266_UART0(用于总线 0 上的 esp8266_uart
  • ESP8266_UART1(用于总线 1 上的 esp8266_uart
  • ESP8266_ASYNC_UART0(用于总线 0 上启用 async 的 esp8266_uart
  • ESP8266_ASYNC_UART1(用于总线 1 上启用 async 的 esp8266_uart
  • ESP32_I2S_0(用于总线 0 上的 esp32_i2s
  • ESP32_I2S_1(用于总线 1 上的 esp32_i2s
  • BIT_BANG(用于 bit_bang