Wi-Fi R-Mesh 使用指南

示例

本节展示了如何建立一个 R-Mesh 网络,并实现节点间的数据通信。通过此示例您可以熟悉 R-Mesh 的基本用法。

  1. 获取 SDK

    SDK 下载: IoT SDK

    备注

    默认 SDK 中根节点只可以连接 2 个节点,如希望根节点可连接更多节点,请按以下步骤:

    1. 获取 R-Mesh WLAN lib(联系我们

    2. 替换 {sdk}/amebaxxx_gcc_project/project_km4/asdk/lib/application 路径下的 lib_wifi_whc_ap.a

    3. 替换 {sdk}/amebaxxx_gcc_project/project_km0/asdk/lib/application 路径下的 lib_wifi_common.alib_wifi_fw.alib_wifi_whc_np.a

  2. 使能 R-MESH 功能

    打开 Wi-Fi 用户配置文件 {sdk}/component/soc/usrcfg/amebaxxx/ameba_wificfg.c ,设置如下参数:

    wifi_user_config.wtn_en = 1;
    

    更多设置请参考 编程接口

  3. 使能 R-MESH NAT 功能

    备注

    若不需要使用 RNAT 功能则跳过此步骤

    1. 打开 Wi-Fi 用户配置文件 {sdk}/component/soc/usrcfg/amebaxxx/ameba_wificfg.c ,设置如下参数:

      wifi_user_config.wtn_rnat_en = 1;
      
    2. 若需要该节点固定为 RNAT,则设置如下参数:(当前版本必须设置,自动决策 RNAT 算法正在开发中)

      wifi_user_config.wtn_fixed_rnat_node = 1;
      
    3. {sdk}/amebadxxx_gcc_project 下执行 ./menuconfig.py,选择 CONFIG LWIP > Enable NAT REPEATER

      ----Connectivity config----
      CONFIG WHC INTF  --->
      ...
      CONFIG LWIP  --->
         [ ] Enable Fast DHCP
         [*] Enable NAT REPEATER
         [*] Enable LWIP NETCONN SEM PER THREAD
         [ ] Enable LWIP Debug
      ...
      

      更多 RNAT 设置请参考 RNAT 相关

  4. 编译与烧录

    请参考标准编译流程: gcc_build_environment

  5. 可视化演示工具(Gravitation)

    为直观展示 R-Mesh 节点的拓扑信息,我们提供了 Gravitation tool,请参考 Gravitation 进行配置

  6. 加入网络

    • 方法 1: 使用 ATCMD 将所有节点都加入网络

      示例:
      AT+WLCONN=ssid,rmesh_test,pw,12345678
      
    • 方法 2:使用 RPP(R-mesh Provision Protocol)加入网络(即将上线)

  7. 拓扑显示

    节点加入网络后,会自动发信息给 Gravitation tool,如下图所示有 4 个节点与 AP 连接成功。

    节点上方显示一些基本信息: MAC_Addr[5]:IP(更新时间)

    例如下图左上角的节点显示: 1A:192.168.2.102(2:26) 表示:

    • MAC 地址为 XX:XX:XX:XX:0x1A

    • IP 地址为 192.168.2.102

    ../../../_images/rmesh_tool_nodes_connect_ap.png

    更多说明请参考 Gravitation

    备注

    tool 显示了各个节点的连接关系,但是无法反应节点的物理位置,您可以:

    1. 可以取消右下角的“自动布局”

    2. 手动拖动节点使其符合真实的位置。

  8. 切换验证

    为了验证切换行为,您可以:

    1. 将其中 2 个节点远离 AP (如下图将右侧的 62 和 6D 节点)

    2. 可以观察到由于 AP 的信号强度变差,6D 节点自动切换到了 62 节点

    ../../../_images/rmesh_tool_nodes_switch.png
  9. 通信验证

    • 方法 1: 执行 ping cmd 去 ping 任意节点

      Ping 测试示例:
      AT+PING=192.168.2.102
      
    • 方法 2: 使用 Gravitation tool 的 ping 测试功能可方便的发起所有节点的 ping 测试

      ../../../_images/rmesh_tool_ping.png

      节点上方的 ping 信息为 Ping: 成功包数/失败包数 - 丢包率/RTT

      例如左下角节点的 Ping 信息为 P:29/2-6.5%/20 表示:

      • 成功 29 笔

      • 失败 2 笔

      • 丢包率 6.5%

      • RTT 20ms

编程接口

通用

用户配置文件

路径: {sdk}/component/soc/usrcfg/amebaxxx/ameba_wificfg.c

参数

说明

wtn_en

R-Mesh 功能总开关,写 1 表示使能

wtn_strong_rssi_thresh

AP RSSI 高于这个阈值,则节点会直连 AP

wtn_father_refresh_timeout

子节点超过这个时间没有收到父节点的 beacon,则会切换父节点(单位为毫秒)

wtn_child_refresh_timeout

父节点超过这个时间没有收到子节点的 beacon,则会删除这个子节点 (单位为毫秒)

wtn_max_node_num

R-Mesh 网络中最大节点数量,用于决定每个节点发送 beacon 的窗口大小。节点数量越多,发送 beacon 的窗口越小,且发送间隔会变大

RNAT 相关

用户配置文件

路径: {sdk}/component/soc/usrcfg/amebaxxx/ameba_wificfg.c

参数

说明

wtn_rnat_en

R-Mesh NAT 功能开关,写 1 使能

wtn_fixed_rnat_node

强制成为 R-NAT 节点,写1使能,仅当 wifi_user_config.wtn_rnat_en=1 时有效

wtn_connect_only_to_rnat

只选择RNAT及RNAT的下级节点作为父节点,写1使能

ap_sta_num

本节点作为RNAT时能连接的子节点数量。目前最大支持 14 个 client。

备注

wifi_user_config.ap_sta_num > 5 时,需要调整内存布局,操作如下:

打开 SDK 中的 {sdk}/amebadplus_gcc_project/amebaDplus_layout.ld 文件, 将 RAM_KM0_IMG2_SIZE 由默认的 96K 调整到 116K,可以支援 R-NAT 节点直连 14 个 client。

#define RAM_KM0_IMG2_SIZE                           KBYTES(116)

RNAT menuconfig

{sdk}/amebaxxx_gcc_project 下执行 ./menuconfig.py,选择 CONFIG LWIP > Enable NAT REPEATER

----Connectivity config----
CONFIG WHC INTF  --->
...
CONFIG LWIP  --->
   [ ] Enable Fast DHCP
   [*] Enable NAT REPEATER
   [*] Enable LWIP NETCONN SEM PER THREAD
   [ ] Enable LWIP Debug
...