⼩程序之蓝⽛开发(详细读数据、写数据、附源码)本⽂将详细介绍⼩程序的蓝⽛开发流程(附源码)
准备:
只⽀持低功耗蓝⽛也就是蓝⽛4.0,普通的蓝⽛模块是⽤不了的,⼀定要注意。
蓝⽛可以连TTL接到电脑上,再⽤XCOM调试
⼀开始定义的变量
var deviceId;
var i=0;
var serviceId=[];
var characteristicId=[];
蓝⽛开发流程:
1.打开蓝⽛适配器
4.连接想要连接的设备
6.写数据、读数据
具体实现:
1.打开蓝⽛适配器
wx.openBluetoothAdapter({
success: function(res) {
console.log(res,"success")
},
fail: function (res) {
console.log("fail")
},
})
2.适配器打开后可以开始搜索蓝⽛设备了
wx.startBluetoothDevicesDiscovery({
services: [],
success: function (res) {
console.log(res)
},
fail: function (res) {
console.log("fail")
},
})
sevices⾥不要填参数,要不然只能搜索特定的设备wwwki
3.搜索⼀⼩段时间后可以查看搜索到的设备,⼀般时间很短,1s都不⽤,搜不到可以多等等
success: function (res) {
console.log(res)
i=0;
while (res.devices[i]) {
console.log(i);
console.log(res.devices[i].name,res.devices[i].deviceId);
if(res.devices[i].name=='YahBoom_BL'){
deviceId=res.devices[i].deviceId;
console.log(deviceId);
}
i++;
}
}
})
这⼀步将所有搜索到的设备的名字和ID输出,并将名字为'YahBoom_BL'的设备的Id存到deviceId⾥去,这个设备就是我所需要使⽤的
方立天4.现在我们可以获取⼀个特定设备的所有服务了
deviceId: deviceId,
success: function(res) {
console.log(res.services);
i=0;
while(res.services[i]){
serviceId[i]=res.services[i].uuid;
console.log(serviceId[i]);
i++;
}
},
})
这⼀步我们获取YahBoom_BL的所有服务并储存到serviceId数组⾥去
5.现在我们可以针对⼀个特定服务查看这个服务所⽀持的操作
deviceId: deviceId,
serviceId: serviceId[1],
success: function (res) {
i=0;
while(res.characteristics[i]){
characteristicId[i]=res.characteristics[i].uuid;
console.log(characteristicId[i]);
i++;
}
}
})
在这⾥我们获取YahBoom_BL的第⼆个服务(第⼀个服务下标为0,选第⼆个因为我的设备的第⼆个服务的第⼀个特征值⽀持notif、read、write,可以把⼀个服务的所有特征值打印出来查看)的特征值,并将特征值ID存到characteristicId数组⾥去
6.开启notify并读取蓝⽛发过来的数据,开启这个后我们就能实时获取蓝⽛发过来的值了
state: true,
deviceId: deviceId,
serviceId: serviceId[1],
characteristicId: characteristicId[0],
success: function (res) {
console.log('notifyBLECharacteristicValueChange success', Msg)
}
})
function ab2hex(buffer) {
var hexArr = Array.prototype.map.call(
new Uint8Array(buffer),
function(bit) {
return ('00' + String(16)).slice(-2)
}
)
return hexArr.join('');
}
console.log('characteristic value comed:', ab2hex(res.value))
})
这⾥第⼀个函数是开启notify服务,deviceId、serviceId、characteristicId都是之前我们获取的,第⼆个函数是将bufferArray类型转为string类型,因为buffer不能直接在console.log⾥输出,会显⽰null,第三个函数就是监听蓝⽛发送过来的值了,蓝⽛每次发送⼀个值,都会回调这个函数,res.value就是⼀个bufferArray类型,存的是发送过来的值 7.写数据到蓝⽛
let buffer = new ArrayBuffer(3)
let dataView = new DataView(buffer)
dataView.setUint8(1, 100)
wx.writeBLECharacteristicValue({
deviceId: deviceId,
serviceId: serviceId[1],
characteristicId: characteristicId[0],
value: buffer,
success: function (res) {
console.log('writeBLECharacteristicValue success', Msg)
}
})
传数据给蓝⽛时只能⽤buffer类型,let buffer = new ArrayBuffer(3)这句话定义⼀个三个长度的buffer,
dataView.setUint8(1, 100)这句话将第⼀个值设置为100,所以传递过去的值就是00 64 00 (⼗六进制)
附录(直接复制粘贴就能运⾏)
JS源码:
var app = getApp();
var deviceId;
var i=0;
var serviceId=[];
var characteristicId=[];
Page({
data: {
},
onLoad:function(){
})
},
openadapter:function(){
wx.openBluetoothAdapter({
success: function(res) {
console.log(res,"success")
},
fail: function (res) {
console.log(res,"fail")
},
})
// wx.getBluetoothAdapterState({
// complete: function (res) {
// console.log("currentstate:",res)
// }
// })
},
closeadapter: function () {
wx.closeBluetoothAdapter({
success: function (res) {
console.log(res, "success")
},
fail: function (res) {
console.log(res, "fail")
},
})
// wx.getBluetoothAdapterState({
// complete: function (res) {
黎塘论坛// console.log("currentstate:", res)
// }
// })
},
opendiscovery:function(){
wx.startBluetoothDevicesDiscovery({
services: [],
success: function (res) {
console.log(res)
},
fail: function (res) {工作票管理系统
你在大雾里得意忘形console.log(res, "fail")单板层积材
},
})
},
closediscovery:function(){
wx.stopBluetoothDevicesDiscovery({
success: function (res) {
console.log(res)
},
fail: function (res) {
console.log(res, "fail")
},
})
},
getdevice:function(){
function ab2hex(buffer) {
var hexArr = Array.prototype.map.call(
new Uint8Array(buffer),
function (bit) {
return ('00' + String(16)).slice(-2)
}
)
return hexArr.join('');
}
success: function (res) {
console.log(res)
i=0;
while (res.devices[i]) {
console.log(i);
console.log(res.devices[i].name,res.devices[i].deviceId); if(res.devices[i].name=='YahBoom_BL'){
deviceId=res.devices[i].deviceId;
console.log(deviceId);
}
i++;
}
}
})
},
getconnecteddevice:function(){
//services:[],
success: function (res) {
console.log(res)
}
})