微信小程序实现蓝牙打印


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实现上传图片之上传前预览图片
Mar 25 Javascript
javascript下拉列表菜单的实现方法
Nov 18 Javascript
微信小程序 location API实例详解
Oct 02 Javascript
jQuery图片拖动组件Dropzone用法示例
Jan 17 Javascript
vue开发调试神器vue-devtools使用详解
Jul 13 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
Mar 26 Javascript
vue实现底部菜单功能
Jul 24 Javascript
如何能分清npm cnpm npx nvm
Jan 17 Javascript
vue中动态select的使用方法示例
Oct 28 Javascript
vue实现图片上传功能
May 28 Javascript
vue自动添加浏览器兼容前后缀操作
Aug 13 Javascript
微信小程序实现单个或多个倒计时功能
Nov 01 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中数组的三种排序方法分享
2012/05/07 PHP
Laravel 5框架学习之用户认证
2015/04/09 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
JavaScript基本对象
2007/01/11 Javascript
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
JavaScript之Object类型介绍
2015/04/01 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
jQuery实现动态生成表格并为行绑定单击变色动作的方法
2017/04/17 jQuery
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
vue2 设置router-view默认路径的实例
2018/09/20 Javascript
使用vue cli4.x搭建vue项目的过程详解
2020/05/08 Javascript
python 简易计算器程序,代码就几行
2009/08/29 Python
Python 时间操作例子和时间格式化参数小结
2014/04/24 Python
python判断图片宽度和高度后删除图片的方法
2015/05/22 Python
详解Python中的元组与逻辑运算符
2015/10/13 Python
python3安装pip3(install pip3 for python 3.x)
2018/04/03 Python
Python中if有多个条件处理方法
2020/02/26 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
Python里面如何拷贝一个对象
2014/02/17 面试题
质检的岗位职责
2013/11/17 职场文书
土木建筑学生自我评价
2014/01/14 职场文书
《美丽的彩虹》教学反思
2014/02/25 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
2014年秋季开学典礼致辞
2014/08/02 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
全国劳模先进事迹材料(2016精选版)
2016/02/25 职场文书
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL
详解Python中的for循环
2022/04/30 Python