Wi-Fi设备配网
概述
我们提供了设备配网 SDK,目前支持 SoftAP、SmartConfig、simpleConfig、AirKiss、BLE-Combo 这五种方式进行设备配网,详细的SDK使用及配网流程参考 设备配网 SDK。
配网示例
腾讯连连中
SoftAP
配网过程如下,供开发者参考。n
1. 安装依赖
npm install qcloud-iotexplorer-appdev-plugin-wificonf-softap
2. 注册插件
调用插件上
install
方法来注册插件,调用时需要传入实例化的小程序SDK。插件注册时的名称分别为:wifiConfSoftAp、wifiConfSmartConfig、wifiConfSimpleConfig、wifiConfBleCombo、wifiConfAirKiss,之后可通过插件名称来获取插件实例。
const SoftApPlug = require('qcloud-iotexplorer-appdev-plugin-wificonf-softap');SoftApPlug.install(appDevSdk);
3. 生成配网 Token
sdk.requestApi('AppCreateDeviceBindToken').then((data) => {const bindDeviceToken = data.Token;console.log('wifi设备配网Token=', bindDeviceToken);});
4. 使用配网插件
从appDevSdk实例的
plugins
中获取已注册的插件实例,调用配网插件实例的 start
方法开始配网流程。示例代码
sdk.plugins['wifiConfSoftAp'].start({wifiConfToken: bindDeviceToken,targetWifiInfo: wifiInfo,onProgress,onComplete,onError,autoRetry: true, // 自动处理故障流程});
蓝牙设备配网
下面是添加一个LLSync蓝牙设备的示例。
1. 创建一个蓝牙适配器
蓝牙适配器(bluetoothAdapter)可以用来搜索设备、连接设备等。代码如下:
import { BlueToothAdapter } from 'qcloud-iotexplorer-bluetooth-adapter';import { LLSyncDeviceAdapter } from 'qcloud-iotexplorer-bluetooth-adapter-llsync';// 关于appDevSdk文档,详见https://www.npmjs.com/package/qcloud-iotexplorer-appdev-sdkconst options = {appDevSdk, // 通过qcloud-iotexplorer-appdev-sdk得到的实例}LLSyncDeviceAdapter.injectOptions(options);export const bluetoothAdapter = new BlueToothAdapter({deviceAdapters: [LLSyncDeviceAdapter,],});
2. 获取蓝牙设备列表
通过 bluetoothAdapter.startSearch方法,我们可以发现设备,获得设备列表。
const serviceIds = [LLSyncDeviceAdapter.serviceId];await bluetoothAdapter.startSearch({serviceIds,onError: (error) => {console.log('----error', error);// 搜索设备出错bluetoothAdapter.stopSearch();},onSearch: (devices) => {console.log('searched devices', devices);if (devices.length > 0) {console.log('找到设备', devices); // 此时可以在页面上展示}},timeout: 1.4 * 15 * 1000,});
在上面的 onSearch 回调函数中,我们可以获得搜寻到的设备列表,这时可以将设备列表展示到页面上,供用户选择要连接哪个设备。
注意:
如果设备无法搜索到,请确认设备没有被绑定。
3. 连接设备
用户从上面获取到的设备中选择一个,并发起连接操作时,可以调用
bluetoothAdapter.connectDevice
方法进行连接。连接成功后会返回一个 deviceAdapter,可以用来向连接的设备发送 Wi-Fi,token 等数据。注意:
如果在连接时提示没有权限操作该产品,请到控制台/应用开发对应用和产品进行关联。
try {// device 参数是上一步 onSearch 回调中获取 devices 数组的某一项const deviceAdapter = await bluetoothAdapter.connectDevice(device);if (!deviceAdapter) {throw {code: 'CONNECT_ERROR',}}} catch (err) {console.error('连接到设备出错');}
在这一步中,可以通过连接设备获得 deviceAdapter实例 ,通过 deviceAdapter,我们可以完成后续设备的绑定和解绑操作。
4. 绑定设备
绑定设备时,可以传入 familyId, roomId, 从而将设备绑定到特定的家庭和房间,绑定完成后,可以在设备列表中看到该设备。
try {const deviceId = await deviceAdapter.bindDevice({ familyId, roomId });} catch (err) {console.log(err);}
5. 鉴权设备
设备完成绑定后,并不能立即向蓝牙发送控制指令,在发送指令前需要先完成设备鉴权。
// ...连接设备操作// 接下来连接鉴权if (!deviceAdapter.authorized) {await deviceAdapter.authenticateConnection({deviceName: deviceName,});}
6. 控制设备
注意:
如果控制设备无效,可检查上一步鉴权设备是否成功。
7. 解绑设备
设备绑定后,也可以通过小程序发起删除设备的操作,这时,如果没有连接和鉴权,首先要连接和鉴权设备,如第4,第5步所示;然后调用
unbindDevice
,解绑完成后会断开连接,设备会恢复到未绑定的状态。try{await deviceAdapter.unbindDevice({ familyId, deviceName });} catch (err) {console.log(err);}
8. 断开设备
我们可以通过
deviceAdapter.disconnectDevice()
断开设备连接:await deviceAdapter.disconnectDevice()
9. deviceAdapter 事件
事件 | 描述 | 参数 |
connect | 蓝牙设备连接时触发。 | DeviceInfo |
disconnect | 蓝牙设备连接断开时触发。 | DeviceInfo |
authorized | 蓝牙设备授权完成时触发。 | { version, mtu, otaVersion, } |