更新记录

1.0.2(2025-11-05)

  1. 优化

1.0.1(2025-11-04)

  1. android、iOS esp provision配网

1.0.0(2025-10-22)

  1. android配网
查看更多

平台兼容性

uni-app(3.6.13)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - 6.0 13 -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - -

uni-app x(3.6.13)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - 6.0 13 - -

其他

多语言 暗黑模式 宽屏模式

ESP idf Provision

集成步骤

  1. 拷贝demo示例的AndroidManifest.xml、Info.plist文件夹到项目下
  2. 集成插件步骤请参考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("蓝牙连接失败")
}
  • 扫描Wi-Fi

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;
    }
})
  • provision配网

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;
    }
})
  • 判断蓝牙是否开启,仅支持Android
// 蓝牙没有开启则打开蓝牙
let isBluetoothEnable = provision.isBluetoothEnable()
if (isBluetoothEnable) {

} else {

}
  • 开启蓝牙

provision.bluetoothEnable()
  • 设置设备传输加密类型,仅支持Android

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)
  • 设置加密类型,仅支持Android
let type = "SEC_TYPE_0" // SEC_TYPE_0、SEC_TYPE_1、SECURITY_2
provision.setSecurityType(type)
  • 设置用户名,仅支持Android,iOS通过蓝牙连接的参数设置

provision.setUserName(userName)

隐私、权限声明

1. 本插件需要申请的系统权限列表:

蓝牙、定位、网络

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: