配网功能
前言
什么是配网?
配网就是配置网络,也就是配置 Wi-Fi 名称和密码。与之前连接 Wi-Fi 的 demo 不同,配网需要进行动态配置。主流的配网方式主要有三种:
蓝牙配网:通过模组的 BLE 蓝牙功能,与手机 App 进行交互,向模组发送Wi-Fi 名称和密码,实现配网操作。AP 配网:也叫热点配网,模组模拟一个Wi-Fi 热点,手机 App 连接该热点后,通过浏览器访问模组的 IP 地址,配置 Wi-Fi 名称和密码。声波配网:通过模组的声波功能,与手机 App 进行交互,配置 Wi-Fi 名称和密码,但是它需要麦克风和扬声器支持。
注意
所有的配网功能都需要下载 Tuya 的 "智能生活" App。
TuyaOS 提供了多种配网方式,包括蓝牙配网、AP 配网和声波配网等。其中 AP 配网和 Smart Config 是最常用的两种配网方式。本章主要讲解 Smart Config 的实现。接下来让我们一起了解如何使用 App 进行配网。
极简实现流程
配网实现
步骤一:新建工程
和之前一样,新建一个工程,重命名为 net_config,在 tuya_device.c 文件引用头文件 tuya_iot_wifi_api.h 、 *tuya_error_code.h*和 tuya_cloud_wifi_defs.h。
#include "tuya_iot_config.h"
#include "tuya_cloud_types.h"
#include "tuya_cloud_com_defs.h"
#include "tal_thread.h"
#include "tal_log.h"
#include "tal_system.h"
#include <tuya_cloud_wifi_defs.h>
#include <tuya_error_code.h>
#if defined(ENABLE_WIFI_SERVICE) && (ENABLE_WIFI_SERVICE == 1)
#include "tuya_iot_wifi_api.h"
#endif步骤二:初始化设备
在 tuya_app_thread 函数中添加以下代码,完成设备初始化工作:
STATIC VOID tuya_app_thread(VOID_T *arg)
{
// 完成一些初始化工作
OPERATE_RET rt = OPRT_OK;
#if defined(ENABLE_LWIP) && (ENABLE_LWIP == 1)
TUYA_LwIP_Init();
#endif
ws_db_init_mf();// 初始化KV
// TuyaOS 设备初始化
TY_INIT_PARAMS_S init_param = {0};// 初始化参数
init_param.init_db = TRUE;
strcpy(init_param.sys_env, TARGET_PLATFORM);
TUYA_CALL_ERR_LOG(tuya_iot_init_params(NULL, &init_param));
user_main();
tal_thread_delete(ty_app_thread);
ty_app_thread = NULL;
}步骤三:获取产品 PID
将获取到的产品 PID 在代码中定义为宏,该宏会在后续代码中使用:
#define PRODUCT_PID "YOUR_PRODUCT_PID" // 替换为你的产品 PID步骤四:SOC初始化
添加以下代码完成 SOC 初始化:
TY_IOT_CBS_S iot_cbs = {0};
#ifdef ENABLE_WIFI_SERVICE
TUYA_CALL_ERR_RETURN(tuya_iot_wf_soc_dev_init(GWCM_OLD, WF_START_SMART_FIRST, &iot_cbs, PRODUCT_PID, USER_SW_VER));
#endiftuya_iot_wf_soc_dev_init 参数说明
GWCM_OLD:使用默认的上电配网模式WF_START_SMART_FIRST:优先使用Smart Config模式&iot_cbs:回调函数指针,用于处理配网过程中的事件回调,这里暂时不处理PRODUCT_PID:产品 PIDUSER_SW_VER:用户软件版本
PID 的作用
PID 用于标识不同的产品,在 App 添加设备是,App 会根据 PID 来判断产品的名称,从而显示在设备列表中。
步骤五:烧录
根据之前的教程进行烧录即可,这里不再赘述。可参考:编写应用:编译并烧录应用
步骤六:App 配网
打开智能生活 App(通常会自动识别 T2-U 台灯产品)。如果未识别到,请查看下一步。

1.App 首页的 “+” 按钮;
2.点击 “添加设备”;

在列表中找到 T2-U 台灯;
选择设备,进入配网界面。

1.选择 Wi-Fi 网络;
2.输入 Wi-Fi 密码;
3.点击 “下一步”。

1.点击 “完成”;
2.等待设备连接到 Wi-Fi 网络。

配网成功之后,就能在首页看到配网成功的设备了。

完整代码
完整代码
#include "tuya_iot_config.h"
#include "tuya_cloud_types.h"
#include "tuya_cloud_com_defs.h"
#include "tal_thread.h"
#include "tal_log.h"
#include "tal_system.h"
#include <tuya_cloud_wifi_defs.h>
#include <tuya_error_code.h>
#if defined(ENABLE_WIFI_SERVICE) && (ENABLE_WIFI_SERVICE == 1)
#include "tuya_iot_wifi_api.h"
#endif
#define PRODUCT_PID "kkm3fmuawqr1g08e"
STATIC VOID user_main(VOID_T)
{
while (1)
{
TAL_PR_DEBUG("Hello TuyaOS.");
tal_system_sleep(3000); // 3s
}
return;
}
THREAD_HANDLE ty_app_thread = NULL;
STATIC VOID tuya_app_thread(VOID_T *arg)
{
// 完成一些初始化工作
OPERATE_RET rt = OPRT_OK;
#if defined(ENABLE_LWIP) && (ENABLE_LWIP == 1)
TUYA_LwIP_Init();
#endif
// ws_db_init_mf();
// TuyaOS 设备初始化
TY_INIT_PARAMS_S init_param = {0};
init_param.init_db = TRUE;
strcpy(init_param.sys_env, TARGET_PLATFORM);
TUYA_CALL_ERR_LOG(tuya_iot_init_params(NULL, &init_param));
// soc 初始化
TY_IOT_CBS_S iot_cbs = {0};
#ifdef ENABLE_WIFI_SERVICE
TUYA_CALL_ERR_RETURN(tuya_iot_wf_soc_dev_init(GWCM_OLD, WF_START_SMART_FIRST, &iot_cbs, PRODUCT_PID, USER_SW_VER));
#endif
// 重置接口,触发配网
// tuya_iot_wf_gw_unactive();
// 执行用户主函数
user_main();
tal_thread_delete(ty_app_thread);
ty_app_thread = NULL;
}
/**
* @brief user entry function
*
* @param[in] none
*
* @return none
*/
#if OPERATING_SYSTEM == SYSTEM_LINUX
INT_T main(INT_T argc, CHAR_T **argv)
#else
VOID_T tuya_app_main(VOID)
#endif
{
THREAD_CFG_T thrd_param = {4096, 4, "tuya_app_main"};
tal_thread_create_and_start(&ty_app_thread, NULL, NULL, tuya_app_thread, NULL, &thrd_param);
#if OPERATING_SYSTEM == SYSTEM_LINUX
while (1)
{
tal_system_sleep(1000);
}
#endif
}常见问题
Q: 添加设备时,列表是空的
A: 本章所讲的是最简单的配网功能,前提是开发板不能连接到任何 Wi-Fi 网络。否则开发板不会进入配网状态,也就不会在 App 中显示。可以参考下一章节的3.App 点灯 来实现进入配网状态。
Q: 怎么修改配网时的产品名称?
A: 产品名称是与 PID 相关联的,在 App 中显示的名称就是产品名称。如果想修改产品名称,需要在涂鸦开发者平台中修改产品名称。

