全部产品
云市场

设备热点配网

更新时间:2019-04-15 15:50:56

方案说明

方案简述: 设备开启默认热点, 手机搜索发现到热点后连接到设备热点, 手机将连接公网的路由器热点的SSID/密码(AES加密)发送给WiFi设备, 然后WiFi设备就使用手机发送过来的SSID/密码(AES解密)连接路由器

工作原理如下所示

  • 注:由于设备热点配网需要开启热点模式,而设备一般无法同时开启设备热点与混杂模式,故设备热点配网与其他配网模式不能同时开启u>,为做区分,我们提供了单独的api(awss_dev_ap_start和awss_dev_ap_stop)用于开启和关闭设备热点配网。

如何配置使用这种配网模式

通过menuconfig选择配网模块并选定手机热点配网:

  1. make distclean
  2. make menuconfig

使能配网:

选择手机热点配网:

API接口说明

序号 函数名 说明
1 awss_dev_ap_start 开启设备热点配网
2 awss_dev_ap_stop 关闭设备热点配网
3 iotx_event_regist_cb 注册linkkit(包括配网)生命周期内相关事件通知

应用场景

int awss_dev_ap_start

调用该API用于启动设备热点配网服务. 启动配网服务的场景包括:

  • 设备首次上电, 设备上不存在热点SSID/密码.

  • 用户希望设备使用设备热点方式重新进行配网.

调用该配网服务后, 设备进入配网发现状态, 用于让网络中的其它设备发现自己的存在。

此接口无入参,设备热点的ssid与password由SDK生成并调用设备上的相关HAL去启动热点

int awss_dev_ap_stop

调用该API用于停止当前配网. 停止服务的场景包括:

  • 当前不需要配网
  • 希望通过其他途径配网

API使用示例

下面是设备上电后的配网代码示例:

  1. uint8_t bssid[ETH_ALEN] = {0};
  2. char ssid[HAL_MAX_SSID_LEN] = {0};
  3. char passwd[HAL_MAX_PASSWORD_LEN] = {0};
  4. // Users need to get the stord ssid/passwd, to decide whether to start wifi provisioning service
  5. if (INVALID_SSID(ssid) || INVALID_BSSID(bssid) ) {
  6. awss_dev_ap_start();
  7. } else {
  8. HAL_Awss_Connect_Ap(TIMEOUT_MS, ssid, passwd, 0, 0, bssid, 0);
  9. }

配网过程状态监控

如果应用程序需要感知配网过程中的状态变化, 可以注册事件回调函数, 当相关事件发生时, 配网模块会调用回调函数告知具体的事件, 设备商可以在相关事件中操作LED指示灯的亮或灭, 或者通过快闪/慢闪来告知用户状态的变化, 也可以播放声音来告知用户状态

