weaver/led_light

Example of the component espressif/esp_weaver v0.1.0
| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S3 |
| ----------------- | ----- | -------- | -------- | -------- | --------- | -------- | -------- |

# LED 灯示例

[English](README.md)

本示例演示如何使用 ESP Weaver 本地控制协议构建智能灯设备,实现通过 Home Assistant 进行本地网络发现和控制。

## 功能

* 电源开/关控制
* 亮度调节 (0-100%)
* HSV (色相、饱和度、明度) 颜色控制 (色相: 0-360°, 饱和度: 0-100%)

## 硬件

* 带有 ESP32/ESP32-C2/ESP32-C3/ESP32-C5/ESP32-C6/ESP32-C61/ESP32-S3 SoC 的开发板
* RGB LED(WS2812 或 3 引脚 RGB 模块)
* USB 数据线用于供电和编程
* WiFi 路由器用于网络连接
* 按钮使用开发板上的 BOOT 按钮

> 💡 LED 类型和 GPIO 配置可以通过 `idf.py menuconfig` → Example Configuration 进行更改。

## 如何使用示例

在项目配置和编译之前,请确保使用 `idf.py set-target <chip_name>` 设置正确的芯片目标。

### 配置项目

打开项目配置菜单:

```bash
idf.py menuconfig
```

在 `Example Connection Configuration` 菜单中:
* 设置 Wi-Fi SSID
* 设置 Wi-Fi 密码

在 `ESP Weaver` 菜单中(可选):
* 设置安全版本(SEC0 或 SEC1)

### 编译和烧录

编译项目并烧录到开发板,然后运行监视工具查看串口输出:

```bash
idf.py -p PORT flash monitor
```

(要退出串口监视器,请输入 ``Ctrl-]``。)

请参阅[快速入门指南](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/get-started/index.html)了解配置和使用 ESP-IDF 构建项目的完整步骤。

### 获取 PoP 码

设备启动后,串口日志中会显示 Local Control PoP 码:

```
I (10592) esp_weaver_local_ctrl: No PoP in NVS. Generating a new one.
I (10592) esp_weaver_local_ctrl: PoP for local control: 8f820513
```

PoP 会自动随机生成并持久化到 NVS,后续重启将显示 `PoP read from NVS`,PoP 值保持不变。在 Home Assistant 的 ESP-Weaver 集成中添加设备时需要输入此 PoP 码。

### 将设备添加到 Home Assistant

1. 在 Home Assistant 中安装 [ESP-Weaver](https://github.com/espressif/esp_weaver) 集成
2. 设备连接 WiFi 后会被自动发现
3. 输入设备的 PoP 码完成配对
4. 设备实体(电源、亮度、颜色)将出现在 Home Assistant 中

## 示例输出

程序启动后,您将看到以下日志:

```
I (10502) esp_netif_handlers: example_netif_sta ip: 192.168.30.11, mask: 255.255.255.0, gw: 192.168.30.1
I (10502) example_connect: Got IPv4 event: Interface "example_netif_sta" address: 192.168.30.11
I (10532) example_connect: Got IPv6 event: Interface "example_netif_sta" address: fe80:0000:0000:0000:6255:f9ff:fef9:19ec, type: ESP_IP6_ADDR_IS_LINK_LOCAL
I (10532) example_common: Connected to example_netif_sta
I (10532) example_common: - IPv4 address: 192.168.30.11,
I (10542) example_common: - IPv6 address: fe80:0000:0000:0000:6255:f9ff:fef9:19ec, type: ESP_IP6_ADDR_IS_LINK_LOCAL
I (10552) esp_weaver: Weaver initialized: ESP Weaver Device (Lightbulb), node_id: 6055F9F919EC
I (10562) app_main: Node ID: 6055F9F919EC
I (10562) esp_weaver: Device created: Light (esp.device.lightbulb)
I (10572) esp_weaver: Device added to node: Light
I (10572) esp_weaver_local_ctrl: Starting local control with HTTP transport and security version: 1
I (10582) mdns_mem: mDNS task will be created from internal RAM
I (10592) esp_weaver_local_ctrl: No PoP in NVS. Generating a new one.
I (10592) esp_weaver_local_ctrl: PoP for local control: 8f820513
I (10602) esp_weaver_local_ctrl: Local control started on port 8080, node_id: 6055F9F919EC
I (10612) app_main: Local control started successfully
```

> 💡 **Node ID**:默认由 MAC 地址自动生成,也可通过 `esp_weaver_config_t.node_id` 字段自定义。
>
> 💡 **PoP (Proof of Possession)**:SEC1 模式下,PoP 会自动随机生成并持久化到 NVS。首次启动显示 `No PoP in NVS. Generating a new one.`,后续重启显示 `PoP read from NVS`,PoP 值保持不变。也可通过 `esp_weaver_local_ctrl_set_pop()` 在启动前手动设置。
>
> 💡 安全模式 (SEC0/SEC1) 可通过 `idf.py menuconfig` → ESP Weaver 配置。

### 控制日志

通过本地控制控制灯时,设备串口输出将显示如下日志:

```
I (37132) app_light: Light received 1 params in write
I (37132) app_light: Light.Power = false

I (38062) app_light: Light received 1 params in write
I (38062) app_light: Light.Power = true

I (40532) app_light: Light received 1 params in write
I (40532) app_light: Light.Brightness = 63

I (42272) app_light: Light received 1 params in write
I (42272) app_light: Light.Hue = 141

I (42342) app_light: Light received 1 params in write
I (42342) app_light: Light.Saturation = 38
```

## 故障排除

* **WiFi 连接失败**:检查 `menuconfig` 中的 WiFi 凭据,确保设备在 WiFi 范围内
* **设备未被发现**:确保 Home Assistant 和 ESP 设备在同一局域网内,且已安装 [ESP-Weaver](https://github.com/espressif/esp_weaver) 集成
* **PoP 码被拒绝**:验证 PoP 码是否与串口日志中显示的一致

如有任何技术问题,请在 GitHub 上提交 [issue](https://github.com/espressif/esp-iot-solution/issues)。

## 技术参考

* [ESP Weaver 组件](../../../components/esp_weaver/README_CN.md)
* [ESP-Weaver Home Assistant 集成](https://github.com/espressif/esp_weaver)
* [ESP-IDF 编程指南](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/index.html)
* [esp_local_ctrl 文档](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/protocols/esp_local_ctrl.html)

To create a project from this example, run:

idf.py create-project-from-example "espressif/esp_weaver=0.1.0:weaver/led_light"

or download archive (~13.01 KB)