微信小程序——蓝牙通信
声明:学习本就是一个枯燥的过程,这篇文章是本人经过多天的学习,研究,又经过不停的编写代码测试才总结出来的,在此之前本人从未接触过有关JS的任何编程代码,难免有出错的地方,请斟酌参考。
一、整体思路
‘1.初始化手机蓝牙设备
wx.openBluetoothAdapter(Object object)
该函数其实就是检查手机蓝牙是不是可以使用,所以第一步就是要调用这个函数。
2.监听蓝牙适配器状态变化事件
wx.onBluetoothAdapterStateChange(function callback)
该函数其实就是再小程序中开一个后台用来监听手机蓝牙是否可以使用,建议放在初始化蓝牙设备后面调用。
3.开始搜寻附近的蓝牙外围设备
wx.startBluetoothDevicesDiscovery(Object object)
该函数的作用正是开始搜寻附近蓝牙设备的一个初始化程序,也可以说是搜寻蓝牙设备前的一个准备工作程序,其实个人认为真正的搜寻蓝牙设备程序在下一步(监听寻找到新的蓝牙设备)。
4.监听寻找到新的蓝牙设备
wx.onBluetoothDeviceFound(function callback)
该函数用于持续监听附近是否有新的蓝牙设备,在开始搜寻附近的蓝牙外围设备后调用。
5.连接低功耗蓝牙设备
wx.createBLEConnection(Object object)
到这一步就可以进行蓝牙连接了,注意这一步讲的是连接低功耗蓝牙设备,也就是说不能用来连接经典蓝牙设备,微信到目前为止也没有和经典蓝牙通信的api出现,个人认为这对向我这样的新手而言也算是个坑啦。
6.停止搜寻附近的蓝牙外围设备
wx.stopBluetoothDevicesDiscovery(Object object)
在蓝牙设备正常连接到后,要是不需要继续查找新的蓝牙设备,可以调用次函数来关闭后台的查找蓝牙设备函数用来节约设备资源。
7.获取蓝牙设备所有服务
wx.getBLEDeviceServices(Object object)
个人认为该函数是用来获取蓝备牙设服务的ID,个人所理解为是打开蓝牙设备服务的钥匙,没有此函数获取的蓝牙服务 uuid,后面的蓝牙服务(收发数据等都无法正常进行)。
8.获取蓝牙设备某个服务中所有特征值(characteristic)。
wx.getBLEDeviceCharacteristics(Object object)
个人认为这部分是或许蓝牙具体的服务,如获取蓝牙的收发数据的服务,并判断该服务能否进行。
9.启用低功耗蓝牙设备特征值变化时的 notify 功能,订阅特征值。
wx.notifyBLECharacteristicValueChange(Object object)
只有在启用了notify功能后才能调用wx.onBLECharacteristicValueChange(function callback)
来监听特征值的变化,个人理解此处特征值的含义为蓝牙发送的数据。
10.监听低功耗蓝牙设备的特征值变化事件
wx.onBLECharacteristicValueChange(function callback)
个人认为此函数的主要目的在于监听蓝牙设备发送来的数据。
11.读取低功耗蓝牙设备的特征值的二进制数据值
wx.readBLECharacteristicValue(Object object)
接口读取到的信息需要在 onBLECharacteristicValueChange 方法注册的回调中获取。我也不是很明白微信为什么要这么做,或许是我太菜了啊吧。
12.向低功耗蓝牙设备特征值中写入二进制数据
wx.writeBLECharacteristicValue(Object object)
这个应该不用多说了,就是向设备蓝牙发送数据。
13.断开与低功耗蓝牙设备的连接
wx.closeBLEConnection(Object object)
这个函数也不难理解,就是在不需要连接该蓝牙设备的时候将其断开。
14.关闭蓝牙模块
wx.closeBluetoothAdapter(Object object)
关闭蓝牙模块。调用该方法将断开所有已建立的连接并释放系统资源。建议在使用蓝牙流程后,与 wx.openBluetoothAdapter 成对调用。
- 各个函数使用的简单介绍
1、wx.openBluetoothAdapter(Object object) 初始化手机蓝牙设备
wx.openBluetoothAdapter({
success: (res) => { function1 }, //注意此处是,而不是; 表示本机蓝牙设备初始化成功后调用的函数
fail: (res) => { function2 } //表示本机蓝牙设备初始化失败后调用的函数
})
2、wx.onBluetoothAdapterStateChange(function callback) 监听蓝牙适配器状态变化事件
wx.onBluetoothAdapterStateChange(function (res) { //监听蓝牙适配器的状态
if(res.available) //蓝牙适配器可以使用
{
function1
}
else //蓝牙适配器不可以使用
{
function2
}
if(res.discovering) //蓝牙适配器处于搜索状态
{
function3
}
else //蓝牙适配器不处于搜索状态
{
function4
}
})
3、wx.startBluetoothDevicesDiscovery(Object object) 开始搜寻附近的蓝牙外围设备
wx.startBluetoothDevicesDiscovery({ //开始搜索附近蓝牙设备
allowDuplicatesKey: true, //允许搜索到同一蓝牙设备
success :res=> {function1}, //接口调用成功回调函数
fail:res =>(function2) //接口调用失败回调函数
})
4、wx.onBluetoothDeviceFound(function callback) 监听寻找到新的蓝牙设备
wx.onBluetoothDeviceFound( //监听到新的蓝牙设备
res=>{ //参数res object类型
res.devices.forEach( //devices为res的属性,搜索到的设备列表
device=>{
function1
}
)
}
)
5、wx.createBLEConnection(Object object)连接低功耗蓝牙设备
wx.createBLEConnection({ //连接低功耗蓝牙
deviceId, //所需连接设备的设备ID
timeout : number, //连接超时设置 number*1ms
success:(res)=>{function1},//连接成功所调用的函数
fail:(res)=>{function2} //连接失败所调用的函数
})
6、wx.stopBluetoothDevicesDiscovery(Object object) 停止搜寻附近的蓝牙外围设备
wx.stopBluetoothDevicesDiscovery({//停止搜寻附近的蓝牙外围设备
success: (res) => { function1 },//调用接口成功所调用的函数
fail: (res) => { function2 } //调用接口失败所调用的函数
})
7、wx.getBLEDeviceServices(Object object) 获取蓝牙设备所有服务
wx.getBLEDeviceServices({ //获取蓝牙设备所有服务
deviceId, //蓝牙设备 id
success:res=>{
for (let i = 0; i <= res.services.length;i++)
{
if (res.services[i].isPrimary) { function1 } //该服务是否为主服务
}
}
})
8、wx.getBLEDeviceCharacteristics(Object object) 获取蓝牙设备某个服务中所有特征值(characteristic)。
wx.getBLEDeviceCharacteristics({ //取蓝牙设备某个服务中所有特征值(characteristic)
deviceId, //蓝牙设备 id
serviceId,//蓝牙服务 uuid,需要使用 getBLEDeviceServices 获取
success : res=>{
for (let i=0;i <= res.characteristics.length;i++)
{
var item = res.characteristics[i];
if (item.properties.read){function1} //查看设备是否支持读取数据功能
else {function2}
if (item.properties.write) { function3 } //查看设备是否支持发送数据功能
else { function4 }
if (item.properties.notify || item.properties.indicate) //查看设备是否支持notify功能
{
wx.notifyBLECharacteristicValueChange(Object object); //item.uuid 为蓝牙的特征值id
}
else { function5 }
}
},
fail:res=>{function6}
})
9、wx.notifyBLECharacteristicValueChange(Object object)
启用低功耗蓝牙设备特征值变化时的 notify 功能,订阅特征值。
wx.notifyBLECharacteristicValueChange({ //启用低功耗蓝牙设备特征值变化时的 notify 功能,订阅特征值。
deviceId, //蓝牙设备 id
serviceId,//蓝牙服务 uuid,需要使用 getBLEDeviceServices 获取
characteristicId,//为蓝牙的特征值id
state: true //启用 notify
})
10、wx.onBLECharacteristicValueChange(function callback) 监听低功耗蓝牙设备的特征值变化事件
wx.onBLECharacteristicValueChange(function (characteristic)//监听低功耗蓝牙设备的特征值变化事件
{
var newvalue = ab2hex(characteristic.value); // ArrayBuffer转16进度字符串示例 newvalue为新收到的数据
}
)
)
11、wx.readBLECharacteristicValue(Object object)读取低功耗蓝牙设备的特征值的二进制数据值
wx.readBLECharacteristicValue({//读取低功耗蓝牙设备的特征值的二进制数据值
deviceId, //蓝牙设备 id
serviceId,//蓝牙服务 uuid,需要使用 getBLEDeviceServices 获取
characteristicId,//为蓝牙的特征值id
})
12、wx.writeBLECharacteristicValue(Object object)向低功耗蓝牙设备特征值中写入二进制数据
wx.writeBLECharacteristicValue({//向低功耗蓝牙设备特征值中写入二进制数据
deviceId, //蓝牙设备 id
serviceId,//蓝牙服务 uuid,需要使用 getBLEDeviceServices 获取
characteristicId,//为蓝牙的特征值id
value: arrayBuffer //传输的数组
})
13、wx.closeBLEConnection(Object object) 断开与低功耗蓝牙设备的连接
wx.closeBLEConnection({//断开与低功耗蓝牙设备的连接
deviceId,//蓝牙设备 id
success:res=>{function1} //接口调用成功的接口函数
})
14、wx.closeBluetoothAdapter(Object object) 关闭蓝牙模块
wx.closeBluetoothAdapter({//关闭蓝牙模块
success: (res) => { function1 }, //注意此处是,而不是; 表示本机蓝牙设备关闭成功后调用的函数
fail: (res) => { function2 } //表示本机蓝牙设备关闭失败后调用的函数
})