微信小程序蓝牙打印

在下使用:得力DL-886BW

主流打印机以及对应的指令集

  • 打印机:标签打印机、面单打印机、票据打印机等;
  • TSC -> TSPL;
  • 斑马用的ZPL、EPL、CPCL;
  • EPSON ESC/POS;
  • 国内例如:佳博、芯烨、汉印等,有许多TSPL;

有兴趣自己做了解

蓝牙必要前置知识

  • 蓝牙是什么?
  • 蓝牙打印流程涉及到什么?
    • 编程无非就是找准 对象 -> 指针 -> 算法 -> 数据结构
    • 蓝牙公司:
      • 蓝牙公司,就是区别蓝牙的唯一认证
      • 既然需要蓝牙打印,就需要连接蓝牙,蓝牙肯定有唯一标识提供连接
      • (蓝牙设备uuid -> advertisServiceUUIDs或叫做deviceId)
    • 蓝牙部门:
      • 一个蓝牙分成多个部门,叫做蓝牙服务。
      • 他们(员工)会求大同存小异,分类在不同的部门(我测试过一个部门里的员工,完全只有读Read服务)具体如何分类暂时不清楚
      • (蓝牙服务uuid -> services.uuid)
    • 蓝牙员工:
      • 蓝牙特征,就是部门的员工
      • (蓝牙设备特征 -> Characteristic)
    • 蓝牙员工才能:
      • 蓝牙特征的属性,亦叫做蓝牙特征值,这是最后关键的临门一脚
      • 员工才是最后提供服务的对象,知己知彼百战不殆,疑人不用用人不疑
      • 不同员工才能有所差异,对此衍生了有Read(读)、Notify(通知)、Write(写)、WriteWithout Response(只写,不返回写的结果)等服务
      • 蓝牙打印必须要write特征值,最好加上notify,详情后续
      • (蓝牙设备特征值 -> properties)
  • 最好看一下,并且在后面承上启下多做回顾

小程序蓝牙api流程

  • 初始化蓝牙模块 wx.openBluetoothAdapter()
  • 开始搜寻附近的蓝牙外围设备 wx.startBluetoothDevicesDiscovery()
    • 此操作比较耗费系统资源,请在搜索并 连接到设备后 调用 wx.stopBluetoothDevicesDiscovery 方法停止搜索,网上见过一些Demo无休止的搜索,醉了。
    • 可以通过 services -> 蓝牙设备uuid 参数,过滤掉周边不需要处理的其他蓝牙设备。
       // 以微信硬件平台的蓝牙智能灯为例,主服务的 UUID 是 FEE7。传入这个参数,只搜索主服务 UUID 为 FEE7 的设备
       wx.startBluetoothDevicesDiscovery({
         services: ['FEE7'],
         success (res) {
           console.log(res)
         }
       })
    
蓝牙设备主 service 的 uuid 获取
  • 监听寻找到新设备的事件 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、指令集说明书仔细浏览

数据异常包括:

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

连接蓝牙异常

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

蓝牙发送时异常


蓝牙发送成功后异常

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

  • 问题所在
    • 数据发送异常,以上
  • 解决
    • 找到对应的数据异常类型,进行改正

2. 打印数据异常

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

3. 设备异常(如:无限走纸,控制按钮失效异常等)

  • 问题所在
    • 看看是否存在打印纸,有可能打完了
    • 数据发送异常,以上
  • 解决
    • 重启或者恢复出厂设置(有能力者可以自己发送指令重置)

问题思考

  1. 蓝牙打印机异常故障如何对接?
  2. 蓝牙打印机重启,软件如何同步或者判断是否可以打印?
  3. 若没提供便捷的还原出厂设置,是否可以使用指令解决?

参考

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343