乐鑫esp32的wifi和esp32wifi蓝牙同时开启之间的接口是什么

吃饱了撑的刚开始了解ESP-MESH,据说偠做项目恰巧又没中文文档,就翻译翻译

ESP-MDF的无线通信协议基础

ESP-MESH是一种多跳网络,至少需要两个无线hops网络设备中间连接)用于从源设备到目的设备传递信息ESP-MESH是一种设备传输自身数据同时也作为其它设备数据传输中继的技术。成功的MESH网络的先决条件是所有的MESH节点首先在物理层连接成功其后MESH网络算法通过物理连接选择数据传输路径。作为一种高可靠度广覆盖度的WLAN网络,ESP-MESH是理想的覆盖大区域的无线解决方案

ESP-MESH与传统无线网络不同。传统无线技术提供点对点或者多点的拓扑结构通常,会有一个中心节点例如手机通讯系统中的基站戓者802.11 WLAN中的AP节点。这个中心节点与每一个无线终端通过单独hop路由连接除此之外,中心节点通过有线连接到骨干网络(backbone)相对照的,ESP-MESH采用樹状拓扑结构具有根节点(root node),这使得网络更具有扩展性与容错性所有ESP-MESH网络内的节点都可以成为根节点,如果根节点异常网络会自動选择一个新的根节点。这些有效减少了树状拓扑结构对于单个节点的依赖并且允许ESP-MESH内每个节点都参与信息的转发。

ESP-MESH网络拓扑结构示意:

ESP-MESH定义了一种自组织自恢复,快速组网便于控制的的网络。

ESP-MESH内包含有三类节点:

<1> RootNode:根节点ESP-MESH树状拓扑结构的顶端节点,也是ESP-MESH与外部IP网絡的唯一接口它的功能是作为网关转发外部数据包。

<2> IntermediateNode:中间节点中间节点可以接收、发送、传递来自其父节点与子节点的数据包。

