热点配网

更新时间:2024-10-18 05:50:59下载pdf

设备生成热点(AP),App 连接设备 AP 并下发路由器信息和 Token 等激活信息给设备,由设备完成激活。

热点配网流程的业务逻辑已经在 TuyaOS SDK 内部实现,TuyaOS SDK 定义一套 TuyaOS Kernel Layer(简称 TKL)接口来屏蔽硬件和系统差异,TKL 接口由您实现,在 TKL 接口完成底层硬件的操作。本文将提供 Wi-Fi TKL 接口开发指导。

流程说明

App路由器云端设备连接路由器连接成功获取 Token返回 Token设备生成 AP 热点连接设备 AP 热点连接成功获取 IP 地址返回 IP 地址 xxx.xxx.176.xxx发送 UDP 包,type 字段 0x11收到 UDP 包发送 SSID、密码、Token 等配网激活信息连接路由器连接成功,返回 IP 地址根据 Token,轮询查询激活成功设备设备激活激活成功MQTT 连接,上线返回激活成功设备查询设备详细信息返回设备详细信息App路由器云端设备

开发指导

环境准备

  • 准备涂鸦体系的 App、设备和路由器。
  • 设备 Wi-Fi 支持 AP 和 Station 模式切换。

使用方法

热点配网过程中,TuyaOS SDK 需要获取和切换无线工作模式,开启和关闭 AP,连接路由器,获取无线连接状态,以及获取无线接口 IP 地址等,需要您适配以下 TKL 接口。

  • tkl_wifi_init

    OPERATE_RET tkl_wifi_init(WIFI_EVENT_CB cb);
    

    TuyaOS SDK 初始化时调用该接口,该接口的参数是无线连接状态变化的通知回调函数指针,需要应用实时监控无线连接的状态变化。当无线连接状态发生变化时,使用通知回调函数指针把其状态传递给 TuyaOS SDK。

    例如,当成功连接到路由器并分配到 IP 地址时,执行 cb(WFE_CONNECTED, NULL)。当连接路由器失败时,执行 cb(WFE_CONNECT_FAILED, NULL)。当断开路由器连接时,执行 cb(WFE_DISCONNECTED, NULL)

  • tkl_wifi_scan_ap

    OPERATE_RET tkl_wifi_scan_ap(CONST SCHAR_T *ssid, AP_IF_S **ap_ary, UINT_T *num)
    

    TuyaOS SDK 在蓝牙启动广播时,会主动调用该接口。该接口的作用是扫描当前环境,获取所有 AP,并传递给 App 端。应用需要在接口中实现该功能。

  • tkl_wifi_start_ap

    OPERATE_RET tkl_wifi_start_ap(CONST WF_AP_CFG_IF_S *cfg);
    

    TuyaOS SDK 初始化时,若设备处于未配网状态,则调用该接口来开启设备的 AP,允许手机连接,建立局域网通讯来传输配网信息。应用需要在接口中实现启动 AP 的功能。

  • tkl_wifi_stop_ap

    OPERATE_RET tkl_wifi_stop_ap(VOID_T);
    

    当 TuyaOS SDK 配网结束时,会调用该接口,用于关闭设备的 AP。应用需要在接口中实现关闭 AP 的功能。

  • tkl_wifi_get_mac

    OPERATE_RET tkl_wifi_get_mac(CONST WF_IF_E wf, NW_MAC_S *mac)
    

    当 TuyaOS SDK 启动时,会调用该接口,设备发出的 AP 热点名称的后缀带有 MAC 地址的后 4 位。

  • tkl_wifi_set_work_mode

    OPERATE_RET tkl_wifi_set_work_mode(CONST WF_WK_MD_E mode);
    

    当 TuyaOS SDK 需要切换无线的工作模式时,调用该接口。通常是在 tkl_wifi_stop_ap 接口之前调用该接口设置 AP 模式,在 tkl_wifi_station_connect 之前调用该接口设置 Station 模式。应用需要在接口中根据 mode 参数把无线切换到对应的工作模式。

  • tkl_wifi_get_work_mode

    OPERATE_RET tkl_wifi_get_work_mode(WF_WK_MD_E *mode);
    

    当 TuyaOS SDK 需要获取无线的工作模式时,调用该接口。返回的工作模式要求与 tkl_wifi_set_work_mode 接口设置的工作模式一致,否则可能会影响配网流程。

  • tkl_wifi_station_connect

    OPERATE_RET tkl_wifi_station_connect(CONST SCHAR_T *ssid,  CONST SCHAR_T *passwd);
    

    当 TuyaOS SDK 接收到来自手机 App 的配网信息后,调用该接口。应用需要在接口中实现连接路由器的功能。

  • tkl_wifi_station_disconnect

    OPERATE_RET tkl_wifi_station_disconnect(VOID_T);
    

    当 TuyaOS SDK 需要断开路由器连接时,调用该接口。应用需要在接口中实现断开路由器的功能。

  • tkl_wifi_station_get_status

    OPERATE_RET tkl_wifi_station_get_status(WF_STATION_STAT_E *stat);
    

    当 TuyaOS SDK 需要获取当前无线连接状态时,调用该接口。TuyaOS SDK 需要获取 WSS_GOT_IP 状态才会走配网流程,所以当设备连接到路由器并且分配到 IP 地址,需要返回 WSS_GOT_IP

  • tkl_wifi_get_ip

    OPERATE_RET tkl_wifi_get_ip(CONST WF_IF_E wf, NW_IP_S *ip);
    

    当 TuyaOS SDK 需要获取当前无线接口的 IP 地址时,调用该接口。应用需要在接口中根据 wf 参数来获取 AP 或 Station 接口的 IP 地址。

    以上是 AP 配网必要实现的接口,Wi-Fi 中的其他 TKL 接口实现,参考 移植 TuyaOS 到 Linux 平台

