ESP-MESH 编程指南
ESP-MESH 编程指南
这是 ESP-MESH 的编程指南,包括 API 参考和编码示例。本指南分为以下几部分:
- ESP-MESH 编程模型
- 编写 ESP-MESH 应用程序
- 自组织网络
- 应用实例
- API 参考
有关 ESP-MESH 协议的文档,请参阅 ESP-MESH API 指南。
ESP-MESH 编程模型
软件栈
ESP-MESH 软件栈构建在 Wi-Fi 驱动/FreeRTOS 之上,并且在某些情况下可以使用 LwIP 栈(即根节点)。下图说明了 ESP-MESH 软件栈。

系统事件
应用程序通过 ESP-MESH 事件与 ESP-MESH 交互。由于 ESP-MESH 构建在 Wi-Fi 栈的顶部,因此应用程序也可以通过 Wi-Fi 事件任务与 Wi-Fi 驱动交互。下图说明了 ESP-MESH 应用程序中各种系统事件的接口。

mesh_event_id_t 定义所有可能的 ESP-MESH 系统事件,并且可以指示诸如父/子的连接/断开之类的事件。在可以使用 ESP-MESH 系统事件之前,应用程序必须通过 esp_mesh_set_config() 注册 Mesh 事件回调。 回调用于从 ESP-MESH 栈以及 LwIP 栈接收事件,并且应包含与应用程序相关的每个事件的处理程序。
系统事件的典型用例包括使用诸如 MESH_EVENT_PARENT_CONNECTED 和 MESH_EVENT_CHILD_CONNECTED 之类的事件来指示节点何时可以分别开始上游和下游传输数据。 同样,MESH_EVENT_ROOT_GOT_IP 和 MESH_EVENT_ROOT_LOST_IP 可用于指示根节点何时能够和不能将数据传输到外部 IP 网络。
在自组织模式下使用 ESP-MESH 时,用户必须确保不会调用 Wi-Fi API。这是因为自组织模式将在内部进行 Wi-Fi API 调用以连接/断开/扫描等。来自应用程序的任何 Wi-Fi 调用(包括来自回调函数和 Wi-Fi 事件处理程序的调用)可能干扰 ESP-MESH 的自组织行为。因此,在调用
esp_mesh_start()之后,并且在调用esp_mesh_stop()之前,用户不应该调用 Wi-Fi API。
LwIP & ESP-MESH
应用程序可以直接访问 ESP-MESH 栈,而无需通过 LwIP 栈。仅根节点需要 LwIP 栈向/从外部 IP 网络发送/接收数据。 但是,由于每个节点都可能成为根节点(由于自动根节点选择),每个节点仍必须初始化 LwIP 栈。
每个节点都需要通过调用 tcpip_adapter_init() 来初始化 LwIP 栈。为了防止非根节点访问 LwIP 栈,应用程序应在 LwIP 栈初始化后停止以下服务:
- SoftAP 接口上的 DHCP 服务器服务。
- Station 接口上的 DHCP 客户端服务。
以下代码段演示了如何为 ESP-MESH 应用程序初始化 LwIP。
/* tcpip initialization */
tcpip_adapter_init();
/*
* for mesh
* stop DHCP server on softAP interface by default
* stop DHCP client on station interface by default
*/
ESP_ERROR_CHECK(tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP));
ESP_ERROR_CHECK(tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA));
/* do not specify system event callback, use NULL instead. */
ESP_ERROR_CHECK(esp_event_loop_init(NULL, NULL));
ESP-MESH 要求根节点与路由器连接。因此,如果节点成为根节点,则相应的处理程序必须启动 DHCP 客户端服务并立即获取 IP 地址。这样做将允许其他节点开始向/从外部 IP 网络发送/接收分组。但是,如果使用静态 IP 设置,则不需要此步骤。
编写 ESP-MESH 应用程序
启动 ESP-MESH 的先决条件是初始化 LwIP 和 Wi-Fi。 以下代码片段演示了初始化 ESP-MESH 之前必要的先决条件步骤。
tcpip_adapter_init();
/*
* for mesh
* stop DHCP server on softAP interface by default
* stop DHCP client on station interface by default
*/
ESP_ERROR_CHECK(tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP));
ESP_ERROR

本文是ESP32 ESP-MESH的编程指南,详细介绍了ESP-MESH的编程模型,包括软件栈、系统事件、LwIP与ESP-MESH的交互。还涉及编写ESP-MESH应用程序的步骤,如初始化、配置网络和自组织网络的管理。同时,提供了应用实例和API参考,帮助开发者更好地理解和应用ESP-MESH。
1953

被折叠的 条评论
为什么被折叠?



