当前位置:首页>办公设备>打印机>

蓝牙的小型打印机(便携式蓝牙打印机软件)

蓝牙的小型打印机(便携式蓝牙打印机软件)

更新时间:2022-02-20 01:17:35
1 微信小程序蓝牙功能开发概述
  • 第一步 判断当前微信版本,是否支持蓝牙 通信
  • 第二步 打开蓝牙
  • 第三步扫描设备
  • 第四步连接设备
  • 第五步 获取服务与特征值 看是否支持读写数据操作
  • 第六步 发送数据

本文章 是记录的第五步中的内容点

2 wx.getBLEDeviceCharacteristics

wx.getBLEDeviceCharacteristics 用来获取
获取蓝牙设备某个服务中所有特征值(characteristic)

关键核心代码如下

2.1 获取连接蓝牙的所支持的服务

我这一步是已经扫描到了可用的蓝牙设备,获取到其中的一个设备的 deviceId,callBack是我设置的一个回调函数

//获取蓝牙设备所有服务(service) function getBLEDeviceServices(deviceId, callBack) { console.log("连接低功耗蓝牙设备成功 开始获取蓝牙服务" deviceId) wx.getBLEDeviceServices({ deviceId, success: (res) => { console.log("连接低功耗蓝牙设备成功 获取蓝牙服务成功" deviceId) console.log("getBLEDeviceServices success") for (let i = 0; i < res.services.length; i ) { if (res.services[i].isPrimary) { getBLEDeviceCharacteristics(deviceId, res.services[i].uuid, callBack) } } }, fail: (res) => { console.log("连接低功耗蓝牙设备成功 获取蓝牙服务失败" deviceId) console.log("getBLEDeviceServices fail") console.log("获取蓝牙服务失败:" JSON.stringify(res)) } }) }

微信官方文档这里有有问题的,我的实践是在部分安卓手机有,是有多个服务在可用状态,如果这里return 回去了,会导致下一步中判断不可输出数据问题,实际上是可以输出的

2.2 获取特征值关键核心代码

需要根据蓝牙设备的 deviceId 与 serviceId 服务ID来获取特征值,如是否支持读取蓝牙设备的数据或者是否支持向蓝牙设备中写数据,都是通过特征值来判断的

在部分安卓手机中,可能会有多个 可用服务,也就是多个 serviceId,每个serviceId中提供的特征值不一样,需要组合起来使用

function getBLEDeviceCharacteristics(deviceId, serviceId, callBack) { wx.getBLEDeviceCharacteristics({ deviceId, serviceId, success: (res) => { console.log('getBLEDeviceCharacteristics success', res.characteristics) for (let i = 0; i < res.characteristics.length; i ) { let item = res.characteristics[i] console.log("characteristics " gloableBlueName " read " item.properties.read) console.log("characteristics " gloableBlueName " write " item.properties.write) console.log("characteristics " gloableBlueName " notify " item.properties.notify) console.log("characteristics " gloableBlueName " indicate " item.properties.indicate) if (item.properties.read) { //可读数据 wx.readBLECharacteristicValue({ deviceId, serviceId, characteristicId: item.uuid, }) } if (item.properties.write) { // 可写数据 } } } }, fail(res) { console.error('获取特征值失败:', res) }, complete() { if (callBack) { console.log('回调 canWrite ' canWrite.toString()); //我这里主要是用到了可写数据操作 callBack(canWrite); } } }) ,