设备开发

设置配网模式为 AP 配网。

GW_WF_START_MODE mode = WF_START_AP_ONLY;

常见注意事项

  • TuyaOS SDK 启动 AP 配网时,会获取 Wi-Fi 驱动里的 IP 地址,以便确认 Wi-Fi 驱动是否正常。Wi-Fi 适配层 tkl_wifi_get_ip 接口需要给 TuyaOS SDK 回复一个默认 IP 地址。如果 Wi-Fi 驱动没有默认 IP 地址,那么返回值为 0,否则 TuyaOS SDK 会认为 Wi-Fi 驱动异常而终止配网。报错日志如下:

    热点配网
  • 在适配 tkl_wifi_start_ap 接口时,要把 TuyaOS SDK 下发的结构体指针入参下的所有成员设置到 Wi-Fi 驱动里,适配层不可随意修改。如 TuyaOS SDK 下发的结构体指针入参中的 IP 地址 192.168.176.1,那么 AP 热点发出来的 IP 地址需是 192.168.176.1,否则会导致 App 下发的 AP 配网协议与 TuyaOS SDK 不一致而配网失败。报错日志如下:

    热点配网 热点配网
  • 在切换到 Station 模式之前,Wi-Fi 驱动可能有自己默认的 IP 地址。那么设备连上路由器之后,将 Wi-Fi 适配层 tkl_wifi_get_ip 接口中的 IP 地址替换成路由器分配的 IP 地址,否则会出现配网超时等现象。

  • 所有的适配接口都不允许阻塞,耗时的任务建议做异步处理,否则会出现配网超时等问题。

  • 接口返回值:除了获取 IP 地址接口,如果其他无线配网相关的适配接口返回值为非 0,那么无线配网都会被终止。在 Wi-Fi 适配层接口中,如果无实际 Wi-Fi 平台报错的情况下,都要保证返回值为 0

  • 另外,TuyaOS SDK 会定时调用 Wi-Fi 适配层 tkl_wifi_station_get_status 接口查询 Wi-Fi 状态,该接口必须在 1 秒时间内快速响应。