热点配网

更新时间:2026-03-27 07:50:10LLM 副本以 Markdown 格式查看下载 PDF

设备生成热点(Access Point,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_set_country_code
OPERATE_RET tkl_wifi_set_country_code(CONST COUNTRY_CODE_E ccode);

配网过程中,App 在下发 ssid 和 passwd 之前会先下发国家码,TuyaOS SDK 会调用该接口传递数据。

国家码暂时只支持:中国区(CN 1-13)、美国区(US 1-11)、日本区(JP 1-14)、欧洲区(EU 1-13)。
针对不同的国家码,需要达到的要求为:扫描路由器时,只能扫到国家码对应信道列表的热点。

  • 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_start_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 秒时间内快速响应。