微信小程序实现蓝牙打印


Posted in Javascript onSeptember 23, 2019

最近刚好完成了一个打印标签的项目,其中就涉及到了小程序的蓝牙功能。所以写下这篇粗略的文章记录一下,同时也是给即将做相关项目的亲们提供一个参考,也希望有什么描述不恰当或者技术上不正确的地方大家可以指出,一起进步。

蓝牙打印只要按这九个步骤(前六个步骤连接蓝牙,后三个步骤打印数据)就可以搞定啦!步骤如下:

第一步:初始化蓝牙模块 wx.openBluetoothAdapter

wx.openBluetoothAdapter({
 success (res) {
 console.log(res)//res:{errMsg: "openBluetoothAdapter:ok"}
 }
})

第二步:开始搜寻附近的蓝牙外围设备 wx.startBluetoothDevicesDiscovery

wx.startBluetoothDevicesDiscovery({
 //services: ['FEE7'],只搜索主服务 UUID 为 FEE7 的设备,如果明确知道主服务UUID可以用此项做筛选
 success (res) {
 console.log(res)//res:{errCode: 0, errMsg: "startBluetoothDevicesDiscovery:ok", isDiscovering: true}
 }
})

第三步:获取已搜素到的蓝牙设备列表 wx.getBluetoothDevices

wx.getBluetoothDevices({
 success: function (res) {
 console.log(res)//res:{errMsg: "getBluetoothDevices:ok", devices: Array(3)}
 }
})

第四步:监听寻找到新设备的事件 wx.onBluetoothDeviceFound(有时候会第三步会搜不到所以需要使用监听器去随时监听搜索到的蓝牙设备并返回给你)

wx.onBluetoothDeviceFound(function(res) {
 console.log(res)//res:{devices: Array(1)}
})

第五步:连接蓝牙设备 wx.createBLEConnection

wx.createBLEConnection({
 deviceId,//上面选择蓝牙设备的deviceId,例:连接第一个设备devices[0].deviceId
 success (res) {
 console.log(res)//{errCode: 0, errMsg: "createBLEConnection:ok"}
 }
})

第六步:停止搜寻附近的蓝牙外围设备 wx.stopBluetoothDevicesDiscovery(可以写在第五步成功回调之后,或者是

onUnload()函数里)
wx.stopBluetoothDevicesDiscovery({
 success (res) {
 console.log(res)
 }
})

第七步:获取蓝牙设备所有服务 wx.getBLEDeviceServices

wx.getBLEDeviceServices({
 deviceId,//已连接的蓝牙设备ID
 success (res) {
 console.log(res)//{errMsg: "getBLEDeviceServices:ok", services: Array(5), errCode: 0}
 }
})
//这边获取到了5个服务

第八步:获取蓝牙设备中某一个服务的所有特征值 wx.getBLEDeviceCharacteristics

var characteristics="";
wx.getBLEDeviceCharacteristics({
 deviceId,
 serviceId,//第七步的服务ID,
 success (res) {
 //res:{errMsg: "getBLEDeviceCharacteristics:ok", characteristics: Array(4), errCode: 0}
 //characteristics[0].properties: {read: true, write: false, notify: false, indicate: false}
 //特征值有好几种类型,我们这边打印需要的是item.properties.write为true的特征值
 for (var i = 0; i < res.characteristics.length; i++) {
 var item = res.characteristics[i];
 if (item.properties.write) {
 characteristics = item.uuid;
 }
 }
 //保存特征值
 }
})

第九步:向蓝牙设备特征值中写入数据 wx.writeBLECharacteristicValue

wx.writeBLECharacteristicValue({
 deviceId,
 serviceId,
 characteristicId,//上面保存的特征值
 value: buffer, // 这里的value是ArrayBuffer类型,中间层传过来的打印数据前端自己做转换,转换过程我这边就不描述了;
 success (res) {
 console.log('writeBLECharacteristicValue success', res.errMsg)
 }
})
//特别提醒建议每次写入的buffer不超过20字节,超过会有写入错误的风险,所以一个打印的内容可能要拆成N个20字节的buffer去循环writeBLECharacteristicValue,这样就能打印成功啦。

附:

微信小程序官方文档

示例代码(uniapp实现小程序蓝牙打印简易流程)

另注:无论是原生、WePY、mpvue或uniapp、调用步骤都是一样的,不过调用API的前缀需要改成对应的就OK了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
通过js获取div的background-image属性
Oct 15 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
Apr 20 Javascript
js上传图片及预览功能实例分析
Apr 24 Javascript
简单实现IONIC购物车功能
Jan 10 Javascript
vue-resource 拦截器使用详解
Feb 21 Javascript
详解angularJs指令的3种绑定策略
Apr 13 Javascript
详解webpack require.ensure与require AMD的区别
Dec 13 Javascript
vue v-model实现自定义样式多选与单选功能
Jul 05 Javascript
Vue递归实现树形菜单方法实例
Nov 06 Javascript
微信小程序API—获取定位的详解
Apr 30 Javascript
Node.js之删除文件夹(含递归删除)代码实例
Sep 09 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
Jun 08 Javascript
微信接入之获取用户头像的方法步骤
Sep 23 #Javascript
从零搭一个自用的前端脚手架的方法步骤
Sep 23 #Javascript
layui 实现加载动画以及非真实加载进度的方法
Sep 23 #Javascript
layui加载数据显示loading加载完成loading消失的实例代码
Sep 23 #Javascript
ES10的13个新特性示例(小结)
Sep 23 #Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
Sep 23 #Javascript
vue多页面项目中路由使用history模式的方法
Sep 23 #Javascript
You might like
一些php技巧与注意事项分析
2011/02/03 PHP
php异步多线程swoole用法实例
2014/11/14 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
PHPMailer发送邮件
2016/12/28 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
javascript 网页跳转的方法
2008/12/24 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
javascript的函数作用域
2014/11/12 Javascript
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
2015/08/15 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
微信小程序之GET请求的实例详解
2017/09/29 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
Vue数据监听方法watch的使用
2018/03/28 Javascript
webpack4+react多页面架构的实现
2018/10/25 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
[01:03:33]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
django之常用命令详解
2016/06/30 Python
Python序列操作之进阶篇
2016/12/08 Python
python opencv人脸检测提取及保存方法
2018/08/03 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
python返回数组的索引实例
2019/11/28 Python
Python基础之函数基本用法与进阶详解
2020/01/02 Python
春节到了 教你使用python来抢票回家
2020/01/06 Python
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
Myholidays美国:在线旅游网站
2019/08/16 全球购物
销售人员自我评价
2014/02/01 职场文书
《她是我的朋友》教学反思
2014/04/26 职场文书
2016优秀护士求职自荐信
2016/01/28 职场文书
golang 生成对应的数据表struct定义操作
2021/04/28 Golang