低功耗蓝牙使用API设计封装函数模式示例
var bluetooth = {
RESET: function(){
// 基础数据配置
this.btName = "";
this.deviceId = "";
this.serviceId = "";
this.write_characteristicId = "";
this.read_characteristicId = "";
},
START: async function () {
// 启动蓝牙,并用户判断用户是否已开启蓝牙
},
SEARCH: async function () {
// 搜索设备是否在附近,wx.onBluetoothDeviceFound
await this.START();
return new Promise((reslove, reject)=>{
reslove();
})
},
CONNECT: async function () {
// 连接设备
// if(self.btName == device.btName)
let sameName = self.btName == device.btName ? true : false; // 记录蓝牙连接是否多次同时快速触发
if(this.waitConnect && sameName){
console.log("正在连接,请稍等...")
return;
}
this.waitConnect = true;
await this.SEARCH();
return new Promise((reslove, reject)=>{
this.waitConnect = false;
reslove();
})
},
SEND: async function (device, data, callback) {
// 发送数据
await this.CONNECT();
return new Promise((reslove, reject)=>{
device.sendEnd();
callback();
})
},
receiveDataCallback: function(){
// 接收设备返回的数据到前台
callback(value)
},
CLOSE: async function () {
// 关闭蓝牙线程
},
DISCONNECT: function(){
// 断开指定设备连接
},
STOP: function(){
// 停止搜索监听
},
ERROR: function(){
/***
* ERROR 错误
* err [@params](/user/params) {}
* err.ercode [@params](/user/params) Number
* 0 ok 正常
* 10000 not init 未初始化蓝牙适配器
* 10001 not available 当前蓝牙适配器不可用
* 10002 no device 没有找到指定设备
* 10003 connection fail 连接失败
* 10004 no service 没有找到指定服务
* 10005 no characteristic 没有找到指定特征值
* 10006 no connection 当前连接已断开
* 10007 property not support 当前特征值不支持此操作
* 10008 system error 其余所有系统上报的异常
* 10009 system not support Android 系统特有,系统版本低于 4.3 不支持 BLE
* 10012 operate time out 连接超时
* 10013 invalid_data 连接 deviceId 为空或者是格式不正确
*/
},
}
var device = {
btName: "btName",
deviceId: "00:00:00:AB:CD:EF",
passCheck: new Date().getTime(), // 记录触发跟设备返回是否为同一事件
sendEnd: function(res){
// 用于记录发送数据给设备成功后,设备一直未返回执行相关命令
clearTimeout(bluetooth.sendTimer);
bluetooth.sendTimer = setTimeout(() => {
clearTimeout(bluetooth.sendTimer);
bluetooth.CLOSE();
}, timeout);
},
onBLEConnectionStateChange: function(res){
// 用于监听蓝牙设备操作过程中,突然把设备断电或手动断开蓝牙捕获异常处理
// if(this.passCheck == )
},
capture: function(err){
// 用于获取操作过程中,未启动,蓝牙连接失败等问题处理
// if(this.passCheck == )
}
}
// 使用示例
let data = "00 11 22";
bluetooth.START(device);
bluetooth.SEARCH(device);
bluetooth.CONNECT(device);
bluetooth.SEND(device, data, function (value) {
console.log("value=>",value) // 用于收到设备返回数据回调处理
if(value){
bluetooth.passCheck = "";
bluetooth.CLOSE();
}
})