照明方案介绍
Light 方案综述和优势
乐鑫照明方案以其丰富性和成熟性而著称。我们的方案支持多种常见的灯相关外设,包括 LEDC、SPI、I2C、MCPWM 等,为您的照明需求提供了广泛的选择。结合乐鑫的成熟 Wi-Fi 和 BLE 等无线协议以及云适配技术,您可以轻松实现远程控制功能,随时随地管理您的照明系统。
不仅如此,乐鑫还实现了 AI 语音识别技术,使您可以通过语音控制灯光。我们的音频算法使音乐律动灯成为可能,而颜色识别和图像律动算法则为您提供了多种前沿创新方案。这些创新技术将为您的照明系统带来更多可能性,使其更加智能、丰富和具有吸引力。以下是乐鑫照明方案的优势:
零代码的照明方案: ESP ZeroCode 方案 无需担心固件、手机 APP、云连接、认证以及生产等复杂环节,直接构建包含照明设备在内的可兼容 Matter 的智能家居设备
丰富的软件参考: 提供全面的灯相关的软件开发资料,包括详尽的指导文档和示例
Light 常见应用场景
乐鑫照明方案广泛应用于各个领域,不同的领域使用的灯的类别也有区别,总结如下:
ESP32 |
ESP32-S3 |
ESP32-C2 |
ESP32-C3 |
ESP32-C6 |
|
---|---|---|---|---|---|
通用照明 |
|||||
球泡灯/台灯 |
LEDC/I2C |
LEDC/I2C |
LEDC/I2C |
LEDC/I2C |
LEDC/I2C |
可调色温灯带 |
SPI |
SPI/RMT |
SPI |
SPI/RMT |
SPI/RMT |
射灯/筒灯/烛灯/吸顶灯 |
LEDC |
LEDC |
LEDC |
LEDC |
LEDC |
氛围照明 |
|||||
炫彩灯带/灯串 |
SPI |
SPI/RMT |
SPI |
SPI/RMT |
SPI/RMT |
铜线灯 |
SPI |
SPI |
SPI |
SPI |
SPI |
香薰灯/拼接灯 |
SPI |
SPI/RMT |
SPI |
SPI |
SPI/RMT |
其他配件 |
|||||
可控硅调光器 |
MCPWM |
MCPWM |
x |
x |
MCPWM/ETM+模拟比较器 |
其他功能 |
|||||
音乐律动 |
√ |
√ |
√ |
√ |
√ |
ESP-NOW 本地控制 |
√ |
√ |
√ |
√ |
√ |
CSI 人体检测功能 |
√ |
√ |
√ |
√ |
√ |
红外遥控 |
x |
√ |
x |
√ |
√ |
Light 参考资料
此外,目前我们已经有一些公开的灯 github 软件库、视频、模组资料,如下:
软件参考
模组/开发板资料及选项参考
Light 调光方案汇总
PWM 调光方案
PWM 调光是一种通过调节脉冲宽度来控制 LED 亮度的技术,核心在于通过改变电流脉冲的占空比(即高电平时间在整个周期时间中的比例)来调节。当占空比较高时,LED 获得的电流时间长,亮度高;反之,占空比低时,LED 获得的电流时间短,亮度低。所有 ESP 芯片均支持使用硬件 LEDC 驱动 / MCPWM 驱动输出 PWM,推荐优先使用 LEDC 驱动实现,LEDC 驱动支持硬件渐变,频率占空比均可配置,分辨率最高为 20 bit。
备注
是否支持输出互补的波形来调节色温与亮度?
支持,可以使用 LEDC 的 hpoint 功能进行移相。
I2C 调光方案
I2C 调光 通过 I2C 总线发送控制命令到调光芯片,通过改变调光芯片的输出电流,调节 LED 的亮度。I2C 总线由两条线构成:数据线 (SDA) 和时钟线 (SCL)。所有 ESP 芯片均支持使用硬件 I2C 调光芯片,目前在 SM2135EH,SM2235EGH,SM2335EGH,BP5758,BP5758D,BP5768,BP1658CJ,KP18058 等常见调光芯片上在完成验证,均可完美驱动。
备注
I2C 驱动上拉电阻选择多少?
通常选择在 2.2 k-4.7 k 之间,可实际测量信号质量来确定。
单线调光方案
单线调光方案是一种通过单根通信线控制 LED 亮度的方法,核心是通过特定的通信协议发送控制信号来调节 LED 的亮度。目前有 2 种类别:
WS2812 和 SK6812 这类使用单独数据总线,通过特定的时序控制来传输颜色数据。
类似电力载波的方式,复用 VCC 并在其上调制通信数据,对于灯珠来说只需 2 根线即可。
此类方案在 ESP 芯片上可使用 RMT 外设或 SPI 外设 实现,推荐优先使用 SPI 实现灯珠通信控制,RMT 多用于接受红外遥控数据。
备注
SPI 实现原理是什么?
以 WS2812 为例,其有 RGB 三个通道数据,每个通道是 1 字节,默认配置 SPI 时钟为 2.4 MHz,单 bit 发送,那么发送一个 bit 就是一个时钟约 400 ns,通常使用 3 bit 来表示 0 码和 1 码,即 0 码用 2 bit 高 + 1 bit 低构成,1 码用 1 bit 高 + 2 bit 低,这样 1 字节原始数据的每个 bit 都需要被拓展为 3 个 bit 来表示 0 与 1,这样 1 字节原始数据要拓展为 3 字节 SPI 数据。如果我们发送橙色,那转化后为:
255 (0b11111111) -> 11011011 01101101 10110110 -> 0xDB 0x6D 0xB6 127 (0b01111111) -> 10011011 01101101 10110110 -> 0x9B 0x6D 0xB6 0 (0b00000000) -> 10010010 01001001 00100100 -> 0x92 0x49 0x24
SPI 实际发送的数据为
{0xDB 0x6D 0xB6}
,{0x9B 0x6D 0xB6}
,{0x92 0x49 0x24 }
,不同灯带 RGB 数据顺序可能不同,需要按实际进行调整。SPI 是否支持接多条灯带?
支持,更改 SPI 传输模式为 4 bit 就可支持 4 条灯带,需要注意的是原始数据转为 SPI 数据时也需要更改,此时 1 个时钟将发送 4 bit 的数据。
能够提供 SPI 驱动灯带驱动设计思路?
如果 SPI 时钟 是 2.4 MHz,每个时钟是 0.4167 us,8 bit 模式发送的话,1 个时钟发送 1 个字节,10 KB 也就 10000 个时钟,4160 us 发送完。使用 SPI 的 STC 模式,1 个
spi_multi_transaction_t
里面组 10 个 1 KB 的刷灯数据。SPI 队列长度设置为 1 ,malloc 2 个 10 KB 的 buf,每次组好数据就用spi_device_queue_multi_trans
发送,然后另一个 buf 填充数据,填充完成后,用spi_device_get_multi_trans_result
灯带拿上一个结果,返回后成功再次组数据,2 个 buf 循环填充数据。
可控硅调光方案
可控硅调光是一种通过调整电流的相位来控制灯具亮度的调光技术,广泛应用于白炽灯、卤素灯和一些兼容可控硅调光的 LED 灯具。核心是通过调整可控硅(Triac)导通的相位角,改变电流在每个交流周期内的导通时间,来达到调节灯具的功率输出和亮度。可控硅调光主要有两种相位切割方式:
前沿切割:在交流电波形的前半部分进行切割,Triac 在每个交流周期的前沿开始导通。适用于白炽灯和一些兼容的 LED 灯具。
后沿切割:在交流电波形的后半部分进行切割,Triac 在每个交流周期的后沿开始导通。适用于一些兼容的 LED 灯具和电子变压器。
软件设计遵循下面 3 步:
相位检测:检测交流电的过零点,以确定调光信号的时序。可以通过光耦和检测电路实现过零检测。
相位控制:根据用户设定的亮度,计算相应的导通延迟时间,并控制 Triac 在适当的时间导通。
触发控制:在检测到过零点后,根据设定的延迟时间,触发 Triac 导通,一般使用一个 50 us 的脉冲触发导通。
在 ESP 芯片中通常使用 MCPWM 外设 或 ETM + 模拟比较器 外设实现上述功能,推荐使用 MCPWM 外设实现,实现原理为:在同一个定时器上启用 2 个比较器 A B,并操作同一 IO,比较器 A 与 B 在定时器计数器为 0 时输出低电平,设置一个比较值 x,x 即为延迟的导通时间,同时设置比较器 A 在定时器为 x 时输出高电平,比较器 B 在定时器为 x + 50 时输出低电平,使用 MCPWM 的同步功能捕获过零点,同步时将自动重置定时器,这样就完成了一次切相控制,过零点捕获的精度可控制在小于 1 us。
备注
ESP32C2 等不存在 MCPWM 外设的芯片上能否实现?
可以用 gptimer + IO 模拟的方案实现,所有控制函数都需放入 ram 中,不过由于芯片及软件设计的因素,过零点捕获的精度依旧会被系统中断影响,特别启用 Wi-Fi 与 蓝牙后,通常在 4.7 us ~ 20 us 浮动,十分不稳定,这将导致调光器兼容性较差,在某些兼容调光器的 LED 灯具会出现间歇性闪烁。如评估后可接受,可使用上述方案。
Light 附加功能组件
音乐律动
音乐律动是一种照明控制技术,通过实时分析音乐信号,使灯光与音乐节奏、旋律和音效同步变化。ESP32 平台所有芯片均支持本地的音乐律动,通过 ADC 获取音频数据,再经过 FFT 或响度计算后得到流水,跳跃,渐变等灯效数据,通过驱动刷新到灯泡,进行显示。
ESP-NOW 本地控制功能
ESP-NOW 是一种由乐鑫定义的无连接 Wi-Fi 通信协议。在 ESP-NOW 中,应用程序数据被封装在各个供应商的动作帧中,然后在无连接的情况下,从一个 Wi-Fi 设备传输到另一个 Wi-Fi 设备。在智能照明领域该技术常被作为灯具的随意贴开关。
CSI 人体检测功能
信道状态信息(CSI)是描述无线信道特性的重要参数,包括信号幅度、相位、信号时延等指标。在 Wi-Fi 通信中,CSI 用于衡量无线网络信道的状态。CSI 对环境变化非常敏感,不仅可以感知人或动物的行走、奔跑等大幅度动作,还可以感知静态环境中的呼吸、咀嚼等细微动作,在智能球泡灯的领域下,可以将 CSI 作为人体感知传感器,实现人来灯开,人走灯灭。
红外遥控
红外遥控是一种利用红外光信号传输控制指令的技术,广泛应用于电视、空调、音响、灯具等家用电器的遥控操作。红外遥控系统通常由红外发射器(遥控器)和红外接收器(被控设备)组成,红外发射器上调制红外光信号,将控制指令以脉冲编码的形式发送出去。红外接收器接收到信号后,解调并解码出控制指令,进而执行相应的操作。在照明领域该技术被作为灯带、筒灯、射灯、氛围灯的等本地红外遥控器使用。
Light 球泡灯驱动组件
球泡灯组件将球泡灯中常用的多款调光方案做了封装,并增加了动效,校准,状态记忆,功率限制等众多常见功能,便于开发者集成到自己的应用程序中,目前所有 ESP32 系列芯片都已经完成支持。
已支持的调光方案如下
PWM 方案
RGB + C/W
RGB + CCT/Brightnes
I2C 调光芯片方案
SM2135EH
SM2X35EGH (SM2235EGH/SM2335EGH)
BP57x8D (BP5758/BP5758D/BP5768)
BP1658CJ
KP18058
单总线
WS2812
已支持的灯板布局如下
单路:冷或暖色温灯珠,可以完成单色温下的亮度控制。
双路:冷暖灯珠,可以完成色温与亮度的控制。
三路:红色、绿色、蓝色灯珠,可以完成任意颜色控制。
四路:红色、绿色、蓝色、冷色或暖色灯珠,可以完成颜色与单一色温下的亮度控制,如果配置了混色表格:则支持使用这些灯珠混出不同色温,实现色温控制。
五路:红色、绿色、蓝色、冷色、暖色灯珠,可以完成颜色与色温下的亮度控制。
渐变原理
球泡灯组件中的渐变是用软件实现的,每个通道记录了当前值,最终值,步长,步数,循环次数,最小值,后两个参数用于动效。当使用 API 设置颜色时,会依次更改最终值,步长,步数,并启用渐变时定时器,定时器每间隔 12 ms 触发一次回调,回调函数中会检查每个通道的步数,只要存在未执行完的步数,就会根据步长加减当前值,并更新到底层驱动中。当所有通道步数为 0 时,便代表渐变完成,此时将停止定时器。
低功耗实现
球泡灯如果要通过 T20 等功耗认证,优化灯板电源后,软件上需要做一些低功耗配置,除了应用低功耗模式使用指南中提到的配置外,驱动部分也需要进行一些逻辑,球泡灯组件中已经在 PWM 方案与 I2C 2种调光驱动方案增加了相关内容,具体逻辑为开关灯时,I2C 方案调用调光芯片自身的低功耗指令,退出或进入低功耗,PWM 方案中,ESP32 由于使用 APB 时钟源,需要通过电源锁管理,否则会出现灯光闪烁,开灯时拿电源锁,禁用动态调频,关灯时释放,其他芯片采用 XTAL 时钟源,无需采取任何措施。
异常重启后保持颜色
球泡灯驱动组件中实现如下:PWM 方案使用 XTAL 时钟源即可,软件重启不影响 LEDC 驱动输出;I2C 方案需要做软件逻辑,每次操作灯成功后需要记录颜色到 flash 中,异常重启后直接使用 flash 中保存的颜色点灯。
上电亮灯速度
使用球泡灯驱动组件点灯,从灯板供电到灯亮通常在 150 ~ 300 ms 之间,主要耗时在 ROM 与 bootloader 阶段的 log 打印与芯片安全相关( Flash 加密,安全启动等)的各种校验。如果未开启加密同时关掉所有启动阶段的 log,亮灯时间将小于 100 ms。