介绍设备通过一键配网方式配网过程中遇到的常见问题和解决方法。
背景信息
一键配网的流程图如下。
- 手机App向空中加密发送热点的SSID和密码。
- 设备在监听模式即可接收和上报给SDK。
SDK解密到SSID和密码后,作为入参调用HAL_Awss_Connect_Ap()
接口,此时设备则能连接上热点。
一、用手机App发送配网信息流
手机App向空中发送配网信息流,通过设备是否可以正常接收到相应信息,来判断一键配网的HAL接口实现是否正确。
- 在手机上安装App。
以公版App为例,如果您使用的是设备厂商开发的App,请向设备厂商索取App。公版App的下载请参见公版App介绍。
- 操作App,发送报文。
- 手机连接上期望设备将要连接到的热点,确保热点和设备距离足够近并无阻挡。
- 打开App,扫描配网二维码。
- 输入热点连接密码,单击下一步。
- 单击我确认在闪烁,发起配网。
二、用自测工具和设备接收信息流
自测工具以源码形式提供,您需要自行下载(下载地址),再编写HAL_XXX()
接口进行交叉编译。
+-- include
| +-- hal_awss.h
| +-- hal_common.h
| +-- ieee80211.h
| +-- ieee80211_radiotap.h
| +-- smartconfig_ieee80211.h
| +-- zconfig_protocol.h
+-- src
+-- hal_awss.c
+-- haltest.c
+-- ieee80211.c
+-- smartconfig_ieee80211.c
+-- TestProbeRx.c
+-- wrapper.c
- 将src/wrapper.c中所有
HAL_XXX()
的函数内容实现替换为适合您系统的代码。
- 将替换后的 src/wrapper.c 和其它的源文件编译到您的固件中。
- 浏览include/hal_awss.h文件,其中列举的函数
verfiy_xxx()
称为自测函数。每个自测函数可以验证一到多个HAL_XXX()
实现。
- 选择合适的程序入口,调用自测函数
verify_xxx()
。
调用方法,可以参考
src/haltest.c中对自测函数进行调用的示意代码。
#include <stdio.h>
#include <unistd.h>
#include "hal_common.h"
#define TEST_SWITCH_CHANNEL_INTERNVAL_MS (250)
...
...
int main(int argc, char *argv[])
{
int time_passed = 0;
uint8_t bssid[ETH_ALEN] = {0x11,0x22,0x33,0x44,0x55,0x66};
verify_awss_preprocess();
verify_awss_close_monitor();
verify_awss_open_monitor();
while(1) {
if (time_passed > 10 *1000) {
break;
}
verify_awss_switch_channel(switch_channel());
usleep(TEST_SWITCH_CHANNEL_INTERNVAL_MS*1000);
time_passed += TEST_SWITCH_CHANNEL_INTERNVAL_MS;
}
verfiy_awss_connect_ap(5000, "ssid", "passwd", AWSS_AUTH_TYPE_WPAPSKWPA2PSK, AWSS_ENC_TYPE_AES, bssid, 6);
verify_awss_get_ap_info();
verify_awss_net_is_ready();
return 0;
}
- 编译嵌入您HAL实现的自测工具全部源码,并观察
verify_xxx()
这类函数的运行输出,来检验您的HAL_XXX()
实现是否正确。
- 使用自测函数,调用HAL接口。
使用一键配网模式,仅需要对接这些公共HAL接口即可。
- verify_awss_preprocess
对HAL_Awss_Get_Timeout_Interval_Ms、HAL_Awss_Get_Channelscan_Interval_Ms和HAL_Wifi_Get_Mac进行自测。查看HAL返回的配置参数值,是否符合预期。
/***********************************************/
/* Verify HAL_Awss_Get_Timeout_Interval_Ms */
/* Awss Timeout Interval Ms: 600000 ms */
/***********************************************/
/***********************************************/
/* Verify HAL_Awss_Get_Channelscan_Interval_Ms */
/* Awss Channel Scan Interval Ms: 250 ms */
/***********************************************/
/***********************************************/
/* Verify HAL_Wifi_Get_Mac */
/* Wifi Mac: 11:22:33:44:55:66 */
/***********************************************/
/***********************************************/
/* Verify HAL_Awss_Switch_Channel In Loop */
/***********************************************/
- verify_awss_open_monitor
对HAL_Awss_Open_Monitor进行自测。
确保设备附近有运行配网App在发送配网报文。
输出日志为当前收到的配网模块帧类型的表格,其中有
SmartConfig Start Frame
、
SmartConfig Group Frame
、
SmartConfig Data Frame
字样,说明当前监听模式可以接收到一键配网所需的帧类型。
/***********************************************/
/* Verify HAL_Awss_Open_Monitor */
/***********************************************/
|---------------------------------------------------------------------|
| Frame Type | Direction | Packet Length | Channel |
|-----------------------------|-----------|-----------------|---------|
| SmartConfig Data Frame | FromDS | 1256 (0x04E8) | 8 |
| SmartConfig Start Frame | FromDS | 1248 (0x04E0) | 8 |
| SmartConfig Data Frame | FromDS | 1256 (0x04E8) | 8 |
| SmartConfig Data Frame | FromDS | 0532 (0x0214) | 9 |
| SmartConfig Data Frame | FromDS | 0288 (0x0120) | 1 |
| SmartConfig Data Frame | FromDS | 0457 (0x01C9) | 3 |
| SmartConfig Group Frame | FromDS | 1002 (0x03EA) | 4 |
| SmartConfig Group Frame | FromDS | 0994 (0x03E2) | 4 |
| SmartConfig Data Frame | FromDS | 0284 (0x011C) | 4 |
| SmartConfig Data Frame | FromDS | 0421 (0x01A5) | 4 |
| SmartConfig Data Frame | FromDS | 0413 (0x019D) | 4 |
- verify_awss_close_monitor
对HAL_Awss_Close_Monitor进行自测,观察是否可以按预期停止监听模式。
/***********************************************/
/* Verify HAL_Awss_Close_Monitor */
/***********************************************/
- verify_awss_switch_channel
对HAL_Awss_Switch_Channel进行自测,观察是否可以按预期切换到指定的WiFi信道(1-13)。
- verfiy_awss_connect_ap
对HAL_Awss_Connect_Ap进行自测,观察是否可以根据SSID和密码,连接到指定的AP热点。
/***********************************************/
/* Verify HAL_Awss_Connect_Ap */
/* Result: 0 */
/***********************************************/
其中,Result的值为0表示成功,为-1表示失败。
- verify_awss_get_ap_info
对HAL_Wifi_Get_Ap_Info进行自测,观察是否可以按预期收集AP热点的连接信息。成功调用该函数后,系统会打印获取到的ssid、密码和bssid。
/***********************************************/
/* Verify HAL_Wifi_Get_Ap_Info */
/* Result: 0 */
/* SSID: test_ssid */
/* PASSWD: test_passwd */
/* PASSWD: test_bssid */
/***********************************************/
其中,无论设备是否连接上路由器,Result的值都为0。
- verify_awss_net_is_ready
对HAL_Sys_Net_Is_Ready进行自测,观察是否调用该函数后,会获取当前网络状态。
/***********************************************/
/* Verify HAL_Sys_Net_Is_Ready */
/* Result: 0 */
/***********************************************/
其中,Result的值为0表示处于连网状态,值为1表示处于非连网状态。