##微信小程序蓝牙打印
由于项目有微信小程序通过蓝牙打印机打印小票的需求,因此有了这个demo。第一次做这类相关的操作,在此做个记录。
- 基本的蓝牙打印机的连接
- 打印文字以及使用ESC/POS命令操作打印机(虽然不是很熟悉)
- 打印二维码
- 微信小程序蓝牙通信官方API
- 官方文档后最先参考的便是这位兄弟的代码和文档,实现了与蓝牙设备的通信 https://github.com/lixiantai/BLE_MiniProgram
- 通过蓝牙打印机打印指定格式的内容,在这里学习了对ESC/POS命令的使用 https://github.com/benioZhang/miniprogram-bluetoothprinter
- ESC(POS)打印控制命令
- 打印二维码资料参考,写的很详细 https://blog.csdn.net/cfujiC/article/details/86013122#commentsedit
- 小程序绘制二维码插件
- weapp.qrcode.js 使用canvas绘制
- weapp-qrcode-base64 使用纯base64绘制,不依赖canvas
- 打印光栅位图的参考,二维码就是以这种形式打印出来的,对我来说有点深奥,需要多读几遍https://www.jianshu.com/p/dd6ca0054298
-
基本流程:初始化蓝牙设备 -> 搜索(在此之前监听蓝牙搜寻) -> 结束搜索 -> 连接蓝牙设备 -> 获取设备服务 -> 获取设备服务相关的特征值 -> 写入二进制数据
-
需要蓝牙设备特征值支持write的特征值才可以写入数据,而设备可能会有许多服务,每个服务有很多特征值,需要一层一层的验证,直到获取到支持write的特征值
-
向蓝牙设备写入的数据为ArrayBuffer类型(敲黑板)
-
根据官方文档,写入数据一次建议不超过20字节,需要对要打印的数据进行分包处理,并延时多次调用
-
打印光栅位图的指令
ASCII码 GS v 0 m xL xH yL yH d1...dk 十进制码 29 118 48 m xL xH yL yH d1...dk
其中 xL, xH, yL, yH需要根据要打印的位图宽高计算而出,否则会出现乱码或模糊的情况,参考https://www.jianshu.com/p/dd6ca0054298
-
监听搜索到的设备在iOS需要做去重处理,由于之前是用安卓设备写的,没有留意到这个问题,现补充