微信开发之蓝牙设备接入

一 蓝牙设备接入微信的基本条件

网上相对于这一块的资料不是特别多,而且有些博主整理的非常好的开发流程也会忽略很多东西,对于一个因为临时需求需要研究硬件设备的人来说太多没说明的坑。
在这里推荐一个链接: 快速入门微信硬件开发。里面的内容很详细,但却没提到硬件这一块,我也是遇到了很多的坑,目前仍在坑里!


长话短说,首先要准备的东西有:1、认证的服务号 2、支持Airsync协议的蓝牙设备

申请服务号

申请了服务号之后,我们可以在微信公众平台中的“添加功能插件”中添加设备功能,点击进入,里面有“产品管理”和“设置”,两个内容,我们先把设置中的设备连接状态 启用,否则默认关闭的情况下,等你测试连接设备的时候,公众号顶部不会显示是否连接,也就无从判断是否成功了。

添加产品

 添加产品,产品管理提供了两种方式,一种是型号产品,另一种是一码一产品。在没有认证的情况下,每种产品都只能有100个授权名额, 第一种类型是,该产品下的所有授权设备只有一个识别码,就是添加型号产品提供的二维码,扫描该二维码,会寻找附近该产品二维码下授权的设备(你开发完成后才能实现这种效果)。(一般投入使用都是这种形式);而一码一产品的意思就是,每授权一个设备,都会提供一个二维码,他们是一一对应的,我们测试的时候可以选择这种。


添加完产品后,产品图片下面会有个Product_id 这个ID在调用设备授权接口的要用到,确认你要将设备添加到哪些产品下面。

准备工作就到此为止了。

二 蓝牙接入微信需要的步骤

调用接口返回设备ID和二维码

说出来你可能不信,微信团队已经懒到不想写文档直接放了张图片在开发文档上面,我刚回到家没有代码,你们感受下只有图片没有代码的感觉,下面是官方提供的接口。返回的参数有N个,其中我们需要知道的是deviceid和另外一个q开头的参数(累到不想找资料),是一个URL,事实上Q开头的参数就是二维码。大伙自个测试的时候找个二维码生成器生成一下就得了。


这个请求中。PRODUCT_ID就是我们在微信公众号添加产品的时候分配的。可以到微信公众平台设备功能上找到。

每次请求都会失去一个授权名额。所以不要一直重复请求。另外,我在测试的时候因为当时不知道蓝牙设备需要支持Airsync协议。所以连接设备一直提示连接不上。用AirsyncDebugger调试工具也返回UUID出错。这个应该就是协议中需要添加的字段。不过这个是硬件编程那一块的内容了。因为无法连接设备,而我又一直重复请求,每次绑定。但是每次绑定都失败,所以我不知道我的设备绑定成功没有,会不会因为这个原因导致一个设备绑定了多个设备ID,导致出错。理论上是不会的。可能设备ID的绑定会被覆盖掉,也就是最后一个绑定的才有效,不管怎样,等我的新样机(支持微信协议)送过来了我就可以测试了,开心。我明明是做前端的,为什么写起了微信开发,甚至去了解硬件了???

这一步比较简单,没什么太多要注意的。重点是在授权设备那一步

调用接口设备授权

可以直接复制下面的代码,官方给的例子中,参数不适合我们测试用。注意坑


{
    "device_num":"1",
    "device_list":[
    {
    "id":"gh_24d22b8407e5_8cf9b0f1b0873c3d",
    "mac":"F01B6C2AB9CF",
    "connect_protocol":"3",
    "auth_key":"",
    "close_strategy":"1",
    "conn_strategy":"1",
    "crypt_method":"0",
   "auth_ver":"0",
    "manu_mac_pos":"-1",
    "ser_mac_pos":"-2",
   "ble_simple_protocol": "0"
}
],
"op_type":"1"
}


这里是POST请求, 提交的数据是JSON格式,千万要注意的是,device_list这个参数是个数组,所以用PHP写的小伙伴千万别一股脑的写个数组然后JSON_ENCODE这样会出错的,它并不是整个都是JSON格式。所以把上面数据当成字符串放进去就好,这里尤其需要注意的参数有几个,ID是在上一步中微信返回的设备ID。是由微信那边分配的,MAC是你的设备地址,connect_protocol这个是设备的蓝牙类型,1表示安卓 classic类型,2是IOS classic  3是BLE  安卓平台 classic和BLE不允许同时存在   ,具体详情请看文档http://iot.weixin.qq.com/wiki/new/index.html?page=5-1-3

注意自己设备的蓝牙版本

auth_ver auth_key  crypt_method  根据上面的代码就好,都表示不加密,如果填其他参数的话,硬件设备还得把这些数据烧进去。

当返回的结果中errmsg:0的时候 说明成功了。那么接下来就是扫描微信返回的二维码(前面一步),因为已经把设备ID和MAC绑定了。所以要做的就是扫描二维码识别设备。不出意外的话就会显示连接成功(苦逼如我不知道普通蓝牙设备是没法开发的,必须要支持Airsync协议的设备才行。


微信打印机已经到啦

今天微信打印机已经到手了,该设备符合airSync协议,之前写的代码把mac地址一改就已经连接成功啦。

现在已经连接上了设备,也能打印东西,但是中文乱码,原因是厂家是用JAVA写的,而我个人是用PHP写的,在转码过程中,JAVA和PHP的差异比较多,其中转码过程包括String ->byte[] ->bytetohex->parseINT(str,16)->fromcharcode->base64,其中比较难处理的是PHP的mb_strlen(GBK)是异常的。我暂时还没有去测厂家的DEMO,自己写了,发现转码过程到十六进制的时候都是正常的。接下来在JS部分处理的内容直接复制就可以,结果却乱码,我就在想,原本厂家就把一个中文放到了byte数组里面的两个单位里gebytes('gbk'),然后把每个字节转换成16进制,最后再换成十进制,再返回该十进制unicode码所返回的字符串,这么一来,原本的中文被分成了两个。我觉得是必然乱码的,而且最终都是返回字符串,为何不可以直接把字符串用base64来处理。结果是:不行

编码的问题我还不是很熟,需要继续了解。以下的代码我也不能再放出来了,一来是因为每个厂家的设备规定的转码方式不同,二来因为保密协议不能公开任何代码。所以关于如何打印出内容只能靠你们自己和厂家那边一起弄了。

以上内容已经完成了设备的连接,可以放心食用

你可能感兴趣的:(微信开发,微信硬件平台之蓝牙打印机)