• 蓝牙公司,就是区别蓝牙的唯一认证
  • 既然需要蓝牙打印,就需要连接蓝牙,蓝牙肯定有唯一标识提供连接
  • (蓝牙设备uuid -> advertisServiceUUIDs或叫做deviceId)
  • 蓝牙部门:
  • 一个蓝牙分成多个部门,叫做蓝牙服务。
  • 他们(员工)会求大同存小异,分类在不同的部门(我测试过一个部门里的员工,完全只有读Read服务)具体如何分类暂时不清楚
  • (蓝牙服务uuid -> services.uuid)
  • 蓝牙员工:
  • 蓝牙特征,就是部门的员工
  • (蓝牙设备特征 -> Characteristic)
  • 蓝牙员工才能:
  • 蓝牙特征的属性,亦叫做蓝牙特征值,这是最后关键的临门一脚
  • 员工才是最后提供服务的对象,知己知彼百战不殆,疑人不用用人不疑
  • 不同员工才能有所差异,对此衍生了有Read(读)、Notify(通知)、Write(写)、WriteWithout Response(只写,不返回写的结果)等服务
  • 蓝牙打印必须要write特征值,最好加上notify,详情后续
  • (蓝牙设备特征值 -> properties)
  • 开始搜寻附近的蓝牙外围设备 wx.startBluetoothDevicesDiscovery()
  • 此操作比较耗费系统资源,请在搜索并 连接到设备后 调用 wx.stopBluetoothDevicesDiscovery 方法停止搜索,网上见过一些Demo无休止的搜索,醉了。
  • 可以通过 services -> 蓝牙设备uuid 参数,过滤掉周边不需要处理的其他蓝牙设备。
  •    // 以微信硬件平台的蓝牙智能灯为例,主服务的 UUID 是 FEE7。传入这个参数,只搜索主服务 UUID 为 FEE7 的设备
       wx.startBluetoothDevicesDiscovery({
         services: ['FEE7'],
         success (res) {
           console.log(res)
    
  • 监听寻找到新设备的事件 wx.onBluetoothDeviceFound()
  • 获取设备的信息,里面包含(蓝牙设备uuid -> advertisServiceUUIDs或叫做deviceId)
  • 连接低功耗蓝牙设备 wx.createBLEConnection()
  • 传入你要连接的(蓝牙设备uuid -> advertisServiceUUIDs或叫做deviceId)
  • 获取蓝牙设备服务 wx.getBLEDeviceServices()
  • 这是获取蓝牙服务List,判断isPrimary == true该服务为主服务,然后选择我们想要的(蓝牙服务uuid -> services.uuid)
  • 获取蓝牙设备服务的特征值 wx.getBLEDeviceCharacteristics()
  • Write:有写的功能,并且通过 Notify(通知)属性 返回数据到手机
  • 判断 write == true,最好加上 notify == true
  • 确认特征,就是确认了(蓝牙设备特征 -> Characteristic)
  • 向低功耗蓝牙设备特征值中写入二进制数据 wx.writeBLECharacteristicValue()
  • 传入 设备id、服务id、特征id、和经过分包的二进制的指令数据,进行打印
  • 断开蓝牙连接、关闭蓝牙模块 wx.closeBLEConnection()、 wx.closeBluetoothAdapter()
  • 苹果手机ios可以打印
  • 安卓手机Android不能打印,是因为安卓 Android 底层貌似做了限制只能接受20个字节,所以数据包要拆分成20字节一组,多组多次发送 demo里面有拆分操作可以自己查看
  • 数据编码格式转换

    开发请把打印机说明书、微信小程序蓝牙api、指令集说明书仔细浏览

    数据异常包括:

  • 发送指令与设备应接收类型不匹配(如 TSPL指令 对应 TSC标签打印机
  • 指令错误(要保持绝对规范,包括空格、换行符、单双引号、单位等)
  • 编码格式:微信官方例子是 gb2312,我使用 gb18030(测试暂时发现无差别)
  • 连接蓝牙异常

  • 小程序蓝牙只支持BLE低功耗蓝牙
  • 微信要允许访问蓝牙和位置信息的权限
  • 确定手机蓝牙、定位打开
  • 搜索蓝牙设备、连接蓝牙设备、加载设备的服务都需要时间,请在完全加载后,再进行下一步操作,迈妻搓咯叫
  • 重启蓝牙设备(打印机)
  • 不行的时候,删掉手机中蓝牙设备(打印机),重新链接
  • 蓝牙发送时异常

  • 这一点参考WX小程序官方文档,向低功耗蓝牙设备特征值中写入二进制数据

    蓝牙发送成功后异常

    1. 返回uni.writeBLECharacteristicValue:ok,但就是不打印

  • 数据发送异常,以上
  • 找到对应的数据异常类型,进行改正
  • 2. 打印数据异常

  • 数据发送异常,以上
  • 找到对应的数据异常类型,进行改正
  • 市场上标签打印机品牌和种类很多,可能同一种通讯指令,都会在不同产品中做了变动
  • 如:我使用 GAP指令,可能机器学习后内置了,输入无效,甚至会导致接下的 CLS指令 异常失效,因厂家不提供指令集,填了一个深坑
  • 自己动手控制变量,逐一排查(最好购买的时候就确定了指令)
  •