Wi-Fi R-Mesh 使用指南
示例
本节展示了如何建立一个 R-Mesh 网络,并实现节点间的数据通信。通过此示例您可以熟悉 R-Mesh 的基本用法。
获取 SDK
SDK 下载: IoT SDK
备注
默认 SDK 中根节点只可以连接 2 个节点,如希望根节点可连接更多节点,请按以下步骤:
获取 R-Mesh WLAN lib(联系我们)
替换
{sdk}/amebaxxx_gcc_project/project_km4/asdk/lib/application
路径下的lib_wifi_whc_ap.a
替换
{sdk}/amebaxxx_gcc_project/project_km0/asdk/lib/application
路径下的lib_wifi_common.a
,lib_wifi_fw.a
和lib_wifi_whc_np.a
使能 R-MESH 功能
打开 Wi-Fi 用户配置文件
{sdk}/component/soc/usrcfg/amebaxxx/ameba_wificfg.c
,设置如下参数:wifi_user_config.wtn_en = 1;
更多设置请参考 编程接口
使能 R-MESH NAT 功能
备注
若不需要使用 RNAT 功能则跳过此步骤
打开 Wi-Fi 用户配置文件
{sdk}/component/soc/usrcfg/amebaxxx/ameba_wificfg.c
,设置如下参数:wifi_user_config.wtn_rnat_en = 1;
若需要该节点固定为 RNAT,则设置如下参数:(当前版本必须设置,自动决策 RNAT 算法正在开发中)
wifi_user_config.wtn_fixed_rnat_node = 1;
在
{sdk}/amebadxxx_gcc_project
下执行./menuconfig.py
,选择 。----Connectivity config---- CONFIG WHC INTF ---> ... CONFIG LWIP ---> [ ] Enable Fast DHCP [*] Enable NAT REPEATER [*] Enable LWIP NETCONN SEM PER THREAD [ ] Enable LWIP Debug ...
更多 RNAT 设置请参考 RNAT 相关
编译与烧录
请参考标准编译流程: gcc_build_environment
可视化演示工具(Gravitation)
为直观展示 R-Mesh 节点的拓扑信息,我们提供了 Gravitation tool,请参考 Gravitation 进行配置
加入网络
方法 1: 使用 ATCMD 将所有节点都加入网络
- 示例:
AT+WLCONN=ssid,rmesh_test,pw,12345678
方法 2:使用 RPP(R-mesh Provision Protocol)加入网络(即将上线)
拓扑显示
节点加入网络后,会自动发信息给 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
更多说明请参考 Gravitation
备注
tool 显示了各个节点的连接关系,但是无法反应节点的物理位置,您可以:
可以取消右下角的“自动布局”
手动拖动节点使其符合真实的位置。
切换验证
为了验证切换行为,您可以:
将其中 2 个节点远离 AP (如下图将右侧的 62 和 6D 节点)
可以观察到由于 AP 的信号强度变差,6D 节点自动切换到了 62 节点
通信验证
方法 1: 执行 ping cmd 去 ping 任意节点
- Ping 测试示例:
AT+PING=192.168.2.102
方法 2: 使用 Gravitation tool 的 ping 测试功能可方便的发起所有节点的 ping 测试
编程接口
通用
用户配置文件
路径:
{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
,选择 。----Connectivity config---- CONFIG WHC INTF ---> ... CONFIG LWIP ---> [ ] Enable Fast DHCP [*] Enable NAT REPEATER [*] Enable LWIP NETCONN SEM PER THREAD [ ] Enable LWIP Debug ...