ESP32 官方文档(十六)ESP-MESH 编程指南

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

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 交互。由于 ESP-MESH 构建在 Wi-Fi 栈的顶部,因此应用程序也可以通过 Wi-Fi 事件任务与 Wi-Fi 驱动交互。下图说明了 ESP-MESH 应用程序中各种系统事件的接口。
ESP-MESH 系统事件
mesh_event_id_t 定义所有可能的 ESP-MESH 系统事件,并且可以指示诸如父/子的连接/断开之类的事件。在可以使用 ESP-MESH 系统事件之前,应用程序必须通过 esp_mesh_set_config() 注册 Mesh 事件回调。 回调用于从 ESP-MESH 栈以及 LwIP 栈接收事件,并且应包含与应用程序相关的每个事件的处理程序。

系统事件的典型用例包括使用诸如 MESH_EVENT_PARENT_CONNECTEDMESH_EVENT_CHILD_CONNECTED 之类的事件来指示节点何时可以分别开始上游和下游传输数据。 同样,MESH_EVENT_ROOT_GOT_IPMESH_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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值