照明方案介绍

[English]

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。

备注

  1. 是否支持输出互补的波形来调节色温与亮度?

    • 支持,可以使用 LEDC 的 hpoint 功能进行移相。

I2C 调光方案

I2C 调光 通过 I2C 总线发送控制命令到调光芯片,通过改变调光芯片的输出电流,调节 LED 的亮度。I2C 总线由两条线构成:数据线 (SDA) 和时钟线 (SCL)。所有 ESP 芯片均支持使用硬件 I2C 调光芯片,目前在 SM2135EH,SM2235EGH,SM2335EGH,BP5758,BP5758D,BP5768,BP1658CJ,KP18058 等常见调光芯片上在完成验证,均可完美驱动。

备注

  1. I2C 驱动上拉电阻选择多少?

    • 通常选择在 2.2 k-4.7 k 之间,可实际测量信号质量来确定。

单线调光方案

单线调光方案是一种通过单根通信线控制 LED 亮度的方法,核心是通过特定的通信协议发送控制信号来调节 LED 的亮度。目前有 2 种类别:

  • WS2812 和 SK6812 这类使用单独数据总线,通过特定的时序控制来传输颜色数据。

  • 类似电力载波的方式,复用 VCC 并在其上调制通信数据,对于灯珠来说只需 2 根线即可。

此类方案在 ESP 芯片上可使用 RMT 外设SPI 外设 实现,推荐优先使用 SPI 实现灯珠通信控制,RMT 多用于接受红外遥控数据。

备注

  1. 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 数据顺序可能不同,需要按实际进行调整。

  2. SPI 是否支持接多条灯带?

    • 支持,更改 SPI 传输模式为 4 bit 就可支持 4 条灯带,需要注意的是原始数据转为 SPI 数据时也需要更改,此时 1 个时钟将发送 4 bit 的数据。

  3. 能够提供 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 步:

  1. 相位检测:检测交流电的过零点,以确定调光信号的时序。可以通过光耦和检测电路实现过零检测。

  2. 相位控制:根据用户设定的亮度,计算相应的导通延迟时间,并控制 Triac 在适当的时间导通。

  3. 触发控制:在检测到过零点后,根据设定的延迟时间,触发 Triac 导通,一般使用一个 50 us 的脉冲触发导通。

在 ESP 芯片中通常使用 MCPWM 外设ETM + 模拟比较器 外设实现上述功能,推荐使用 MCPWM 外设实现,实现原理为:在同一个定时器上启用 2 个比较器 A B,并操作同一 IO,比较器 A 与 B 在定时器计数器为 0 时输出低电平,设置一个比较值 x,x 即为延迟的导通时间,同时设置比较器 A 在定时器为 x 时输出高电平,比较器 B 在定时器为 x + 50 时输出低电平,使用 MCPWM 的同步功能捕获过零点,同步时将自动重置定时器,这样就完成了一次切相控制,过零点捕获的精度可控制在小于 1 us。

备注

  1. 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。