我正在研究一个项目,在我的楼梯的每个步骤上使用带有WS2812B LED的ESP32。我在Docker中选择了在船坞下运行的eSphome运行,以使用PIR传感器运行序列。该项目的总量具有796个LED,分为14个分区(可变长度)。
我现在工作了好几天,以摆脱我所经历的问题,但不能让我的头绕过它。基本上,创建的YAML文件具有快速集成功能。相关代码块:
灯: - 平台:Fastled_lyless芯片组:WS2812B RGB_ORDER:GRB内部:TRUE PIN:GPIO4 NUM_LEDS:796名称:“楼梯”ID:楼梯
和
# step1: 52个LED - LED 0到LED 51 - platform: partition name: "step1" id: step1 internal: true segments: - id: staircase from: 1 to: 50
和
#从下到上运行灯- id: light - downup then: - light。Turn_on: id: step1 transition_length: !返回id(亮度);返回id(红色);返回id(绿色);返回id(Blue);——光。turn_on: id:步骤2…等,
跳过其他代码,因为它没有贡献问题。
首先,我确实经历了许多其他主题中描述的经常认可的闪烁。当使用“日志”功能和通过API连接到HA时,这些故障增加。没有,闪烁相当有限。原因在于我看到的中断句柄中。
为了解决这个问题,我尝试改用NeoPixelBus:
灯: - 平台:Neopixelbus类型:GRB Variant:WS2812X方法:ESP32_I2S_1引脚:GPIO4 NUM_LEDS:796名称:“楼梯”ID:楼梯
这对于有限数量的LED来说是完美的,但是,当超过350个LED被使用时,我很清楚NeoPixelBus是否与分区相结合。
为了解决这些问题,我做了无数的尝试。
玩不同的NeoPixelBus和FastLed库(当然不是同时):
platformio_options:
lib_deps:
- neopixelbus@2.6.0(顺便说一下,目前标准的分布2.5.7根本不起作用)
( - Asynctcp)
( - fitsled@3.4.0)
他们都没有解决这个问题。
我看到周围的最终建议正在使用中断处理,例如包括上面的一个之一# include“fitebled.h”在fastled_light.h:
#定义fastled_interrupt_retry_count.
#定义FASTLED_ALLOW_INTERRUPTS 0
不幸的是,要做到这一点并不容易,因为后续的库(在本例中是fastled_light.h)每次在编译时都会被覆盖,而源库是ESPHOME docker容器外的某个地方。
所以现在在解释后,我有一些问题是有人可以回答:
我更喜欢NeopixelBus,因为它通过DMA或其他非中断的方法处理到LED的输出,这是根解决方案。是否有可能以上述方式在ESP32与eSphome中完美地解决了〜800 LED?如何?
如果有标签是左侧的选项(其自身函数,而且使用毛刺),我如何通过上述内容的列入#定义对于fastquick中断,我不知道如何在HA ESPhome容器之外更改源库。
欢迎任何其他解决方案,如果您需要其他信息,请按照我在这里脱离创造力的短语......