微信小程序蓝牙打印指令

安卓系统,微信小程序调用蓝牙打印机(汉印M35)是怎么打印的。
不知道我的思路对不对。首先调用微信的蓝牙api,然后向蓝牙输出打印指令。 但是我
不知道打印指令是什么。
但是我拿到了打印机的SDK文档和SO文件,打印指令和打印SDK有什么关系。
比如SDK: 画直线: int Line(String X0, String Y0, String X1, String Y1, String width)
如果思路正确:请问打印指令怎么获取?
如果思路不正确:那么蓝牙打印思路应该是怎样的?

看了下A300给出的SDK,里面是SO文件+jar接口包,这种方式提供出来,是无法用微信小程序直接调用蓝牙打印机的。
必须有一个蓝牙软件连接着打印机,且封装了so文件,才可以打印。
用法1.自己做程序,装入他们的sdk。
用法2.买个小型开发板接或者弄个电脑做代理,然后自己再封装一层协议,最后做成小程序。

用法2:小型开发版,可以买arm或者mip的,linux或者安卓都行,比如最常见的树莓派就可以。然后做成安卓或者linux程序后,再加入http协议或者mqtt协议。然后让开发板接入到你公网服务器。然后你服务器里面跑小程序后台。

根据WX BLE.API获取蓝牙,serviceID,UUUID等。
我使用的汉印便携式打印机自己找了份编程手册,上面有各种格式的指令,需要做指令转换,每行封装Int8Array,wx.writeBLECharacteristicValue即可。

HM-A300/HM-T300编程手册部分内容
BOX 命令
用户可以使用 BOX 命令生成具有指定线条宽度的矩形。
格式:
{command} {x 0 } {y 0 } {x 1 } {y 1 } {width}
其中:
{command}: BOX
{x 0 }: 左上角的 X 坐标。
{y 0 }: 左上角的 Y 坐标。
{x 1 }: 右下角的 X 坐标。
{y 1 }: 右下角的 Y 坐标。
{width}: 形成矩形框的线条的单位宽度。
BOX 命令示例
输入:
!0 200 200 210 1
BOX 0 0 200 200 1
FORM
PRINT

LINE 命令
使用 LINE 命令可以绘制任何长度、宽度和角度方向的线条。
格式:
{command} {x 0 } {y 0 } {x 1 } {y 1 } {width}
其中:
{command}: 从下面选择一项:
LINE (或 L): 打印线条。
{x 0 }: 左上角的 X 坐标。
{y 0 }: 左上角的 Y 坐标。
{x 1 }: 以下项的 X 坐标:

  • 水平轴的右上角。
  • 垂直轴的左下角。 {y 1 }: 以下项的 Y 坐标:
  • 水平轴的右上角。
  • 垂直轴的左下角。 {width}: 线条的单位宽度 输入: !0 200 200 210 1 LINE 0 0 200 0 1 LINE 0 0 200 200 2 LINE 0 0 0 200 3 FORM PRINT

M35的有可能不一样,需要你自己找找或者问客服要

我的a300测试成功了,官方只给了安卓,ios的sdk。看了他们安卓的指令集是cpcl。
1.使用base64gb2312.js这个转码工具
2.字符串输入命令:例如 var t = "! 0 200 200 1350 1\r\nLINE 0 0 608 0 2\r\nTEXT 8 0 0 15 我测试\r\nSETMAG 2 2\r\nTEXT 8 0 0 58 测试\r\nTEXT 8 0 0 120 测试\r\nSETMAG 1 1\r\nTEXT 8 0 130 60 测试人: 狗狗\r\nTEXT 8 0 130 90 电话: 1666666666\r\nFORM\r\nPRINT\r\n"
3.编码成base64编码并且循环拆分成n多组的数组
for (var a = [], n = 0; n < Math.ceil(t.length / 10); n++) a[n] = wx.base64ToArrayBuffer(base.encode64gb2312(t.substr(n * 10, 10)));
4.延时调用wx.writeBLECharacteristicValue 且传入和这个a就好了

最重要就是这个base64gb2312.js这个编码方式其他就跟你普通打印差不多了图片说明