<3> LeafNode:葉子节点叶子节点可以接收、发送数据,但不能进行传递(forward

每个ESP-MESH内的节点与其他节点根据其在MESH网络内的位置构成父子节点关系传递數据。根节点作为ESP-MESH与外部IP网络连接节点,与路由器直连且可以在其子节点与路由器之间传输数据ESP-MESH网络内设备数量与路由器带宽直接影響到根节点的数据吞吐量(throughput)。

如下图所示节点C/D作为中间节点,同时也是根节点的的子节点叶子节点A/B/E没有子节点。其数据流向如图所礻:

路由器在ESP-MESH网络中是强制需求的用户需要为ESP-MESH内每个节点需要配置SSID,密码与通信信道如果路由器被隐藏,用户需要为节点配置BSSID(关於ESP-MESH配置方法,详见《the link to Mesh IoT solutions》即将推出)

ESP-MESH网络需要的信息包含在“供应商信息元素VIE”信标帧内。这些信息包括有:

节点类型、节点在网络内的層信息、网络各层最大节点数信息、子节点数信息、单个节点允许连接的最大节点数等

若网络内不存在根节点,ESP-MESH内的所有设备都会广播“实时信号强度RSSI”

信号每个节点的网络信息,包括信号强度都会传输在整个ESP-MESH网络内,ESP-MESH网络内的设备会根据这些信息选择信号强度最高嘚节点作为根节点

POR,所有ESP-MESH设备被分别扫描每个都会设备比较其接受到的其他设备相对于路由器的信号强度以及自身相对于路由器的信號强度,并选择其中信号强度最高的设备进行广播作为根节点申报(root-node candidate)。

接下来每个ESP-MESH再次扫描MESH网络,选择此时信号强度最高的节点作為根节点申报这个选择将被再次广播。这个过程会重复直到只剩一个根节点申报

ESP-MESH也提供方法用于加速根节点选举。

ESP-MESH提供一种用于在MESH网絡内选出最优父节点的方法根据该方法,一个节点会通过VIE消息获取其它节点的信息并且生成父节点集合。如果父节点集合包括至少两個节点具有更优表现参数的一个会被选择为父节点。根据该方法首选的父节点的选择是基于父节点集合内所有节点类型与表现参数。基于这种选择父节点的机制可以保证首选的父节点是最优的选择,以此来减少丢包提高网络功能

自恢复特性使得基于路由的网络能够茬节点异常或者连接变得不稳定时继续工作。

如果根节点异常与根节点直连的第二层节点会很快检测根节点失败并初始化新一轮的根节點选举。如果根节点以及第二层节点全部异常第三层节点也会进行根节点选举并选出根节点。

若中间节点或者叶子节点出现异常异常節点会在预设时间内分别重新连接其父节点,(重连失败)然后重新选择父节点来加入ESP-MESH网络。

用户可以通过调用 转换ESP-MESH内的根节点根节點可以被用户指定或者由网络自身产生。

多个根节点连接同一个路由器的冲突情况已被处理多个根节点具有相同的路由SSID不同BSSID的冲突情况未进行处理。

改变ESP-MESH内一个节点的物理位置会导致父节点信号强度下降与通讯出现不确定性(?)一旦检测到这种情况,父节点转换功能会自动選择一个更优的父节点

当手机节点(?)不断改变其位置,其与父节点的通讯可能会减弱或者丢失这种情况被检测到时,手机节点的父节点會被重新选择以维持与手机节点的通讯

某节点父节点选择期间,该节点路由表内的节点会被排除所以回环节点的情况可以避免。路径檢测机制(path verification mechanism)与能量传输机制(energy transfer mechanism)会检测通讯路径是否出现回环当检测到回环通路出现,父节点会断开与子节点的通讯并通知子节点出現回环的(预设)原因

当ESP-MESH内某节点被选择为父节点,其会为每个子节点的上传数据分配一个可以动态调整大小的接收窗口子节点在发送数据包之前会首先向父节点发送窗口请求,父节点将对比窗口请求内的序列号与最近从该子节点收到的数据包序列号接收窗口的大小經过计算返回给子节点,子节点根据接收到的窗口大小发送数据包给父节点

除此之外,考虑到ESP-MESH内只有根节点可以与外网进行通讯如果ESP-MESH內的其他节点无法获知根节点与外网的连接情况,与此同时仍不停地向根节点发送数据包可能会导致数据包丢失或者不必要的数据包发送动作。ESP-MESH提供了一种上传数据的流控机制流控机制通过监控根节点与外部网络的连接情况稳定ESP-MESH的外出流量,以避免数据包丢失或者不必偠的数据包发送

只有指定的设备可以接收组播包,因此用户需要指定这些设备通过配置esp_mesh_send()的相关参数。

ESP-MESH提供避免带宽浪费的机制:

<1> 当中间節点接收到来自其父节点的广播包时会将广播包进行传输并拷贝发送给它的子节点们。

<2> 当中间节点传输自身产生的广播包时会将广播包发送给它的父节点与子节点。

<3> 当中间节点接收到来自子节点的广播包时会将广播包传输并发送给父节点与剩余的子节点。

<4> 当叶子节点產生广播包时直接发送给其父节点。

<5> 根节点自身产生的广播包发送给其所有子节点。

<6> 根节点接收来自其子节点的广播包发送给其它孓节点

<7> 当节点接收到来自自身地址的广播包时,丢弃

<8> 当节点接收来自父节点的广播包且该包的源头是该节点的子节点,丢弃

用户通过esp_mesh_set_group_id()接ロ设置设备的组ID当数据包的发送目的地址是组时,只有组内设备能接收到它

<2> 自恢复时间:如果根节点异常,10秒内检测到问题并且产生噺的根节点如果某个父节点异常,5秒内子节点检测到问题并找到新的父节点50个设备测试。

<3> 层际延时:100个设备组网且所有设备不打开AMPDU的凊况下测试30ms

<4> 丢包率:100个设备组网测试从第二层到第四层最大0.32%最低0%

<5> 网络能力:决定于每个softAP模式允许连接的最大设备数以及网络内允许的最夶层数。默认配置为支持最大6个连接最大6层连接。

<1> 用户应用任务需要通过esp_mesh_set_config注册一个MESH事件回调处理接口该接口用于处理MESH协议栈与LwIP协议栈嘚事件回调。

<2> 用户应用可以访问除根节点外的节点并且不经过LwIP协议栈根节点需要运行LwIP协议栈的原因是需要与外网通讯,esp_mesh_send()与esp_mesh_recv()用于发送/接收來自于MESH的数据

<3> 虽然目前ESP-IDF不建议在初始化系统时不调用tcpip_adapter_init()应用任务仍然需要执行LwIP初始化,并且停止DHCP服务端与客户端服务执行顺序:

由於根节点连接到路由器,所以一旦一个节点变为根节点会直接启动DHCP客户端服务获取IP,除非已经设置了静态IP

esp32wifi蓝牙同时开启和WIFI是ESP32的核心功能esp32wifi藍牙同时开启和wifi的共存也是esp32的独门武功,但时候后续也会发现共存的时候会有很多问题不管怎样,esp32wifi蓝牙同时开启和wifi在esp-idf中有很多的例子夶家都可以参考。本篇只做简单的流程介绍

支持双模蓝?,即同时?支持经典蓝?和esp32wifi蓝牙同时开启低功耗

    我们的设备类似esp32wifi蓝牙同时开啟音箱的功能,在使用a2dp的过程中也是有很多bug的比方说暂停后杂音、esp32wifi蓝牙同时开启声音卡顿、系统panic等,希望后续的esp-idf都已经解决了如果遇箌类似的问题,我们也可以在博客中讨论在此就不一一赘述了。

    Wifi的初始化比较简单所调用的API如下,后续的Wifi状态就是用回调处理的

    IOT设備通常没有界面交互,所以当他作为station的时候都面临一个问题,Wifi所连接的AP的ssid和密码如何配置呢

    ESP已经贴心的为我们想到了,并且提供了集Φ方式:

    上层的逻辑大致如此底层的协议没有细看,应该是采用了802.11的某些机制来扩展的

我要回帖

更多关于 esp32wifi蓝牙同时开启 的文章

 

随机推荐