参考示例如下,开发者需要在具体的事件下嵌入自己产品的处理逻辑:

  1. // 注册事件回调函数, 注册配网事件回调一定要需在awss_start之前调用
  2. iotx_event_regist_cb(linkkit_event_monitor);
  3. // linkkit_event_monitor是事件回调函数参考事件:
  4. static void linkkit_event_monitor(int event)
  5. {
  6. switch (event) {
  7. case IOTX_AWSS_START: // AWSS start without enbale, just supports device discover
  8. // operate led to indicate user
  9. LOG("IOTX_AWSS_START");
  10. break;
  11. case IOTX_AWSS_ENABLE: // AWSS enable, AWSS doesn't parse awss packet until AWSS is enabled.
  12. LOG("IOTX_AWSS_ENABLE");
  13. // operate led to indicate user
  14. break;
  15. case IOTX_AWSS_LOCK_CHAN: // AWSS lock channel(Got AWSS sync packet)
  16. LOG("IOTX_AWSS_LOCK_CHAN");
  17. // operate led to indicate user
  18. break;
  19. case IOTX_AWSS_PASSWD_ERR: // AWSS decrypt passwd error
  20. LOG("IOTX_AWSS_PASSWD_ERR");
  21. // operate led to indicate user
  22. break;
  23. case IOTX_AWSS_GOT_SSID_PASSWD:
  24. LOG("IOTX_AWSS_GOT_SSID_PASSWD");
  25. // operate led to indicate user
  26. break;
  27. case IOTX_AWSS_CONNECT_ADHA: // AWSS try to connnect adha (device
  28. // discover, router solution)
  29. LOG("IOTX_AWSS_CONNECT_ADHA");
  30. // operate led to indicate user
  31. break;
  32. case IOTX_AWSS_CONNECT_ADHA_FAIL: // AWSS fails to connect adha
  33. LOG("IOTX_AWSS_CONNECT_ADHA_FAIL");
  34. // operate led to indicate user
  35. break;
  36. case IOTX_AWSS_CONNECT_AHA: // AWSS try to connect aha (AP solution)
  37. LOG("IOTX_AWSS_CONNECT_AHA");
  38. // operate led to indicate user
  39. break;
  40. case IOTX_AWSS_CONNECT_AHA_FAIL: // AWSS fails to connect aha
  41. LOG("IOTX_AWSS_CONNECT_AHA_FAIL");
  42. // operate led to indicate user
  43. break;
  44. case IOTX_AWSS_SETUP_NOTIFY: // AWSS sends out device setup information
  45. // (AP and router solution)
  46. LOG("IOTX_AWSS_SETUP_NOTIFY");
  47. // operate led to indicate user
  48. break;
  49. case IOTX_AWSS_CONNECT_ROUTER: // AWSS try to connect destination router
  50. LOG("IOTX_AWSS_CONNECT_ROUTER");
  51. // operate led to indicate user
  52. break;
  53. case IOTX_AWSS_CONNECT_ROUTER_FAIL: // AWSS fails to connect destination
  54. // router.
  55. LOG("IOTX_AWSS_CONNECT_ROUTER_FAIL");
  56. // operate led to indicate user
  57. break;
  58. case IOTX_AWSS_GOT_IP: // AWSS connects destination successfully and got
  59. // ip address
  60. LOG("IOTX_AWSS_GOT_IP");
  61. // operate led to indicate user
  62. break;
  63. case IOTX_AWSS_SUC_NOTIFY: // AWSS sends out success notify (AWSS
  64. // sucess)
  65. LOG("IOTX_AWSS_SUC_NOTIFY");
  66. // operate led to indicate user
  67. break;
  68. case IOTX_AWSS_BIND_NOTIFY: // AWSS sends out bind notify information to
  69. // support bind between user and device
  70. LOG("IOTX_AWSS_BIND_NOTIFY");
  71. // operate led to indicate user
  72. break;
  73. case IOTX_AWSS_ENABLE_TIMEOUT: // AWSS enable timeout
  74. // user needs to enable awss again to support get ssid & passwd of router
  75. LOG("IOTX_AWSS_ENALBE_TIMEOUT");
  76. // operate led to indicate user
  77. break;
  78. case IOTX_CONN_CLOUD: // Device try to connect cloud
  79. LOG("IOTX_CONN_CLOUD");
  80. // operate led to indicate user
  81. break;
  82. case IOTX_CONN_CLOUD_FAIL: // Device fails to connect cloud, refer to
  83. // net_sockets.h for error code
  84. LOG("IOTX_CONN_CLOUD_FAIL");
  85. // operate led to indicate user
  86. break;
  87. case IOTX_CONN_CLOUD_SUC: // Device connects cloud successfully
  88. LOG("IOTX_CONN_CLOUD_SUC");
  89. // operate led to indicate user
  90. break;
  91. case IOTX_RESET: // Linkkit reset success (just got reset response from
  92. // cloud without any other operation)
  93. LOG("IOTX_RESET");
  94. // operate led to indicate user
  95. break;
  96. default:
  97. break;
  98. }
  99. }

需要对接的HAL接口

序号 函数名 说明
1 HAL_Sys_Net_Is_Ready 检查Wi-Fi网卡/芯片或模组当前的IP地址是否有效
2 HAL_Wifi_Get_Ap_Info 获取设备所连接的热点(Access Point)的信息
3 HAL_Wifi_Get_Mac 获取设备的MAC地址, 格式应当是”XX:XX:XX:XX:XX:XX”
4 HAL_Awss_Connect_Ap 要求Wi-Fi网卡连接指定热点(Access Point)的函数, bssid指定特定AP, 另外bssid也可能为空或无效值(全0或全0xff)
  • 除公共部分HAL API外,用户还必须实现以下特有HAL,否则设备热点配网无法正常工作。
序号 函数名 说明
1 HAL_Awss_Close_Ap 关闭设备热点
2 HAL_Awss_Open_Ap 打开设备热点配网