dali_basic

Example of the component espressif/dali v1.1.0
# DALI LED灯具控制示例应用

本示例演示了如何使用 `dali` 组件控制LED灯具进行亮度调节、色彩控制、状态查询及103和303传感器的设备的控制与使用。

## 主要功能

- 初始化 DALI 驱动(RX/TX GPIO;RX/TX INVERT)
- Commission:为 Part 102 控制设备和 Part 103 输入设备分配短地址
- 自动识别:扫描总线并按设备类型区分 DT6(调光)和 DT8(调色)灯具
- 直接弧功率控制(DAPC): 对所有灯具执行 OFF -> 25% -> 50% -> 100%
- 间接命令示范:`RECALL_MAX_LEVEL`
- 查询命令示范:`QUERY_STATUS`、`QUERY_ACTUAL_LEVEL`、`QUERY_DEVICE_TYPE`、`QUERY_COLOR_CAPABILITIES`
- Part 103 传感器演示:检测到有人时触发灯具同时闪烁
  - DT6 灯具:同时亮灭闪烁
  - DT8 灯具:红蓝交替闪烁

## 硬件连接

1. ESP32-C6(或任意带 RMT 外设的 ESP32)

```                         Part 103 传感器
ESP32 RX ──┐                      │
           ├── TTL转DALI ──┬── DALI 总线 ── DALI驱动器 ── LED灯
ESP32 TX ──┘               │
                  DALI 总线电源 (16 V) 
```

2. 硬件注意事项:
   - DALI 电源模块:DALI总线高电平为16V,低电平为0V,因此必须使用专用DALI总线电源
   - DALI 驱动器:需要一个DALI驱动,实现灯具与DALI总线的通信
   - DALI 收发器:需要一个TTL转DALI模块,实现ESP32与DALI总线的通信,并将ESP32与DALI总线隔离
   - Part 103 传感器(可选):本示例使用 DLS-203-P 传感器用于示例6演示。只需要将DLS-203-P挂载到DALI总线上,并且直接通过DALI总线取电,不需要单独电源供电。

## 配置步骤

1. 进入例程目录:

```bash
cd ./esp-iot-solution/examples/lighting/dali_basic
```

2. 修改 GPIO 引脚(根据实际硬件连接):

```c
#define DALI_RX_GPIO    5
#define DALI_TX_GPIO    6
```

3. 配置信号极性(如果 TTL 转 DALI 模块内部有反相逻辑,需启用 `invert_tx/rx`):

```c
dali_master_config_t cfg = {
    .rx_gpio   = DALI_RX_GPIO,
    .tx_gpio   = DALI_TX_GPIO,
    .invert_tx = true,
    .invert_rx = true,
};
```

4. 通过 menuconfig 启用所需的 DALI 功能(请根据dali设备选择所需要的协议,本示例使用 Part 102/103/209/303):

```bash
idf.py menuconfig
# → Component config → DALI Component Configuration
#   启用:Part 102、Part 103、Part 209、Part 303/304
```

5. 运行 `idf.py set-target <your_target>`(例如 `esp32` / `esp32c6`)

6. 编译并烧写:

```bash
idf.py -p <PORT> build flash monitor
```

## 注意事项

- DALI 总线协议对定时要求严格,建议使用专用 DALI 转换芯片和驱动。
- 如果TTL转DALI模块内部是反相的,需要配置引脚极性。
- DALI 配置命令 `STORE_ACTUAL_LEVEL` 等需要发送两次的命令必须在 100ms 内发送两次,否则无效。

## 示例输出结果

程序启动后按顺序执行:

1. Commission Part 102 和 Part 103 设备
2. 扫描地址并按设备类型识别 DT6 / DT8
3. 对所有灯具执行 DAPC 调光序列
4. 在第一个发现的灯具上执行间接命令
5. 查询所有发现的灯具和传感器
6. 等待占用信号并触发同时闪烁

示例日志:

```log
I (30628) dali_example: --- Part 2: Scan & identify addresses ---
I (30730) dali_example:     addr  0 -> DT8 RGB lamp  (color_caps=0xE0 XY:N Tc:Y PrimaryN:Y RGBWAF:Y)
I (30862) dali_example:     addr  1 -> lamp (type=6, status=0x00)
I (30994) dali_example:     addr  2 -> lamp (type=6, status=0x02)
I (37483) dali_example:   Identified: 4 DT6 lamp(s), DT8_ADDR=0
...
I (76346) dali_example:   Occupied! Triggering simultaneous DT6 blink and DT8 Red/Blue flash.
I (76580) dali_example:   [1/6] DT6 ON + DT8 Red
I (77255) dali_example:   [1/6] DT6 OFF + DT8 Blue
...
```

To create a project from this example, run:

idf.py create-project-from-example "espressif/dali=1.1.0:dali_basic"

or download archive (~9.23 KB)