App 扫码配网

对应示例:examples/posix/pair/scan-by-app/

本章介绍另一种配网方式:设备端生成并展示二维码,用户使用涂鸦 App 扫码完成 配网激活

前置条件

在阅读本章之前,请确保你已具备:

在上一章(设备扫码配网)中,配网流程是 App 显示二维码、设备用摄像头扫码。 但在部分产品形态中,设备可能没有摄像头(例如带屏音箱、智能面板),却有屏幕 可以显示二维码。此时可以反过来——设备端向涂鸦云请求一个激活 URL,将其编码为 二维码展示在屏幕(或终端)上,用户用涂鸦 App 扫描该二维码即可完成配网。

激活成功后,设备同样会获得 devidsecret_keylocal_key,后续使用方 式与扫码配网完全一致。

整体流程

iot_get_qrcode_info() // 1. 向涂鸦云请求激活 URL
|
v
qrcodegen_encodeText() // 2. 将 URL 编码为二维码
print_qr_terminal() // 在终端/屏幕上显示
|
v
iot_client_init_on_boarding() // 3. 等待 App 扫码,完成激活
|
v
iot_client_get_session_token() // 4. 验证云端连通性
|
v
iot_client_deinit() // 5. 清理资源

关键 API

iot_get_qrcode_info()

int iot_get_qrcode_info(const iot_qrcode_request_t *request, char *url, size_t url_len);

向涂鸦云请求一个用于配网激活的 URL。设备将此 URL 编码为二维码展示给用户。

iot_qrcode_request_t 字段:

字段说明
uuid设备 UUID
authkey设备 Auth Key
app_idApp ID(可为空字符串)
type二维码类型(通常为 1)
region数据中心区域(默认 AY 中国)
env环境:PROD / PRE
cacert / cert_bundle_attachHTTPS/IoT-DNS 的 TLS 证书配置,详见 TLS 证书验证

返回值: OPRT_OK 表示成功,激活 URL 写入调用方提供的 url 缓冲区(NUL 结尾;缓冲区不够大时返回 OPRT_INVALID_RESULT)。

iot_client_init_on_boarding()

iot_client_t *iot_client_init_on_boarding(const iot_on_boarding_config_t *config);

阻塞等待用户通过 App 扫码完成激活。内部会通过 MQTT 监听激活事件,当 App 扫 码并确认配网后自动完成设备激活。

必须连接 MQTT,App 才判定配网成功

App 只有在检测到设备连接上涂鸦云 MQTT 通道(设备上线)后,才会判定配网成功。 仅完成激活、拿到 devid 等凭据但不连接 MQTT,App 端会显示配网失败/超时。

因此这一点现在由默认行为保证——自动连接是默认开启的,无需额外配置;只要不设 .mqtt_disable_auto_connect,设备就会在激活完成后自动连接 MQTT:

iot_on_boarding_config_t ob_config = {
// ...
// 不设 .mqtt_disable_auto_connect:默认即自动连接 MQTT,App 才能判定配网成功
};

若选择保持 false,则必须在激活成功后立即手动调用 iot_client_connect()

iot_client_init_on_boarding_with_token() 的区别:

  • init_on_boarding() — 不需要预知 Token,通过 MQTT 等待 App 扫码触发激活
  • init_on_boarding_with_token() — 需要已知 Token(从二维码解析或 OpenAPI 获取),直接发起激活

运行示例

# 二维码模式:设备展示二维码,等待 App 扫码
./build/scan_by_app_pair_demo

# Token 模式:直接使用 Token 激活(当前实现仍会先请求并打印二维码 URL,便于调试)
./build/scan_by_app_pair_demo <token>

与"设备扫码"方式的对比

设备扫码(scan-by-deviceApp 扫码(本章)
二维码由谁生成App 生成设备生成
二维码由谁扫描设备(摄像头)用户(App)
设备硬件要求需要摄像头需要屏幕或终端输出
二维码内容WiFi 凭据 + Token(JSON)涂鸦云激活 URL
激活方式init_on_boarding_with_token()init_on_boarding()
网络信息传递通过二维码传递 WiFi 信息设备需自行联网

注意事项

  • 此方式要求设备已具备网络连接能力(Wi-Fi 或以太网),且设备必须在激活后连接涂鸦平台的 MQTT 通道——App 以设备 MQTT 上线作为配网成功的判定条件(见上文警告,切勿设 .mqtt_disable_auto_connect = true)。
  • iot_client_init_on_boarding() 会阻塞直到 App 扫码完成或超时 (timeout_ms 配置),实际产品中建议在单独线程中调用。
  • 本示例使用 qrcodegen(nayuki 库)生成二维码,实际产品可替换为任意 QR 生成方案。
© 2026 Tuya Inc.Tuya Physical AI · Agentic-kit