更新记录
1.0.2(2025-11-05)
- 优化
1.0.1(2025-11-04)
- android、iOS esp provision配网
1.0.0(2025-10-22)
- android配网
查看更多
平台兼容性
uni-app(3.6.14)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| √ |
√ |
- |
- |
√ |
√ |
6.0 |
13 |
- |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
快应用-华为 |
快应用-联盟 |
| - |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
uni-app x(3.6.14)
| Chrome |
Safari |
Android |
iOS |
鸿蒙 |
微信小程序 |
| - |
- |
6.0 |
13 |
- |
- |
其他
ESP idf Provision
集成步骤
- 拷贝demo示例的AndroidManifest.xml、Info.plist文件夹到项目下
- 集成插件步骤请参考https://www.cnblogs.com/wenrisheng/p/18323027
整体流程
扫描蓝牙 -》 蓝牙连接 -》 扫描Wi-Fi列表 -》 Wi-Fi名称和密码发送给设备进行配网
接口
import {UTSProvision} from "@/uni_modules/wrs-uts-provision"
let provision = new UTSProvision()
export default {
globalData: {
provision: provision
},
onLaunch: function() {
console.log('App Launch')
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
}
}
let params = {}
//蓝牙前缀用来扫描时过滤蓝牙,可以传空字符串
// params.prefix = "HQPROV_"
params.prefix = ""
params.transport = "ble" // transport参数仅支持iOS,ble、softap
provision.startScan(params, (resp) => {
let opt = resp.opt
switch (opt) {
case "onDeviceFound":
let device = resp.device
let address = device.address
let isAdd = false
for (let i = 0; i < this.bluetoothArray.length; i++) {
if (address == this.bluetoothArray[i].address) {
isAdd = true
break
}
}
if (!isAdd) {
this.bluetoothArray.push(device)
}
break;
case "onScanStartFailed":
break;
case "onScanCompleted":
break;
case "onFailure":
break;
default:
break;
}
})
let provision = getApp().globalData.provision
let device = this.bluetoothArray[index]
let address = device.address
let params = {}
params.address = address
params.pop = "abcd1234" // 仅支持iOS
params.userName = "wifiprov" // 仅支持iOS
let flag = provision.connectBLEDevice(params)
if (!flag) {
this.showMsg("蓝牙连接失败")
}
let provision = getApp().globalData.provision
provision.scanNetworks((resp) => {
let opt = resp.opt
switch (opt) {
case "onWifiListReceived": {
this.wifiArray = []
this.wifiArray.push(...resp.wifiList)
}
break;
case "onWiFiScanFailed": {
this.showMsg("Wi-Fi获取失败:" + JSON.stringify(resp))
}
break;
default:
break;
}
})
let provision = getApp().globalData.provision
let params = {}
params.ssid = "xxx" //Wi-Fi名称
params.password = "" // Wi-Fi密码
provision.provision(params, (resp) => {
let opt = resp.opt
switch (opt) {
case "createSessionFailed": {
this.showMsg("createSessionFailed:" + JSON.stringify(resp))
}
break;
case "wifiConfigSent": {
this.showMsg("wifiConfigSent")
}
break;
case "wifiConfigFailed": {
this.showMsg("wifiConfigFailed:" + JSON.stringify(resp))
}
break;
case "wifiConfigApplied": {
this.showMsg("wifiConfigApplied")
}
break;
case "wifiConfigApplyFailed": {
this.showMsg("wifiConfigApplyFailed:" + JSON.stringify(resp))
}
break;
case "provisioningFailedFromDevice": {
this.showMsg("provisioningFailedFromDevice:" + JSON.stringify(resp))
}
break;
case "deviceProvisioningSuccess": {
this.showMsg("deviceProvisioningSuccess")
}
break;
case "onProvisioningFailed": {
this.showMsg("onProvisioningFailed:" + JSON.stringify(resp))
}
break;
default:
break;
}
})
let userId = "xxxx" // 这里根据自己的业务填写登陆用户的ID
let data = {}
data.user_id = userId
data.timestamp = (new Date().getTime()) / 1000
let provision = getApp().globalData.provision
let params = {}
params.path = "bind_info"
params.data = JSON.stringify(data)
provision.sendDataToCustomEndPoint(params, (resp) => {
let opt = resp.opt
switch (opt) {
case "onSuccess": {
// returnData一般发送给自己的服务器
let returnData = resp.returnData
this.provision()
}
break;
case "onFailure": {
// ios报错:{"msg":"Request to send data to device failed with error: BLE characteristic does not exist.","code":13,"opt":"onFailure"}
this.showMsg("sendDataToCustomEndPoint error:" + JSON.stringify(resp))
}
break;
default:
break;
}
})
// 蓝牙没有开启则打开蓝牙
let isBluetoothEnable = provision.isBluetoothEnable()
if (isBluetoothEnable) {
} else {
}
provision.bluetoothEnable()
let transportType = ""
let securityType = ""
if (this.isSecure) {
transportType = "TRANSPORT_BLE"
securityType = "SECURITY_1"
} else {
transportType = "TRANSPORT_BLE"
securityType = "SECURITY_1"
}
provision.createESPDevice(transportType, securityType)
// 断开连接设备
let provision = getApp().globalData.provision
provision.disconnectDevice()
- 设置ProofOfPossession,仅支持Android,iOS通过蓝牙连接的参数设置
let pop = "pwvhwnoqhtky" // pwvhwnoqhtky、abcd1234
provision.setProofOfPossession(pop)
let type = "SEC_TYPE_0" // SEC_TYPE_0、SEC_TYPE_1、SECURITY_2
provision.setSecurityType(type)
- 设置用户名,仅支持Android,iOS通过蓝牙连接的参数设置
provision.setUserName(userName)