uploaded 1 week ago
A lite version Wi-Fi Mesh, each node can access the network over the IP layer.

changelog (zh)

# 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

readme (zh) of led_light example

                                        
                                        - [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 芯片

                                    

readme (zh) of mesh_local_control example

                                        
                                        - [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 服务发送当前设备的信息

                                    

readme (zh) of no_router example

                                        
                                        - [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
```

                                    

Links

Supports all targets

License: Apache-2.0

To add this component to your project, run:

idf.py add-dependency "espressif/mesh_lite^0.10.3"

or download archive

Dependencies

  • espressif/cmake_utilities 0.*
  • espressif/iot_bridge 0.*
  • ESP-IDF >=4.3
  • Examples:

    led_light

    more details

    To create a project from this example, run:

    idf.py create-project-from-example "espressif/mesh_lite^0.10.3:led_light"

    or download archive (327 bytes)

    mesh_local_control

    more details

    To create a project from this example, run:

    idf.py create-project-from-example "espressif/mesh_lite^0.10.3:mesh_local_control"

    or download archive (184 bytes)

    no_router

    more details

    To create a project from this example, run:

    idf.py create-project-from-example "espressif/mesh_lite^0.10.3:no_router"

    or download archive (186 bytes)

    Stats

    • Archive size
      Archive size: 3.49 MB
    • Downloaded in total
      Downloaded in total 568 times
    • Downloaded this version
      This version: 47 times

    Badge

    espressif/mesh_lite version: 0.10.3
    |