# ChangeLog ## v0.10.3 - 2024-4-24 ### 功能: #### Bugfix - 解决了子节点频繁上下电导致根节点内存泄漏的问题 ([79553a6](https://github.com/espressif/esp-mesh-lite/commit/79553a67a65b5644cf1c84800f1e619cea089ab7)) ## v0.10.2 - 2024-4-8 ### 功能: #### Mesh - 添加状态失败事件以监控某些异常状态 ([4b10eee](https://github.com/espressif/esp-mesh-lite/commit/4b10eee7bd76598f8093913672374ba97f9fd68b)) - 控制一些调试日志的输出 ([4b10eee](https://github.com/espressif/esp-mesh-lite/commit/4b10eee7bd76598f8093913672374ba97f9fd68b)) - 支持设置 SoftAP IP 网段 ([4b10eee](https://github.com/espressif/esp-mesh-lite/commit/4b10eee7bd76598f8093913672374ba97f9fd68b)) - 支持通过 mesh lite lan ota 接口传输自定义文件 ([bffbdf9](https://github.com/espressif/esp-mesh-lite/commit/bffbdf9297163ffd97b1996bde9c01c5247f5716)) - 设置 mesh id 时如果与当前 mesh id 不一致,则断开重新寻找新的父节点 ([c262be5](https://github.com/espressif/esp-mesh-lite/commit/c262be5f8dc2acfd75e89959e3d493c18e3069d2)) - 限制最高层级为 15 级 ([c262be5](https://github.com/espressif/esp-mesh-lite/commit/c262be5f8dc2acfd75e89959e3d493c18e3069d2)) - 临时解决方案: 有时连接 AP 时没有 Wi-Fi 事件会导致 mesh-lite 不起作用 ([576fda94](https://github.com/espressif/esp-mesh-lite/commit/576fda945366f43656edc328654e89b09b5bf9a3)) - 支持注册 mesh lite scan cb 接口 ([576fda94](https://github.com/espressif/esp-mesh-lite/commit/576fda945366f43656edc328654e89b09b5bf9a3)) - 支持设置在连接路由器时最小 rssi 阈值 ([262920b](https://github.com/espressif/esp-mesh-lite/commit/262920bc614cb4e089a01447af1ffa020e9c113a)) - 支持自定义设置融合时信号强度阈值 ([ac502e19](https://github.com/espressif/esp-mesh-lite/commit/ac502e19347fb6e33a8e2462b102725505599206)) - 支持路由器模式下,信号强度低于阈值的根节点发生融合 ([ac502e19](https://github.com/espressif/esp-mesh-lite/commit/ac502e19347fb6e33a8e2462b102725505599206)) - 支持自定义设置设备选择父节点时的最小信号强度阈值 ([ac502e19](https://github.com/espressif/esp-mesh-lite/commit/ac502e19347fb6e33a8e2462b102725505599206)) #### Bugfix - 解决某些特殊场景下根节点设备的融合失败问题 ([4b10eee](https://github.com/espressif/esp-mesh-lite/commit/4b10eee7bd76598f8093913672374ba97f9fd68b)) - 修复了 esp_mesh_lite_get_ssid_by_mac_cb_t 不起作用的问题 ([262920b](https://github.com/espressif/esp-mesh-lite/commit/262920bc614cb4e089a01447af1ffa020e9c113a)) - 修复了设备在寻找父节点时选择一个已经到达最高层级的节点 ([ac502e19](https://github.com/espressif/esp-mesh-lite/commit/ac502e19347fb6e33a8e2462b102725505599206)) ## v0.10.1 - 2024-3-5 ### 功能: #### Mesh - 增加 LAN OTA rejected 事件 - 支持设置融合参数 #### Bugfix - 修复当 esp_mesh_lite_try_sending_msg 的 max_retry 为 0 时内存泄漏 - 修复了无法取消设备固定或禁用的设置级别 - 兼容旧版本隐藏 ssid 组网 - 修复设置 allowed level 和 disallowed level 时生效失败 ## v0.10.0 - 2024-1-9 ### 功能: #### Bugfix - 修复用户因意外传入空的 SSID 或者停止 Wi-Fi 导致内部无法扫描且无法恢复的问题 - 修复隐藏 SoftAP ssid 时组网失败 - 修复网络拓扑恢复时层级显示错误的问题 ## v0.9.2 - 2024-1-3 ### 功能: #### Mesh - 支持控制叶子节点 SoftAP 开关状态 - 支持自定义扫描父节点时信号强度阈值 - 支持设置组网模式(Mesh 模式、路由器模式,默认为 Mesh 模式) #### Bugfix - 修复设备 SoftAP SSID 不一致时子节点向根节点通信失败问题 ## v0.9.1 - 2023-12-5 ### 功能: #### Mesh - 支持控制 mesh_lite 内部输出日志颜色 - 支持注册白名单以供组网时调用 #### Bugfix - 修复根节点掉线后组网恢复慢的问题 ## v0.9.0 - 2023-10-31 ### 功能: #### Mesh - 增加 max node number 配置项 - 增加 LAN OTA 进度上报 - 当设置 allowed level 和 disallowed level 时内部会自动检查是否与当前层级冲突,如果冲突则断开 station,重新寻找新的父节点 - 修复叶子节点被其他子节点连接 - 增加融合时对信号强度相同的根节点的处理 #### Bugfix - 修复节点软重启后连接原父节点失败 - 修 no_router 示例提示通讯错误的问题 ## v0.8.0 - 2023-9-19 ### 功能: #### 支持的 ESP-IDF 版本 - 增加对 v5.1 的支持 #### 支持的芯片 - ESP32-C6 ## v0.7.0 - 2023-9-4 ### Enhancements: #### Mesh - 增加 esp_mesh_lite_start API - LAN OTA: LAN OTA 成功后 esp_restart 的调用放到 lib 外部 #### Bugfix - 修复网络异常时的内存泄露 ## v0.6.0 - 2023-8-29 ### Enhancements: #### Mesh - 删除 end_with_mac 字段以适应各种类型的后缀 #### Bugfix - 修复根节点在连接路由器异常时子节点不能正常加入 Mesh 网络 ## v0.5.0 - 2023-8-3 ### Enhancements: #### Mesh - 支持节点不配网自动加入 Mesh 网络 - 优化无路由器的场景 - 适配新的 Nova Home APP,完善群控、组控功能 #### Bugfix - 修复硬件复位造成的环形连接 #### Docs - 更新图片 url ## v0.4.0 - 2023-7-12 ### 功能: #### Mesh - 新增功能:添加了 LAN OTA 升级失败和成功的事件上报。 #### 修复 - 修复当多个根节点相距较远且无法相互发现时,它们将不断地与路由器断开连接并重新连接。 - 修复 LAN OTA 升级过程中,突然停止。 - 修复 LAN OTA 升级失败。 ## v0.3.0 - 2023-6-30 ### 功能: #### Mesh - 为 esp_mesh_lite_wifi_scan_start 添加 wifi_scan_config 参数 - 开放 API 以允许应用层获取路由器信息和根节点 SoftAP IP 地址 - 支持手动指定设备为叶子节点 #### 修复 - 删除 `CONFIG_LWIP_IPV6=n`,解决 rainmaker/led_light 编译不过的问题 - Demo 示例禁用 PMF - 优化 mesh_local_control 示例,解决 socket connect 阻塞 event task 的问题 ## v0.2.0 - 2023-6-5 ### 功能: #### Mesh - 节点层级变动后进行层级检查,避免超过规定的最高层级 #### 支持的芯片 - ESP32-C2 #### 修复 - idf5.x 和 idf4.x 版本的 API 兼容性问题 - 更新文档,修复链接无法正确跳转 - 修复当 MESH_LITE_ENABLE 配置成 n 时组件编译失败 ## v0.1.2 - 2023-3-26 ### 功能: #### 支持的 ESP-IDF 版本 - 增加对 v4.3 的支持 ## v0.1.1 - 2023-3-1 ### 功能: - 适配 iot_bridge(0.*) 组件 ## v0.1.0 - 2023-2-7 这是 mesh-lite 组件的第一个发布版本,更多关于项目的详细说明,请参考 [ESP-MESH-LITE](https://github.com/espressif/esp-mesh-lite/blob/master/components/mesh_lite/User_Guide_CN.md). ### 功能: #### Mesh - 支持 mesh 网络自修复 - 支持即使在没有连接路由器的情况下根节点也可以建立 mesh 网络 - 支持节点在没有配置路由器信息的情况下自动加入 mesh 网络 - 支持只设置节点为根节点 - 支持只设置节点为非根节点 - 支持设置 mesh 网络是否允许加入 - 支持检查加入的设备是否合法 - 支持根节点与子节点通信 - 子节点向父节点发送广播信息 - 子节点向根节点发送消息 - 子节点向父节点发送消息 - 父节点向子节点发送广播信息 - 支持对 mesh 网络间的数据通信进行加密 - 支持 mesh 网络内部 OTA 升级 #### 支持的芯片 - ESP32 - ESP32-C3 - ESP32-S2 - ESP32-S3 #### 支持的 ESP-IDF 版本 - v4.4 - v5.0
- [English Version](https://github.com/espressif/esp-mesh-lite/blob/master/examples/rainmaker/led_light/README.md) | Supported Targets | ESP32 | ESP32-C3 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | # LED Light 示例(Nova Home) 本示例通过使用 [Rainmaker 云平台](https://rainmaker.espressif.com) 来展示 ESP-Mesh-Lite 功能,用户可通过 `Nova Home` APP 来为设备配网并使设备成功连接至 Rainmaker 云端,设备本身基于 Rainmaker 实现自身连接云端的同时,还可以为其他无线设备提供无线上网的能力,多个设备形成 Mesh 组网,极大程度上减轻路由器承载压力,同时扩大了无线通信范围。 ## Get Start ### 1. Apps - [Google PlayStore](https://play.google.com/store/apps/details?id=com.espressif.novahome) - [Apple App Store](https://apps.apple.com/us/app/nova-home/id1563728960) ### 2. 获取 Key 目前设备获取证书的方式有两种: - Self Claiming:配网后设备直接发 http 请求从服务器拉证书,只能在 ESP32-S3 和 ESP32-C3 上应用,由于与 MAC 绑定,每一台设备每次拉取的证书是一样的 - Assisted Claiming:配网时,手机 APP 跟服务器请求证书,随后通过蓝牙发送给设备,不和 MAC 绑定,默认一个账户只有 5 次申请的限制 目前 ESP32-S3 和 ESP32-C3 默认采用 Self-Claiming 的方式获取证书,ESP32 仅能使用 Assisted Claiming 方式获取证书。 >Nova Home 目前 Assisted Claiming 方式不稳定,若使用 ESP32 获取证书建议使用 [ESP Rainmaker](https://github.com/espressif/esp-rainmaker#phone-apps) APP 进行 Claiming ### 3. 编译环境搭建 & SDK 准备 参考 [README](https://github.com/espressif/esp-iot-bridge/blob/master/components/iot_bridge/User_Guide.md#3-set-up-development-environment) ### 4. Mesh-Lite 功能 - 可以在 menuconfig 配置 `Component config → ESP Wi-Fi Mesh Lite` 中选择是否使能 Mesh-Lite 功能,本示例默认使能该功能。 - 若开启 Mesh-Lite 功能,第一个配网的设备会连接至目标路由器并作为 Root 根结点,之后的设备均会连接至根结点设备并作为子节点组成一个 Mesh-Lite 网络,详情请参考 [Mesh-Lite](https://github.com/espressif/esp-mesh-lite/blob/master/components/mesh_lite/User_Guide_CN.md)。 ### 5. 固件编译 & 烧录 ESP-IDF 环境搭建成功后,即可执行以下命令进行固件编译和烧录。 ``` $ cd esp-mesh-lite/examples/rainmaker/led_light $ idf.py set-target esp32c3 $ idf.py build $ idf.py flash ``` ### 6. 操作步骤 #### 6.1 添加根节点 - 打开 Nova Home,APP 自动搜索到待配网设备 <img src="https://raw.githubusercontent.com/espressif/esp-mesh-lite/master/examples/rainmaker/led_light/_static/find_devices.jpg" alt="find_devices" width="25%" div align=center /> - 选择其中某个设备 <img src="https://raw.githubusercontent.com/espressif/esp-mesh-lite/master/examples/rainmaker/led_light/_static/select_root_node.png" alt="select_root_node" width="25%" div align=center /> - 输入配网信息进入配网 <img src="https://raw.githubusercontent.com/espressif/esp-mesh-lite/master/examples/rainmaker/led_light/_static/select_network.jpg" alt="select_network" width="25%" div align=center /> - 配网成功 <img src="https://raw.githubusercontent.com/espressif/esp-mesh-lite/master/examples/rainmaker/led_light/_static/root_done.png" alt="root_done" width="25%" div align=center /> - 配网成功后的设备 <img src="https://raw.githubusercontent.com/espressif/esp-mesh-lite/master/examples/rainmaker/led_light/_static/root_device_of_common.png" alt="root_device_of_common" width="25%" div align=center /> - 配网成功后的设备所属 Mesh 页面(Mesh ID 为 117) <img src="https://raw.githubusercontent.com/espressif/esp-mesh-lite/master/examples/rainmaker/led_light/_static/root_device_of_mesh.png" alt="root_device_of_mesh" width="25%" div align=center /> #### 6.2 添加子节点 - 进入对应 Mesh 页面,点击右上角加号 <img src="https://raw.githubusercontent.com/espressif/esp-mesh-lite/master/examples/rainmaker/led_light/_static/mesh_page.png" alt="mesh_page" width="25%" div align=center /> - 选择要配网的子节电设备 <img src="https://raw.githubusercontent.com/espressif/esp-mesh-lite/master/examples/rainmaker/led_light/_static/select_child_devices.jpg" alt="select_child_devices" width="25%" div align=center /> - 输入配网信息(同为路由器信息)进入配网 <img src="https://raw.githubusercontent.com/espressif/esp-mesh-lite/master/examples/rainmaker/led_light/_static/select_network.jpg" alt="select_network" width="25%" div align=center /> - 配网成功 <img src="https://raw.githubusercontent.com/espressif/esp-mesh-lite/master/examples/rainmaker/led_light/_static/child_done.png" alt="child_done" width="25%" div align=center /> #### 6.3 群控 - 进入 Mesh 页面,点击对应根节点,进入控制页面进行控制 Mesh 组网内部所有设备的灯效 <img src="https://raw.githubusercontent.com/espressif/esp-mesh-lite/master/examples/rainmaker/led_light/_static/root_control.png" alt="root_control" width="25%" div align=center /> #### 6.4 组控 - 进入 Mesh 页面,点击左下角 Group <img src="https://raw.githubusercontent.com/espressif/esp-mesh-lite/master/examples/rainmaker/led_light/_static/click_group.png" alt="click_group" width="25%" div align=center /> - 创建 Mesh Group <img src="https://raw.githubusercontent.com/espressif/esp-mesh-lite/master/examples/rainmaker/led_light/_static/select_device_for_group.png" alt="select_device_for_group" width="25%" div align=center /> - 通过创建的 Group 页面进行控制 <img src="https://raw.githubusercontent.com/espressif/esp-mesh-lite/master/examples/rainmaker/led_light/_static/group_control.png" alt="group_control" width="25%" div align=center /> ### 7. 注意事项 - 目前 Nova Home 仅支持 Wi-Fi Provisioning 配网(BLE),故该方案目前不支持 ESP32-S2 芯片
- [English Version](https://github.com/espressif/esp-mesh-lite/blob/master/examples/mesh_local_control/README.md) | Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | ESP32-C2 | ESP32-C6 | | ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | # Mesh-Lite 局域网控制示例 ## 介绍 本示例将介绍如何基于 Mesh-Lite 实现设备连接远程外部服务器。与 ESP-WIFI-MESH 不同,Mesh-Lite 组网内每个设备均可独立访问外部网络。 本示例实现了 mesh 网络中设备数据传输到 TCP 服务器功能。 **建议使用 esp-idf 4.4 版本进行编译** ## 硬件准备 1. 至少两块 ESP32 开发板 2. 一台支持 2.4G 路由器 ## 工作流程 ESP-Mesh-Lite 是基于 ESP-IDF 的功能和工具开发的。因此,首先必须设置 ESP-IDF 开发环境。您可以参考[设置开发环境](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html)获取详细的步骤。之后,您可以直接在 ESP-Mesh-Lite 中构建示例,类似于在 ESP-IDF 中构建示例。 ### 运行 TCP 服务器 1. 将主机(PC 或手机)连接到路由器。 2. 使用 TCP 测试工具(此工具为任意一个第三方的 TCP 测试软件)来创建 TCP 服务器。 ### 配置设备 输入 `idf.py menuconfig`,在 “Example Configuration” 子菜单下,进行配置: * 路由器信息 * ESP-WIFI-MESH 网络:密码长度要大于 8 位并小于 64 位,设置为空则不加密 * TCP 服务器:主机上运行的 TCP 服务器信息, 包含:IP 地址、端口 <img src="https://raw.githubusercontent.com/espressif/esp-mesh-lite/master/examples/mesh_local_control/device_config.png" alt="device_config" width="80%" div align=center /> ### 编译和烧录 CMake: ```shell idf.py erase_flash flash monitor -p /dev/ttyUSBx ``` ### 运行 Mesh-Lite 设备每隔三秒会给 TCP 服务发送当前设备的信息
- [English Version](https://github.com/espressif/esp-mesh-lite/blob/master/examples/no_router/README.md) # 无路由器示例 ## 介绍 本示例将介绍如何快速组建一个无路由器 ESP-Mesh-Lite 网络,其余的组网方案及详细使用方式参见 [README](https://github.com/espressif/esp-mesh-lite/blob/master/examples/mesh_local_control/README_CN.md),在运行本示例之前请详细阅读 [User Guide](https://github.com/espressif/esp-mesh-lite/blob/master/components/mesh_lite/User_Guide_CN.md)。 ## 配置 运行本示例,您至少需要准备两块开发板,一块配置为根节点,其余为非根节点,本示例默认为非根节点类型。 - 根节点:一个 ESP-Mesh-Lite 网络中有且仅有一个根节点,通过 `MESH_LITE_ID` 和信道来区分不同的 `MESH-LITE` 网络 - 非根节点:包含叶子节点和中间节点,其根据网络情况自动选择父节点 - 叶子节点:叶子节点不会做为中间节点,即不允许有下游链接 你需要通过 `idf.py menuconfig`(CMake),在 `Example Configuration` 子菜单下,配置一个设备为根节点,其余设备为非根节点。 您也可以在 `Component config -> ESP Wi-Fi Mesh Lite` 子菜单下,配置 ESP-Mesh-Lite 的最大层级、`MESH_LITE_ID` 等参数。 <img src="https://raw.githubusercontent.com/espressif/esp-mesh-lite/master/examples/no_router/example_config.png" alt="example_config" width="80%" div align=center /> <img src="https://raw.githubusercontent.com/espressif/esp-mesh-lite/master/examples/no_router/mesh_config.png" alt="mesh_config" width="80%" div align=center /> ## 运行 1. 初始化 Wi-Fi,根据配置启动 ESP-Mesh-Lite; 2. 创建定时器:定时打印 ESP-Mesh-Lite 网络的层级,父节点的信号强度及剩余内存。 ```c I (1386) vendor_ie: Mesh ID: 77 W (1390) vendor_ie: Error Get[4354] W (1394) vendor_ie: Error Get[4354] I (1399) ESP_Mesh_Lite_Comm: msg action add success I (1405) ESP_Mesh_Lite_Comm: Bind Socket 54, port 6364 I (1410) ESP_Mesh_Lite_Comm: Bind Socket 55, port 6363 I (1416) ESP_Mesh_Lite_Comm: Bind Socket 56, port 6366 I (1421) ESP_Mesh_Lite_Comm: Bind Socket 57, port 6365 I (1428) ESP_Mesh_Lite_Comm: msg action add success I (1433) no_router: Child node I (1436) Mesh-Lite: Mesh-Lite connecting I (1442) main_task: Returned from app_main() I (4274) vendor_ie: Mesh-Lite Scan done I (4276) vendor_ie: Find ESP_Bridge_1eb259 I (4276) vendor_ie: RTC store: ssid:ESP_Bridge_1eb259; bssid:58:cf:79:1e:b2:59 crc:3027520052 I (6340) wifi:ap channel adjust o:1,1 n:13,2 I (6340) wifi:new:<13,2>, old:<1,1>, ap:<13,2>, sta:<13,2>, prof:1 I (7031) wifi:state: init -> auth (b0) I (7033) ESP_Mesh_Lite_Comm: Retry to connect to the AP I (7044) wifi:state: auth -> assoc (0) I (7057) wifi:state: assoc -> run (10) I (7071) wifi:connected with ESP_Bridge_1eb259, aid = 1, channel 13, 40D, bssid = 58:cf:79:1e:b2:59 I (7072) wifi:security: WPA2-PSK, phy: bgn, rssi: -12 I (7074) wifi:pm start, type: 1 I (7077) wifi:set rx beacon pti, rx_bcn_pti: 0, bcn_timeout: 0, mt_pti: 25000, mt_time: 10000 I (7154) wifi:AP's beacon interval = 102400 us, DTIM period = 2 I (7155) Mesh-Lite: netif network segment conflict check I (7156) ip select: IP Address:192.168.5.1 I (7160) ip select: GW Address:192.168.5.1 I (7164) ip select: NM Address:255.255.255.0 I (7170) bridge_common: ip reallocate new:192.168.5.1 W (7175) bridge_wifi: SoftAP IP network segment has changed, deauth all station I (8087) esp_netif_handlers: sta ip: 192.168.5.2, mask: 255.255.255.0, gw: 192.168.5.1 I (8088) bridge_wifi: Connected with IP Address:192.168.5.2 I (8091) ip select: IP Address:192.168.6.1 I (8096) ip select: GW Address:192.168.6.1 I (8101) ip select: NM Address:255.255.255.0 I (8106) bridge_common: ip reallocate new:192.168.6.1 W (8112) bridge_wifi: SoftAP IP network segment has changed, deauth all station I (8120) vendor_ie: RTC store: ssid:ESP_Bridge_1eb259; bssid:58:cf:79:1e:b2:59 crc:3027520052 I (11442) no_router: System information, channel: 13, layer: 2, self mac: 58:cf:79:e9:9e:c0, parent bssid: 58:cf:79:1e:b2:59, parent rssi: -14, free heap: 209280 I (21442) no_router: System information, channel: 13, layer: 2, self mac: 58:cf:79:e9:9e:c0, parent bssid: 58:cf:79:1e:b2:59, parent rssi: -13, free heap: 209280 I (31442) no_router: System information, channel: 13, layer: 2, self mac: 58:cf:79:e9:9e:c0, parent bssid: 58:cf:79:1e:b2:59, parent rssi: -13, free heap: 209280 ```
ce628ebc8c495c57b9523257d0b1657d4ea0a580
idf.py add-dependency "espressif/mesh_lite^0.10.3"
To create a project from this example, run:
idf.py create-project-from-example "espressif/mesh_lite^0.10.3:led_light"
To create a project from this example, run:
idf.py create-project-from-example "espressif/mesh_lite^0.10.3:mesh_local_control"
To create a project from this example, run:
idf.py create-project-from-example "espressif/mesh_lite^0.10.3:no_router"